diff --git a/CMakeLists.txt b/CMakeLists.txt index 2183a28..697fe7b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,12 +11,16 @@ link_directories (${CMAKE_INSTALL_PREFIX}/lib) project (planetblupi) set (PB_VERSION_MAJOR 1) -set (PB_VERSION_MINOR 9) -set (PB_VERSION_PATCH 1) +set (PB_VERSION_MINOR 11) +set (PB_VERSION_PATCH 0) set (PB_VERSION_EXTRA "") set (PB_PRODUCT_NAME "Planet Blupi") set (PB_PACKAGE_NAME "planetblupi") -set (PB_DESCRIPTION "Planet Blupi - A delerious spell-binding game") +set (PB_EXEC "planetblupi") +set (PB_ICON_REF "blupi") +set (PB_DESCRIPTION "Planet Blupi - A delirious spell-binding game") + +option (PB_HTTP_VERSION_CHECK "Run a version check over HTTP (with CURL)" OFF) configure_file ( "${PROJECT_SOURCE_DIR}/src/config.h.in" @@ -32,11 +36,19 @@ if (APPIMAGE_APPRUN_PROGRAM AND APPIMAGE_ASSISTANT_PROGRAM) set (USE_APPIMAGE ON) endif () +if (NOT USE_APPIMAGE) + configure_file ( + "${PROJECT_SOURCE_DIR}/resources/linux/application.desktop.in" + "${CMAKE_CURRENT_BINARY_DIR}/${PB_PACKAGE_NAME}.desktop" + @ONLY + ) +endif () + if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -std=c++11 -L${CMAKE_INSTALL_PREFIX}/lib") endif () -if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") +if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND "${STATIC_BUILD}") set (CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++") endif () @@ -94,32 +106,50 @@ endif (MINGW) # Dependencies -set (CMAKE_INCLUDE_PATH ${CMAKE_INSTALL_PREFIX}/include) -set (CMAKE_LIBRARY_PATH ${CMAKE_INSTALL_PREFIX}/lib) +if ("${STATIC_BUILD}") + set (CMAKE_INCLUDE_PATH ${CMAKE_INSTALL_PREFIX}/include) + set (CMAKE_LIBRARY_PATH ${CMAKE_INSTALL_PREFIX}/lib) +endif () + find_package (Intl REQUIRED) +include_directories (${Intl_INCLUDE_DIRS}) + find_package (Iconv REQUIRED) +include_directories (${Iconv_INCLUDE_DIRS}) + find_package (Argagg REQUIRED) +include_directories (${Argagg_INCLUDE_DIRS}) + find_package (SDLKitchensink REQUIRED) +include_directories (${SDLKitchensink_INCLUDE_DIRS}) find_package (PkgConfig REQUIRED) pkg_search_module (SDL2 REQUIRED sdl2) pkg_search_module (SDL2_MIXER REQUIRED SDL2_mixer) pkg_search_module (SDL2_IMAGE REQUIRED SDL2_image) -pkg_search_module (CURL REQUIRED libcurl) -# Static dependencies for SDL_kitchensink -pkg_search_module (PNG REQUIRED libpng) -pkg_search_module (AVCODEC REQUIRED libavcodec) -pkg_search_module (AVFORMAT REQUIRED libavformat) -pkg_search_module (AVUTIL REQUIRED libavutil) -pkg_search_module (SWSCALE REQUIRED libswscale) -pkg_search_module (SWRESAMPLE REQUIRED libswresample) - -if (UNIX AND NOT APPLE) - pkg_search_module (ALSA REQUIRED alsa) - pkg_search_module (PULSE REQUIRED libpulse) +if (${PB_HTTP_VERSION_CHECK}) + pkg_search_module (CURL REQUIRED libcurl) + add_definitions (-DUSE_CURL) endif () -set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DCURL_STATICLIB") +if ("${STATIC_BUILD}") + pkg_search_module (PNG REQUIRED libpng) + # Static dependencies for SDL_kitchensink + pkg_search_module (AVCODEC REQUIRED libavcodec) + pkg_search_module (AVFORMAT REQUIRED libavformat) + pkg_search_module (AVUTIL REQUIRED libavutil) + pkg_search_module (SWSCALE REQUIRED libswscale) + pkg_search_module (SWRESAMPLE REQUIRED libswresample) + + if (UNIX AND NOT APPLE) + pkg_search_module (ALSA REQUIRED alsa) + pkg_search_module (PULSE REQUIRED libpulse) + endif () + + if (${PB_HTTP_VERSION_CHECK}) + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DCURL_STATICLIB") + endif () +endif () ########################### ## Main binary dependencies @@ -127,28 +157,50 @@ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DCURL_STATICLIB") add_executable (planetblupi ${sources}) -set (planetblupi_DEPS - ${Intl_LIBRARIES} - ${Iconv_LIBRARIES} - ${SDL2_STATIC_LIBRARIES} - ${SDL2_MIXER_STATIC_LIBRARIES} - ${SDL2_IMAGE_STATIC_LIBRARIES} - ${CURL_STATIC_LIBRARIES} - ${SDLKitchensink_STATIC_LIBRARIES} - ${PNG_STATIC_LIBRARIES} - ${AVCODEC_STATIC_LIBRARIES} - ${AVFORMAT_STATIC_LIBRARIES} - ${AVUTIL_STATIC_LIBRARIES} - ${SWSCALE_STATIC_LIBRARIES} - ${SWRESAMPLE_STATIC_LIBRARIES} -) - -if (UNIX AND NOT APPLE) - list (APPEND planetblupi_DEPS - ${ALSA_STATIC_LIBRARIES} - ${PULSE_STATIC_LIBRARIES} +if ("${STATIC_BUILD}") + set (planetblupi_DEPS + ${Intl_LIBRARIES} + ${Iconv_LIBRARIES} + ${SDL2_STATIC_LIBRARIES} + ${SDL2_MIXER_STATIC_LIBRARIES} + ${SDL2_IMAGE_STATIC_LIBRARIES} + ${SDLKitchensink_STATIC_LIBRARIES} + ${PNG_STATIC_LIBRARIES} + ${AVCODEC_STATIC_LIBRARIES} + ${AVFORMAT_STATIC_LIBRARIES} + ${AVUTIL_STATIC_LIBRARIES} + ${SWSCALE_STATIC_LIBRARIES} + ${SWRESAMPLE_STATIC_LIBRARIES} ) - set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L${CMAKE_INSTALL_PREFIX}/lib/pulseaudio") + + if (${PB_HTTP_VERSION_CHECK}) + list (APPEND planetblupi_DEPS + ${CURL_STATIC_LIBRARIES} + ) + endif () + + if (UNIX AND NOT APPLE) + list (APPEND planetblupi_DEPS + ${ALSA_STATIC_LIBRARIES} + ${PULSE_STATIC_LIBRARIES} + ) + set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L${CMAKE_INSTALL_PREFIX}/lib/pulseaudio") + endif () +else () + set (planetblupi_DEPS + ${SDL2_LIBRARIES} + ${SDL2_MIXER_LIBRARIES} + ${SDL2_IMAGE_LIBRARIES} + ${CURL_LIBRARIES} + ${SDLKitchensink_LIBRARIES} + pthread + ) + + if (${PB_HTTP_VERSION_CHECK}) + list (APPEND planetblupi_DEPS + ${CURL_LIBRARIES} + ) + endif () endif () target_link_libraries (planetblupi PUBLIC ${planetblupi_DEPS}) @@ -219,6 +271,13 @@ if (UNIX AND NOT APPLE) install (DIRECTORY resources/icon/hicolor DESTINATION share/icons) endif () +if (NOT USE_APPIMAGE) + install ( + FILES ${CMAKE_CURRENT_BINARY_DIR}/${PB_PACKAGE_NAME}.desktop + DESTINATION share/applications + ) +endif () + # Copy libwinpthread-1.dll which seems not be linkable statically if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows" AND MINGW) execute_process (COMMAND cygpath.exe --windows /mingw64 OUTPUT_VARIABLE MINGW64_PATH) @@ -231,7 +290,7 @@ endif () ## Deploy ######### -if ("${CMAKE_BUILD_TYPE}" STREQUAL "Release") +if ("${CMAKE_BUILD_TYPE}" STREQUAL "Release" AND "${STATIC_BUILD}") # set (CPACK_STRIP_FILES TRUE) set (CPACK_PACKAGE_NAME ${PB_PACKAGE_NAME}) set (CPACK_PACKAGE_VENDOR "blupi.org") @@ -246,7 +305,7 @@ if ("${CMAKE_BUILD_TYPE}" STREQUAL "Release") if (USE_APPIMAGE) include (LinuxAppImageBuild) set (CMAKE_PACKAGED_OUTPUT_PREFIX ${CMAKE_INSTALL_PREFIX}) - APPIMAGE_PACKAGE (planetblupi ${PB_PACKAGE_NAME} ${PB_PRODUCT_NAME} "${CMAKE_CURRENT_SOURCE_DIR}/resources/linux" "${CMAKE_BINARY_DIR}/share" "" "" "blupi") + APPIMAGE_PACKAGE (planetblupi ${PB_PACKAGE_NAME} ${PB_PRODUCT_NAME} "${CMAKE_CURRENT_SOURCE_DIR}/resources/linux" "${CMAKE_BINARY_DIR}/share" "" "" ${PB_ICON_REF}) elseif (MINGW) set (INSTALLER_FILE_NAME "${PB_PACKAGE_NAME}-${PB_VERSION_MAJOR}.${PB_VERSION_MINOR}.${PB_VERSION_PATCH}${PB_VERSION_EXTRA}") set (CPACK_PACKAGE_FILE_NAME "${INSTALLER_FILE_NAME}") diff --git a/README-user.md b/README-user.md index 75b98b0..1c4d195 100644 --- a/README-user.md +++ b/README-user.md @@ -8,10 +8,10 @@ to construct your own missions. | Category | Description | | -------- | ----------- | -| OS | At least GNU/Linux 2.6.32, macOS 10.7 or Microsoft Windows Vista | -| VIDEO | An 3D accelerated video card is highly recommended | -| SOUND | Any sound card supported by ALSA, sndio, macOS or DirectSound | -| INPUT | Keyboard and mouse | +| OS | At least GNU/Linux 2.6.32, macOS 10.9 or Microsoft Windows Vista | +| VIDEO | An 3D accelerated video card is highly recommended | +| SOUND | Any sound card supported by ALSA, PulseAudio, macOS or DirectSound | +| INPUT | Keyboard and mouse | ## Screen problems @@ -19,10 +19,10 @@ What ever your screen resolution is, the game "Planet Blupi" always runs in 640x480 on full screen. If your screen does not support this mode, you may run the game by default in windowed mode. Proceed as follows: -- 1. Quit the game _Planet Blupi_. -- 2. Open the file `/data/config.json` with a text editor. -- 3. Replace `fullscreen: true` by `fullscreen: false`. -- 4. Save and restart the game. +1. Quit the game _Planet Blupi_. +2. Open the file `/data/config.json` with a text editor. +3. Replace `fullscreen: true` by `fullscreen: false`. +4. Save and restart the game. In this mode the screen is no more scrolled if the mouse touches the window border. Use the Keyboard arrows instead. @@ -32,9 +32,9 @@ border. Use the Keyboard arrows instead. Left button: This button is always used in three steps: -- 1. Select a Blupi. -- 2. Click where you want him to act. -- 3. Click the button corresponding to the required operation. +1. Select a Blupi. +2. Click where you want him to act. +3. Click the button corresponding to the required operation. If the chosen Blupi is already selected (blue or red circle around him), step 1) is not necessary. diff --git a/resources/data/config.json b/resources/data/config.json index cbf07af..ed4fe9c 100644 --- a/resources/data/config.json +++ b/resources/data/config.json @@ -1,4 +1,5 @@ { "fullscreen": true, + "zoom": 1, "speedrate": 1 } diff --git a/resources/data/it/stories.blp b/resources/data/it/stories.blp new file mode 100644 index 0000000..887ae52 --- /dev/null +++ b/resources/data/it/stories.blp @@ -0,0 +1,1116 @@ +$1 +1|Obbiettivo : +1| +1|Ogni Blupi deve entrare in una casa. +1|Per fare ciò, utilizza il pulsante +1|principale del mouse (solitamente +1|quello di sinistra). + +2|1) Clicca su un Blupi. +2| Un anello blu compare ai suoi piedi +2| per indicare che è stato selezionato. +2| +2|2) Clicca su una casa. +2| +2|3) Clicca sul pulsante "Va". +2| +2|4) Ripeti le operazioni per il secondo +2| Blupi. + + + + + + + + + + Dopo aver letto queste istruzioni, + clicca sul dado qui sotto. + +$2 +Ecco un altro esercizio un pochino più +difficile : + +1|E' sufficiente trasportare due cumuli +1|di legno sulle lastre tratteggiate +1|situate a destra ... +1| +1|Prima di fare ciò, Blupi deve mangiare +1|dei pomodori per disporre della forza +2|necessaria. Ti accorgerai che quando +2|mangia l'anello rosso ai suoi piedi +2|diventa blu. Questo anello indica il +2|suo livello d'energia : +2| +2| rosso = stanco +2| blu = in piena forma + + + +Trucco : +Per far scorrere la parte visibile puoi +portare il mouse sul bordo dello schermo, +oppure utilizzare i tasti freccia della +tastiera. + +$3 +1|Trova le uova ... +1| +1|Deponendole in un'incubatrice, +1|potrai far nascere +1|quattro Blupi nuovi di zecca ! + + + + + +Trucco : +Potrai ottenere migliori risultati +tenendo il mouse con la mano destra, +e azionando i tasti freccia +della tastiera con la mano sinistra ! + +$4 +1|Obbiettivo : +1| +1|I quattro Blupi devono raggiungere +1|le case che si trovano su altre isole +1|a nord-est. + +2|Ogni Blupi deve mangiare per avere +2|la forza di saltare ! + +$5 +1|Obbiettivo : +1| +1|Deporre due lotti di pomodori sulle +1|lastre tratteggiate. Per fare ciò è +1|necessario : +1| +1|1) Abbattere il boschetto. + +2|2) Costruire un capanno. +2| +2|3) Coltivare pomodori. +2| +2|4) Deporre due lotti di pomodori sulle +2| lastre tratteggiate (senza mangiarli). + +$6 +1|Obbiettivo : +1| +1|Ogni Blupi deve raggiungere una +1|casa su una piccola isola. +1| +1|Sfortunatamente il cibo +1|disponibile è sufficiente per un +1|solo Blupi ! +2|Sarà dunque necessario trovare il +2|mezzo per produrre cibo per tutti. +2| +2|Fortunatamente l'isola possiede +2|molti alberi ... + +#h1 +Blupi viveva tranquillamente sul +suo pianeta, sino all'arrivo di uno +strano meteorite che cade in +una regione deserta. + +Solo molto tempo dopo Blupi +si accorge che le sue coltivazioni +sono devastate da grossi ragni. + +Inoltre, mentre Blupi godeva +sempre di una salute di ferro, gli +capita di starnutire e di prendere +una strana malattia. + +#h2 +Cosa sta accadendo ? + +Ebbene, lo strano meteorite +è in realtà un razzo che trasporta +un robot molto particolare. + +Infatti, questo costruisce delle +fabbriche che producono nemici +di diversa natura. + +Blupi deve a questo punto +sfruttare tutte le risorse del +suo pianeta per riuscire a +scacciare gli intrusi ... + +#1 +La caduta del razzo ha incendiato +la foresta, in lontananza. +Il villaggio di Blupi è in pericolo ! + + +1|Obbiettivo : +1| +1|Impedire che le case del villaggio +1|brucino. Per fare ciò vi è un solo +1|mezzo: abbattere gli alberi a +1|sinistra ... + + + + + + +2|Trucco : +2| +2|Se un Blupi è nascosto tra gli +2|alberi, premi la barra spaziatrice +2|per rendere temporaneamente gli +2|alberi trasparenti. + +@1 +1|Soluzione : +1| +1|Ordinare al Blupi di sinistra di +1|abbattere degli alberi poco più +1|a ovest. + +2|I due altri Blupi trasporteranno +2|man mano le assi verso sud. +2|In questo modo saranno al riparo +2|dal fuoco ! + +#2 +1|Situazione : +1| +1|Blupi si è perso in una radura +1|distante dal suo villaggio. Deve +1|organizzarsi sul posto prima di +1|ritrovare il suo villaggio. +1| +1|1) Costruire un capanno da +1| giardino e coltivare pomodori. + +2|2) Costruire un'incubatrice per +2| ottenere rinforzi. +2| +2|3) Nutrire i quattro Blupi e partire +2| alla ricerca del villaggio ... +2| + + +2|Attenzione : +2| +2|Qualche cosa di strano sta per +2|accadere ! + +@2 +1|Indizi : +1| +1|E' prima di tutto necessario +1|costruire due palizzate a nord, +1|per bloccare il ragno. +2|Dopo sarà possibile costruire un +2|capanno da giardino e coltivare +2|pomodori in pace. +2| +2|Per raggiungere le quattro case, +2|bisogna cercare in direzione est. + +#3 +1|Obbiettivo : +1| +1|Impedire che i quattro Blupi +1|smarriti nella foresta muoiano +1|carbonizzati. +1| +1|Per fare ciò, è necessario +1|terminare la costruzione del +1|muro di protezione. + + + +2|Attenzione : +2| +2|Quando il terreno è costituito +2|da muschio, brucia +2|meravigliosamente bene ... + +@3 +1|Soluzione : +1| +1|1) Spaccare una roccia. +1| Le rocce più piccole si spaccano +1| più rapidamente ! + +2|2) Costruire un muro tra i due +2| muri esistenti. +2| +2|3) Attendere che il fuoco si +2| spenga ... + +#4 +1|Obbiettivo : +1| +1|Consentire ai quattro Blupi di +1|raggiungere le lastre tratteggiate. + +@4 +1|Soluzione : +1| +1|1) Abbattere un albero. +1| +1|2) Trasportare le assi sulla riva +1| dell'acqua. +1| +1|3) Costruire un ponte in direzione +1| dei due Blupi stanchi. + +2|4) Ripetere il tutto tre volte ... +2| +2|I Blupi stanchi possono ora +2|attraversare il ponte e raggiungere +2|le lastre tratteggiate. + +#5 +1|La trappola : +1|Attenzione, il terreno dove sono +1|prigionieri i Blupi è molto +1|infiammabile e l'incendio avanza ... +1| +1|Obbiettivo : +1|Resistere sino a che l'incendio non +1|è stato domato. + +2|Attenzione : +2|La costruzione di un muro è un +2|lavoro massacrante. E' inevitabile +2|che Blupi muoia una volta +2|concluso un muro ! + +Trucco : +Se il gioco si svolge troppo +lentamente per i tuoi gusti, premi +il tasto F6 per accelerarlo. +Premendo il tasto F5 potrai +ristabilire la velocità normale. + +@5 +1|Indizi : +1| +1|E' necessario costruire quattro +1|muri sulle lastre grigie. Per +1|fare ciò, bisognerà abbattere i +1|due boschetti disponibili per +1|costruire un capanno e +1|un'incubatrice. + +2|Quando i muri saranno terminati, +2|bisognerà pazientare sino +2|all'arrivo del fuoco e alla +2|sua estinzione ... + +#6 +1|Obbiettivo : +1| +1|Proteggi il più rapidamente +1|possibile il campo trincerato +1|tra 4 torri, perché il pericolo +1|avanza ... + +2|Potrai in seguito raggiungere le +2|lastre tratteggiate a sud-est. + + + + + + +Trucco : +E' possibile selezionare diversi +Blupi contemporaneamente +mantenendo premuto il tasto +Maiuscolo e cliccando al tempo +stesso su ogni Blupi. + +@6 +1|Soluzione : +1| +1|Bisogna chiedere in fretta ai +1|quattro Blupi di spaccare ognuno +1|una roccia. Le rocce piccole sono +1|più veloci da spaccare ! +1| +1|Trasportare i quattro cumuli di +1|pietre così ottenuti sulle lastre +1|grigie e costruire poi delle +1|torri di protezione. + +2|Attendere l'arrivo e la distruzione +2|dei virus. +2| +2|A questo punto i rimanenti quattro +2|Blupi possono tranquillamente +2|dirigersi verso le lastre +2|tratteggiate a sud-est. + +#7 +1|Obbiettivo : +1| +1|I quattro Blupi devono raggiungere +1|le lastre tratteggiate. +1|Sarà necessario prendersi cura del +1|povero Blupi più lontano ... + +2|Attenzione : +2| +2|Il terreno non consente di costruire +2|un capanno da giardino ! + +@7 +1|Soluzione : +1| +1|Chiedere ad un Blupi di prendere +1|dei pomodori per salvarli dai +1|ragni golosoni. +1| +1|Con un altro Blupi saltare sull'isola +1|ad est e costruire poi un ponte in +1|direzione delle lastre tratteggiate. + +2|Trasportare i pomodori verso il +2|Blupi affaticato, affinché si +2|possa nutrire prima di spostarsi. + +#8 +1|Obbiettivo : +1| +1|Cerca di evitare che uno o due +1|Blupi vengano contaminati, poi +1|trova l'antidoto per i Blupi +1|ammalati ... +1| +1|Alla fine, ogni Blupi dovrà entrare +1|in una casa. + + + +2|Indizio : +2| +2|Costruisci un laboratorio ... + +@8 +1|Indizi : +1| +1|E' necessario costruire un +1|laboratorio usando delle pietre. +1|Questo consentirà in seguito di +1|trasformare i fiori gialli in una +1|pozione per i Blupi ammalati. + +2|Sarà necessario costruire un +2|ponte per portare le bottiglie +2|di pozione ai Blupi ammalati. +2| +2|Le case si trovano a sud-est ... + +#9 +1|Obbiettivo : +1| +1|Trova il modo per passare oltre +1|la pista di pattinaggio ... +1| + + + +2|Nota : +2| +2|Blupi può camminare sul ghiaccio. +2|L'unico inconveniente è che Blupi +2|scivola con facilità, e così +2|facendo perde molte forze ! + +@9 +1|Indizi : +1| +1|E' necessario costruire due torri +1|per proteggersi dai ragni. +1| +1|In seguito bisogna costruire un +1|capanno da giardino e +1|un'incubatrice per far +1|schiudere le uova. + +2|Blupi perde moltissime forze +2|quando attraversa la pista da +2|pattinaggio. E' dunque necessario +2|portare dei pomodori poco prima +2|della pista di pattinaggio +2|affinché Blupi possa mangiare +2|prima di attraversarla ! + +#10 +1|Obbiettivo : +1| +1|Raggiungere l'isola a nord-est, +1|poi saltare la palizzata. + +2|Non rimane altro da fare che +2|posizionare 4 Blupi sulle lastre +2|tratteggiate ... + +@10 +1|Indizi : +1| +1|E' necessario costruire un ponte in +1|direzione dei quattro prigionieri. +1|Ciò consente di tagliare una +1|roccia da riportare verso il +1|capanno da giardino per costruire +1|un laboratorio. +1| +1|I fiori blu si trovano +1|a sud-est. Grazie al laboratorio +1|questi possono essere trasformati +1|in dinamite. + +2|Utilizza la dinamite per distruggere +2|la palizzata che tiene prigionieri i +2|quattro Blupi. Prima però +2|bisognerà far indietreggiare i +2|prigionieri il più possibile per +2|proteggerli dall'esplosione ... + +#11 +1|Obbiettivo : +1| +1|Raggiungere le case a nord-est. +1|Ma attenzione, sono ben +1|custodite ... + +@11 +1|Indizi : +1| +1|Costruisci un ponte verso l'isola +1|situata a nord-ovest, poi produci +1|un minimo di quattro candelotti +1|di dinamite. +1| +1|Posiziona in seguito la dinamite a +1|nord, abbastanza vicino ai bulldozer +1|affinchè questi si avvicinino, ma +1|senza esagerare.. + +2|Fintanto che la dinamite non è +2|pronta evita di avanzare verso +2|nord per non attirare i +2|bulldozer ... + +#12 +1|Obbiettivo : +1| +1|Tre Blupi devono raggiungere +1|il Blupi isolato su un'isola lontana +1|in direzione nord-ovest. + +@12 +1|Indizi : +1| +1|Costruisci un capanno da giardino +1|e coltiva pomodori. +1| +1|Produci della dinamite con i +1|fiori blu che troverai +1|a nord-est. + +2|Trasporta in seguito questa +2|dinamite verso l'isola che si +2|trova abbastanza lontano a +2|ovest. +2|Attenzione: il sentiero che passa a +2|sud nasconde due virus non molto +2|pericolosi ... + +#13 +1|Obbiettivo : +1| +1|Sbarazzarsi dei sei ragni. +1| +1|Per i primi quattro, la cosa +1|è abbastanza semplice, ma per gli +1|ultimi due, dovrai ricorrere a dei +1|trucchi ... + +2|Trucco : +2| +2|Trova il modo di produrre del +2|veleno nel laboratorio. + +@13 +1|Indizi : +1| +1|I primi quattro ragni vengono +1|catturati con delle trappole +1|costruite cogliendo dei fiori +1|e trasformandoli poi in trappole +1|collose in laboratorio. +1|Le trappole devono essere messe +1|vicino ai ragni. + +2|Gli ultimi due vengono avvelenati +2|trasformando i pomodori +2|in veleno con l'aiuto del +2|laboratorio ... +2|Per fare ciò sarà necessario +2|costruire un ponte per consentire +2|di trasportare i pomodori sino +2|al laboratorio. + +#14 +1|Obbiettivo : +1| +1|Blupi deve semplicemente tornare +1|nella sua casa ... + +@14 +1|Indizi : +1| +1|Sonda il terreno costituito da +1|piccoli sassi alla ricerca di ferro. +1|Posiziona in seguito delle assi +1|nel posto indicato con la bandierina +1|e costruisci una miniera di ferro. +1| +1|Taglia una roccia per costruire +1|una fabbrica che ti consentirà di +1|sfruttare il ferro ... + +2|Prendi una bomba poi salta nella +2|jeep e dirigiti verso est. La jeep +2|ti protegge dai bulldozer. +2| +2|Quando giungi vicino alla palizzata +2|devi scendere rapidamente dalla +2| jeep, posizionare e far esplodere +2|la bomba, risalire sulla jeep +2|e allontanarti ... + +#15 +1|Obbiettivo : +1| +1|Un solo Blupi deve raggiungere +1|la casa situata a nord-est. + +2|Per fare ciò sarà necessario +2|distruggere le numerose +2|postazioni nemiche. + +@15 +1|Indizi : +1| +1|Costruisci un capanno da giardino +1|e due torri di protezione sulle +1|lastre grigie. +1| +1|Costruisci un ponte per raggiungere +1|l'isola ad est. Cogli vari tipi di +1|fiori che riporterai al campo base. + +2|Costruisci un laboratorio poi +2|produci della dinamite e delle +2|trappole collose. Proteggi l'interno +2|del campo con le trappole e +2|l'esterno con la dinamite. +2| +2|Quando ritieni di aver prodotto +2|trappole e dinamite a sufficienza +2|spedisci un piccolo commando +2|verso nord-est per distruggere +2|il campo nemico ... + +#16 +1|Situazione : +1| +1|Blupi si è smarrito in una regione +1|arida e priva di alberi. + + +2|Obbiettivo : +2| +2|I due Blupi devono rientrare +2|al villaggio nelle loro case ... + +@16 +1|Indizi : +1| +1|Trova la miniera di ferro a +1|nord-est poi taglia una roccia +1|per costruire una fabbrica. +1| +1|Costruisci una bomba a scoppio +1|ritardato e due Jeep. Parti alla +1|ricerca del campo nemico a +1|sud-ovest. + +2|In seguito fai saltare la barriera +2|che circonda il campo nemico +2|cercando di far saltare al tempo +2|stesso il bulldozer. +2| +2|Scendi verso sud alla ricerca +2|dell'unico albero e costruisci un +2|teletrasporto ... + +#17 +1|Obbiettivo : +1| +1|I cinque Blupi devono raggiungere +1|ognuno una casa. + +2|Attenzione, una casa si trova +2|dietro il campo nemico ! + + +Trucco : +E' possibile selezionare +diversi Blupi contemporaneamente +mantenendo premuto il tasto +Maiuscolo e cliccando al tempo +stesso sui Blupi. + +@17 +1|Indizi : +1| +1|Un Blupi può immediatamente +1|raggiungere la casa sull'isola +1|a ovest. Gli altri quattro +1|devono fuggire rapidamente dai +1|bulldozer partendo verso +1|nord-ovest. + +2|Abbastanza lontano in direzione +2|nord-ovest raggiungerai il +2|villaggio circondato da palizzate. +2| +2|A nord del villaggio si trova +2|una zona ricca di ferro ... +2| +2|Costruisci un'imbarcazione e parti +2|verso nord-est con una bomba a +2|scoppio ritardato ... + +#18 +1|Situazione : +1| +1|Mentre Blupi coglieva +1|tranquillamente dei fiori, +1|si è poco a poco allontanato +1|da casa sua. Ora si è smarrito +1|in una regione infestata dai +1|nemici. + + + + + +2|Obbiettivo : +2| +2|Blupi deve fuggire e trovare un +2|modo per tornare a casa sua. + +@18 +1|Indizi : +1| +1|Trova la distesa d'acqua che si +1|trova a ovest e costruisci +1|un'imbarcazione. E' necessario +1|prestare molta attenzione ai +1|numerosi virus ... +1| +1|Con l'imbarcazione è sufficiente +1|fare qualche metro per +1|oltrepassare il muro di divisione. +1|Sbarca allora sulla riva +1|superiore. + +2|La casa non è più molto lontana ... +2|ma è necessario evitare qualche +2|bulldozer ! + +#19 +1|Situazione : +1| +1|Quattro bulldozer terrorizzano +1|il villaggio di Blupi. + + +2|Obbiettivo : +2| +2|Eliminare i bulldozer ... + +@19 +1|Indizi : +1| +1|Chiedi a un Blupi di estrarre +1|del ferro e di costruire poi una +1|armatura. Questa ti proteggerà +1|dal fuoco. +1| +1|Parti verso est e costruisci una +1|barca. Prendi il largo e cerca +1|un'altra isola con un albero. +2|Abatti l'albero poi riporta la legna +2|che hai ottenuto su un'isola più +2|grande. Costruisci un teletrasporto +2|che ti porterà all'interno +2|dell'armeria. +2| +2|Posiziona qualche candelotto di +2|dinamite attorno al muro e fallo +2|saltare. Con la dinamite rimasta +2|puoi andare a eliminare i +2|bulldozer ! + +#20 +1|Obbiettivo : +1| +1|Distruggere tutte le postazioni +1|nemiche. + +@20 +1|Indizi : +1| +1|Produrre più dinamite possibile, +1|più trappole possibili, ecc ... +1|prima di far saltare la barriera +1|che circonda il campo nemico ... + +#21 +1|Situazione : +1| +1|Blupi è stato catturato dal +1|robot cattivo. +1|Ora è tenuto prigioniero +1|nel campo nemico. + + + +2|Obbiettivo : +2| +2|Blupi deve fuggire ... +2|e tornare a casa sua. + +@21 +1|Indizi : +1| +1|Prendi la dinamite a nord-est. +1|Posizionala in seguito contro una +1|barriera blu di fronte a un +1|passaggio tra le rocce. Il bulldozer +1|arriverà e farà esplodere la +1|dinamite e la barriera. + +2|Fuggi allora verso est, sino al fiume. +2|Costruisci una barca con delle assi. +2|Il secondo cumulo di assi servirà +2|a costruire una seconda barca +2|più avanti. Prima di ciò, sarà +2|necessario sbarazzarsi del +2|folgoratore con la trappola +2|collosa e costruire una bomba a +2|scoppio ritardato per far saltare +2|la barriera blu a est. + +#22 +1|Obbiettivo : +1| +1|1) Costruire delle barche. +1| +1|2) Esplorare tutte le isole. + +2|3) Distruggere tutte le +2| postazioni nemiche. + +@22 +1|Indizi : +1| +1|L'isola a nord-est contiene del +1|minerale di ferro. + +2|L'isola a est dispone di tutto +2|quanto serve per produrre della +2|dinamite e delle trappole collose. + +#23 +1|Situazione : +1| +1|Blupi è un gran curiosone: dopo +1|avere osservato il robot, per lungo +1|tempo, si è accorto di essersi +1|smarrito ... + + +2|Obbiettivo : +2| +2|Far arrivare dei rinforzi poi +2|distruggere tutti i nemici ! + +@23 +1|Indizi : +1| +1|Il Blupi isolato deve allontanarsi +1|dal robot e andare verso ovest. +1|Sarà necessario spaccare una +1|roccia per raggiungere il +1|deposito di legna, poi costruire +1|un teletrasporto. + +2|Con il secondo gruppo di Blupi, +2|sarà necessario costruire una +2|barca, trovare la bomba a +2|nord-est e far saltare la +2|barriera a sud. Ciò consentirà +2|di riportare la legna sull'isola +2|di partenza e di costruire un +2|teletrasporto per raggiungere +2|e aiutare il Blupi smarrito ... + +#24 +1|Situazione : +1| +1|La regione è infestata dai nemici. +1| + + +2|Obbiettivo : +2| +2|Eliminare tutti i nemici ... + +@24 +1|Indizi : +1| +1|Fuggi verso sud-est per evitare +1|l'incendio, poi costruisci una barca +1|con il solo albero di cui disponi. +1| +1|All'interno del campo trincerato +1|troverai del ferro. + +2|A nord del campo, vicino a un +2|piccolo lago, troverai delle uova ... + + +#25 +1|Da qualche tempo Blupi sospetta +1|dell'esistenza di uno strano +1|materiale portato sul suo +1|pianeta dal robot : +1| +1| il Platinium ... +1| +1|Questo materiale, che si trova +2|vicino al razzo del robot, +2|consentirebbe l'accesso alla +2|tecnologia nemica. +2| + +2|Obbiettivo : +2| +2|Riporta un cubo di Platinium +2|sulle lastre tratteggiate. + +@25 +1|Indizi : +1| +1|Elimina i due bulldozer con le +1|trappole collose. Costruisci una +1|barca a nord del primo campo +1|nemico poi prendi il largo con +1|una bomba a scoppio ritardato +1|in direzione est. + +2|Cerca una strada tra le rocce e +2|scendi verso sud. Il campo nemico +2|con il razzo si trova a est. Sarà +2|necessario far saltare una barriera +2|per prendere il Platinium. +2| +2|Riporta in seguito il Platinium nel +2|campo di partenza. + +#26 +1|Il cubo di Platinium consente +1|l'accesso alla tecnologia nemica +1|se utilizzato correttamente. + +2|Obbiettivo : +2| +2|Aiuta Blupi a ritrovare la sua +2|casa ... + +@26 +1|Indizi : +1| +1|Costruisci un robot-aiutante con +1|il cubo di Platinium in fabbrica. +1|Costruisci inoltre una bomba a +1|scoppio ritardato. +1| +1|Prendi la bomba con il robot che +1|potrà attraversare il campo +1|nemico a ovest senza problemi. +2|Fai saltare la barriera a nord, +2|poi prendi dei pomodori che +2|consentiranno di nutrire il Blupi +2|rimasto nel campo base. +2| +2|Deponi i pomodori appena prima +2|del primo salto. + +#27 +1|Situazione : +1| +1|Con gran faccia tosta, il robot +1|ha posto la sua base proprio +1|vicino al villaggio di Blupi. + + + +2|Obbiettivo : +2| +2|Raggiungere il campo nemico +2|poi distruggere tutto ... + +@27 +1|Indizi : +1| +1|Costruisci il più rapidamente +1|che puoi un teletrasporto, al fine +1|di raggiungere l'isola con le uova ... +1|Costruisci due torri di protezione +1|dove si trovano i cumuli di pietre. +1|Costruisci in seguito delle palizzate +1|a sinistra e a destra delle torri. + +2|Ora puoi tirare un sospiro di +2|sollievo ! +2| +2|Hai due possibilità per raggiungere +2|il campo nemico a nord : +2| +2|1) delle barche +2|2) un ponte +2| +2|A te la scelta ... + +#28 +1|Situazione : +1| +1|Blupi è un gran distratto. +1|Infatti ha costruito un muro +1|intorno alla sua casa, per +1|sbaglio ... + + +2|Obbiettivo : +2| +2|Blupi deve semplicemente +2|rientrare a casa ... + +@28 +1|Indizi : +1| +1|In un'isoletta a nord si trovano +1|molte uova. +1| +1|Sarà necessario attraversare il +1|campo nemico in fretta evitando +1|i bulldozer, da nord a sud, al +1|fine di cogliere i fiori blu. +2|Un altro Blupi in barca potrà +2|venire a prenderli per produrre +2|della dinamite ... +2| +2|Le uniche rocce che possono +2|essere usate sono a sud del +2|campo nemico, fuori dal muro +2|di cinta. + +#29 +1|Situazione : +1| +1|Lo spazio libero è sempre più +1|occupato dal robot e dai suoi +1|scagnozzi. + + + + +2|Obbiettivo : +2| +2|Blupi deve costruire il suo villaggio +2|prevedendo delle difese efficaci. +2|Sarà necessario in seguito passare +2|all'attacco ed eliminare tutti i +2|nemici ... + +@29 +1|Indizi : +1| +1|Costruire delle torri a nord-est, +1|a nord-ovest e a sud-est. +1|Le rocce si trovano a nord-ovest. +1| +1|Non abbattere gli alberi +1|intorno alle palizzate. Questi +1|migliorano le difese contro +1|le bombe saltatrici ! + +2|I fiori verdi a est consentono di +2|produrre delle trappole collose +2|per migliorare la difesa del +2|villaggio ! +2| +2|Estrarre del ferro a sud-ovest +2|e costruire delle bombe e delle +2|armature ... + +#30 +1|Situazione : +1| +1|Questa guerra non può più durare. +1|Un accordo è stato concluso con +1|l'ultimo robot sopravvissuto. Blupi +1|lo aiuta a raggiungere il suo +1|razzo. E questo s'impegna a +1|lasciare definitivamente il +1|pianeta Blupi ... + + + + +2|Obbiettivo : +2| +2|Preparare il cammino affinché il +2|robot possa raggiungere il suo +2|razzo. Offeso per aver perso, il +2|robot non si muoverà fintanto +2|che il sentiero non verrà +2|terminato ! + +@30 +1|Indizi : +1| +1|Spaccare della roccia a sud-est. +1|Abbattere un albero e costruire +1|una barca. Partire con la barca +1|alla ricerca di un'isola a nord-est. +1|Cercare del ferro poi costruire +1|una miniera e una fabbrica. +2|Costruire una bomba che +2|consentirà di far saltare le +2|barriere che circondano il robot. +2| +2|Non rimarrà altro che costruire +2|un ponte affinché il robot possa +2|raggiungere il suo razzo ... diff --git a/resources/image/little.png b/resources/image/little.png index 55a40e9..0ee5dba 100644 Binary files a/resources/image/little.png and b/resources/image/little.png differ diff --git a/resources/image/little_pl.png b/resources/image/little_pl.png deleted file mode 100644 index 7f7df27..0000000 Binary files a/resources/image/little_pl.png and /dev/null differ diff --git a/resources/image/text.png b/resources/image/text.png index ae88062..40f14bd 100644 Binary files a/resources/image/text.png and b/resources/image/text.png differ diff --git a/resources/image/text_pl.png b/resources/image/text_pl.png deleted file mode 100644 index a6e3ef0..0000000 Binary files a/resources/image/text_pl.png and /dev/null differ diff --git a/resources/linux/application.desktop.in b/resources/linux/application.desktop.in index 038b99c..cda0397 100644 --- a/resources/linux/application.desktop.in +++ b/resources/linux/application.desktop.in @@ -3,8 +3,8 @@ Version=1.0 Type=Application Name=@PB_PRODUCT_NAME@ GenericName=Video Game -Comment=@CPACK_PACKAGE_DESCRIPTION_SUMMARY@ -Exec=@APPIMAGE_EXEC@ -StartupWMClass=@APPIMAGE_EXEC_WM@ +Comment=@PB_DESCRIPTION@ +Exec=@PB_EXEC@ +StartupWMClass=@PB_EXEC@ Icon=@APPIMAGE_ICON_REF@ -Categories=Game; +Categories=Game;StrategyGame; diff --git a/resources/po/de.po b/resources/po/de.po index 3f872d5..c2267a5 100644 --- a/resources/po/de.po +++ b/resources/po/de.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-09-09 09:13+0200\n" -"PO-Revision-Date: 2017-09-09 09:13+0200\n" +"POT-Creation-Date: 2017-09-15 18:34+0200\n" +"PO-Revision-Date: 2017-10-04 23:30+0200\n" "Last-Translator: \n" "Language-Team: \n" "Language: de\n" @@ -548,6 +548,9 @@ msgstr "Auswahl der Musik" msgid "Music number 1" msgstr "Musik Nummer 1" +msgid "Music number 10" +msgstr "Musik Nummer 10" + msgid "Music number 2" msgstr "Musik Nummer 2" @@ -908,7 +911,7 @@ msgid "free slot" msgstr "frei" msgid "http://www.blupi.org info@blupi.org" -msgstr "" +msgstr "http://www.blupi.org info@blupi.org" #, c-format msgid "mission %d, time %d" diff --git a/resources/po/en_US.po b/resources/po/en_US.po index 8dc0d99..6c21e84 100644 --- a/resources/po/en_US.po +++ b/resources/po/en_US.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-09-09 09:13+0200\n" +"POT-Creation-Date: 2017-09-15 18:34+0200\n" "PO-Revision-Date: 2017-02-27 21:28+0100\n" "Last-Translator: \n" "Language-Team: \n" @@ -491,6 +491,9 @@ msgstr "" msgid "Music number 1" msgstr "" +msgid "Music number 10" +msgstr "" + msgid "Music number 2" msgstr "" diff --git a/resources/po/fr.po b/resources/po/fr.po index 6bbe451..90b0d59 100644 --- a/resources/po/fr.po +++ b/resources/po/fr.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-09-09 09:13+0200\n" -"PO-Revision-Date: 2017-09-09 09:13+0200\n" +"POT-Creation-Date: 2017-09-15 18:34+0200\n" +"PO-Revision-Date: 2017-10-04 23:29+0200\n" "Last-Translator: Mathieu Schroeter \n" "Language-Team: French \n" "Language: fr\n" @@ -543,6 +543,9 @@ msgstr "Choix de la musique" msgid "Music number 1" msgstr "Musique numéro 1" +msgid "Music number 10" +msgstr "Musique numéro 10" + msgid "Music number 2" msgstr "Musique numéro 2" @@ -900,7 +903,7 @@ msgid "free slot" msgstr "libre" msgid "http://www.blupi.org info@blupi.org" -msgstr "" +msgstr "http://www.blupi.org info@blupi.org" #, c-format msgid "mission %d, time %d" diff --git a/resources/po/it.po b/resources/po/it.po new file mode 100644 index 0000000..5886215 --- /dev/null +++ b/resources/po/it.po @@ -0,0 +1,917 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-09-29 10:21+0200\n" +"PO-Revision-Date: 2017-10-04 17:30+0200\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.11\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid " - FFmpeg (LGPLv2.1)" +msgstr " - FFmpeg (LGPLv2.1)" + +msgid " - GNU/gettext and GNU/libiconv (GPLv3)" +msgstr " - GNU/gettext e GNU/libiconv (GPLv3)" + +msgid " - SDL2, SDL2_image and SDL2_mixer (zlib license)" +msgstr " - SDL2, SDL2_image e SDL2_mixer (zlib licensa)" + +msgid " - SDL_kitchensink (MIT)" +msgstr " - SDL_kitchensink (MIT)" + +msgid " - argagg (MIT)" +msgstr " - argagg (MIT)" + +msgid " - libasound (LGPLv2.1)" +msgstr " - libasound (LGPLv2.1)" + +msgid " - libcurl (MIT/X derivate)" +msgstr " - libcurl (MIT/X derivata)" + +msgid " - libpng (own license)" +msgstr " - libpng (licensa personale)" + +msgid " - libpulse (LGPLv2.1)" +msgstr " - libpulse (LGPLv2.1)" + +msgid " - zlib (own license)" +msgstr " - zlib (licensa personale)" + +msgid "(isolated tower)" +msgstr "(torre isolata)" + +msgid "" +"1: Cut down a tree \n" +"2: Build a bridge" +msgstr "" +"1: Abbatti un albero \n" +"2: Costruisci un ponte" + +msgid "" +"1: Cut down a tree \n" +"2: Make a boat" +msgstr "" +"1: Abbatti un albero \n" +"2: Costruisci una barca" + +msgid "" +"1: Cut down a tree \n" +"2: Make a palisade" +msgstr "" +"1: Abbatti un albero \n" +"2: Costruisci una palizzata" + +msgid "" +"1: Extract iron\n" +"2: Make a Jeep" +msgstr "" +"1: Estrai del ferro\n" +"2: Costruisci una Jeep" + +msgid "" +"1: Extract iron\n" +"2: Make a bomb" +msgstr "" +"1: Estrai del ferro\n" +"2: Costruisci una bomba" + +msgid "" +"1: Extract iron\n" +"2: Make an armour" +msgstr "" +"1: Estrai del ferro\n" +"2: Costruisci un'armatura" + +msgid "" +"1: Grow tomatoes\n" +"2: Eat" +msgstr "" +"1: Coltiva...\n" +"2: Mangia" + +msgid "" +"1: Make a bunch\n" +"2: Transform" +msgstr "" +"1: Fai un mazzo\n" +"2: Trasforma" + +msgid "" +"1: Take\n" +"2: Build a bridge" +msgstr "" +"1: Prendi\n" +"2: Costruisci un ponte" + +msgid "" +"1: Take\n" +"2: Build palisade" +msgstr "" +"1: Prendi\n" +"2: Costruisci una palizzata" + +msgid "" +"1: Take\n" +"2: Make a boat" +msgstr "" +"1: Prendi\n" +"2: Costruisci una barca" + +msgid "" +"1: Take\n" +"2: Transform" +msgstr "" +"1: Prendi\n" +"2: Trasforma" + +msgid "" +"1|Drop planks on striped \n" +"1|paving stones." +msgstr "" +"1|Posa delle assi \n" +"1|sulle lastre tratteggiate." + +msgid "" +"1|Drop platinium on striped \n" +"1|paving stones." +msgstr "" +"1|Posa del platinium sulle \n" +"1|lastre tratteggiate." + +msgid "" +"1|Drop tomatoes on striped \n" +"1|paving stones." +msgstr "" +"1|Posa dei pomodori sulle \n" +"1|lastre tratteggiate." + +msgid "" +"1|Each Blupi in\n" +"1|his house." +msgstr "" +"1|Ogni Blupi nella\n" +"1|sua casa." + +msgid "" +"1|Go on striped\n" +"1|paving stones." +msgstr "" +"1|Andare sulle lastre\n" +"1|tratteggiate." + +msgid "1|Goal :" +msgstr "1|Obbiettivo :" + +msgid "" +"1|Kill all\n" +"1|enemies !" +msgstr "" +"1|Eliminare\n" +"1|tutti i nemici !" + +msgid "" +"1|Resist until\n" +"1|fire extinction ..." +msgstr "" +"1|Resistere sino allo\n" +"1|spegnimento del fuoco ..." + +#, c-format +msgid "" +"1|The Blupi population must\n" +"1|be of at least %d Blupi." +msgstr "" +"1|La popolazione deve\n" +"1|essere di almeno %d Blupi." + +msgid "" +"1|The robot must reach\n" +"1|the striped paving stones." +msgstr "" +"1|Il robot deve raggiungere\n" +"1|le lastre tratteggiate." + +msgid "All licenses are available under share/doc/planetblupi/copyright" +msgstr "Tutte le license sono disponibili in share/doc/planetblupi/copyright" + +msgid "Already two teleporters" +msgstr "Esistono già due teletrasporti" + +msgid "Another mistake..." +msgstr "Ahimè, hai sbagliato un'altra volta..." + +msgid "Armour" +msgstr "Armatura" + +msgid "Available buttons" +msgstr "Pulsanti disponibili" + +msgid "Bang, failed again !" +msgstr "Bang, hai sbagliato ancora !" + +msgid "Bank" +msgstr "Riva" + +msgid "Blow up" +msgstr "Espoldi" + +msgid "Blupi" +msgstr "Blupi" + +msgid "Blupi in house" +msgstr "Blupi nella sua casa" + +msgid "Blupi on striped paving stones" +msgstr "Blupi su lastre tratteggiate" + +msgid "Blupi's energy" +msgstr "Energia di Blupi" + +msgid "Blupi's house" +msgstr "Casa di Blupi" + +msgid "Boat" +msgstr "Barca" + +msgid "Bouncing bomb" +msgstr "Bomba salterina" + +msgid "Bridge" +msgstr "Ponte" + +msgid "Bridge finished" +msgstr "Ponte finito" + +msgid "Buildings" +msgstr "Edifici" + +msgid "Bulldozer" +msgstr "Bulldozer" + +msgid "Bunch of flowers" +msgstr "Mazzo di fiori" + +msgid "Burnt ground" +msgstr "Terreno bruciato" + +msgid "Cancel last operation" +msgstr "Annullare l'ultima operazione" + +msgid "Carve a rock" +msgstr "Spacca una roccia" + +msgid "Carve rocks" +msgstr "Spacca delle roccie" + +msgid "" +"Change the\n" +"window size" +msgstr "" +"Cambiare la\n" +"dimensione\n" +"della finestra" + +msgid "Construct this game" +msgstr "Costruire questa partita" + +msgid "Construction" +msgstr "Costruzione" + +msgid "Construction number" +msgstr "Costruzione numero" + +msgid "Continue this game" +msgstr "Continua la partita" + +msgid "Cut down a tree" +msgstr "Abbatti un albero" + +msgid "Cut down trees" +msgstr "Abbatti degli alberi" + +msgid "Decorative plants" +msgstr "Piante ornamentali" + +msgid "Delete figure" +msgstr "Elimina personaggio" + +msgid "Delete fire" +msgstr "Elimina il fuoco" + +msgid "Delete item" +msgstr "Elimina oggetto" + +msgid "Demo" +msgstr "Demo" + +msgid "Desert" +msgstr "Deserto" + +msgid "Difficult" +msgstr "Difficile" + +msgid "Drink" +msgstr "Bevi" + +msgid "Drop" +msgstr "Posa" + +msgid "Dynamite" +msgstr "Dinamite" + +msgid "E" +msgstr "E" + +msgid "Easy" +msgstr "Facile" + +msgid "Eat" +msgstr "Mangia" + +msgid "Eggs" +msgstr "Uova" + +msgid "Electrocutor" +msgstr "Folgoratore" + +msgid "Ending conditions" +msgstr "" +"Condizioni per\n" +"concludere\n" +"la missione" + +msgid "Enemy barrier" +msgstr "Barriera nemica" + +msgid "Enemy buildings" +msgstr "Edifici nemici" + +msgid "Enemy construction" +msgstr "Costruzione nemica" + +msgid "Enemy ground" +msgstr "Terreno nemico" + +msgid "Enemy rocket" +msgstr "Razzo nemico" + +msgid "Excellent..." +msgstr "Eccellente..." + +msgid "Extract iron" +msgstr "Estrai del ferro" + +msgid "Faster" +msgstr "Veloce" + +msgid "Finish" +msgstr "Terminare" + +msgid "Fire" +msgstr "Fuoco" + +msgid "Fire out" +msgstr "Fuoco fermato" + +msgid "Flag" +msgstr "Bandiera" + +msgid "Flowers" +msgstr "Fiori" + +msgid "Forest" +msgstr "Foresta" + +msgid "Forest under snow" +msgstr "Foresta innevata" + +msgid "Fullscreen" +msgstr "Schermata intera" + +msgid "Game paused" +msgstr "Partita interrotta" + +msgid "Garden shed" +msgstr "Capanno" + +msgid "" +"Global game\n" +"speed" +msgstr "" +"Velocità\n" +"del gioco" + +msgid "Global settings" +msgstr "Configurazione globale" + +msgid "Go" +msgstr "Va" + +msgid "Grow tomatoes" +msgstr "Coltiva pomodori" + +msgid "Help" +msgstr "Aiuto" + +msgid "Help number" +msgstr "Aiuto numero" + +msgid "Helper robot" +msgstr "Robot aiutante" + +msgid "Ice" +msgstr "Ghiaccio" + +msgid "Impossible" +msgstr "Impossibile" + +#, c-format +msgid "Impossible to win if less than %d Blupi" +msgstr "Impossibile vincere se meno di %d Blupi" + +msgid "Inadequate ground" +msgstr "Terreno non adatto" + +msgid "Increase volume" +msgstr "Alza il volume" + +msgid "Increase window size" +msgstr "Aumentare la dimensione della finestra" + +msgid "Incubator" +msgstr "Incubatrice" + +msgid "Incubator or teleporter" +msgstr "Incubatrice o teletrasporto" + +msgid "Inflammable ground" +msgstr "Terreno infiammabile" + +msgid "Insert CD-Rom Planet Blupi and wait a few seconds..." +msgstr "Inserire il CD-Rom Planet Blupi e attendere qualche secondo ..." + +msgid "" +"Interface language\n" +"and sounds" +msgstr "" +"Lingua\n" +"dell'interfaccia\n" +"e dei suoni" + +msgid "Interrupt" +msgstr "Interrompere" + +msgid "Iron" +msgstr "Ferro" + +msgid "Items" +msgstr "Oggetti" + +msgid "Jeep" +msgstr "Jeep" + +msgid "Laboratory" +msgstr "Laboratorio" + +msgid "Last construction resolved !" +msgstr "Ultima costruzione risolta !" + +msgid "Leave Jeep" +msgstr "Lascia la Jeep" + +#, c-format +msgid "Lost if less than %d Blupi" +msgstr "Perso se meno di %d Blupi" + +msgid "Make a Jeep" +msgstr "Costruisci una Jeep" + +msgid "Make a helper robot" +msgstr "Costruisci un robot aiutante" + +msgid "Make a time bomb" +msgstr "Costruisci una bomba" + +msgid "Make armour" +msgstr "Costruisci un'armatura" + +msgid "Make bunch of flowers" +msgstr "Fai un mazzo di fiori" + +msgid "Make bunches of flowers" +msgstr "Fai dei mazzi di fiori" + +msgid "Master robot" +msgstr "Robot-capo" + +msgid "Medical potion" +msgstr "Pozione" + +msgid "Mine" +msgstr "Miniera" + +msgid "Miscellaneous ground" +msgstr "Terreno misto" + +msgid "Mission number" +msgstr "Missione numero" + +msgid "Mission over..." +msgstr "Missione compiuta..." + +msgid "Missions" +msgstr "Missioni" + +msgid "" +"Music\n" +"volume" +msgstr "" +"Volume\n" +"della musica" + +msgid "Music choice" +msgstr "Scelta della musica" + +msgid "Music number 1" +msgstr "Musica numero 1" + +msgid "Music number 10" +msgstr "Musica numero 10" + +msgid "Music number 2" +msgstr "Musica numero 2" + +msgid "Music number 3" +msgstr "Musica numero 3" + +msgid "Music number 4" +msgstr "Musica numero 4" + +msgid "Music number 5" +msgstr "Musica numero 5" + +msgid "Music number 6" +msgstr "Musica numero 6" + +msgid "Music number 7" +msgstr "Musica numero 7" + +msgid "Music number 8" +msgstr "Musica numero 8" + +msgid "Music number 9" +msgstr "Musica numero 9" + +msgid "N" +msgstr "N" + +#, c-format +msgid "New version available for download on www.blupi.org (v%s)" +msgstr "Nuova versione disponibile su www.blupi.org (v%s)" + +msgid "Next game" +msgstr "Partita successiva" + +msgid "Next language" +msgstr "Prossima lingua" + +msgid "Next page" +msgstr "Pagina successiva" + +msgid "No" +msgstr "No" + +msgid "No more enemies" +msgstr "Nemici eliminati" + +msgid "No music" +msgstr "Nessuna musica" + +msgid "No video" +msgstr "Nessun video" + +msgid "No, not that way !" +msgstr "Ma no, non così !" + +msgid "No, wrong way ..." +msgstr "Eh no, non è così ..." + +msgid "None" +msgstr "Nessuno" + +msgid "Normal ground" +msgstr "Terreno normale" + +msgid "Not enough energy" +msgstr "Energia limitata" + +msgid "Now go on mission." +msgstr "Ora passa alle missioni." + +msgid "Occupied ground" +msgstr "Terreno occupato" + +msgid "Open another game" +msgstr "Apri un'altra partita" + +msgid "Opposite bank no good" +msgstr "Riva opposta non ok" + +msgid "Palisade" +msgstr "Palizzata" + +msgid "Paving stones" +msgstr "Lastre" + +msgid "Planet Blupi" +msgstr "Planet Blupi" + +msgid "Planet Blupi -- stop" +msgstr "Planet Blupi -- stop" + +msgid "Planks" +msgstr "Assi" + +msgid "Planks on striped paving stones" +msgstr "Assi su lastre tratteggiate" + +msgid "Platinium" +msgstr "Platinium" + +msgid "Platinium on striped paving stones" +msgstr "Platinium su lastre trattegiate" + +msgid "Play this game" +msgstr "Giocare questa partita" + +msgid "Poison" +msgstr "Veleno" + +msgid "Prairie" +msgstr "Prateria" + +msgid "Previous game" +msgstr "Partita precedente" + +msgid "Previous language" +msgstr "Lingua precedente" + +msgid "Previous page" +msgstr "Pagina precedente" + +msgid "Prospect for iron" +msgstr "Cerca del ferro" + +msgid "Protection tower" +msgstr "Torre di protezione" + +msgid "Quit" +msgstr "Lascia" + +msgid "Quit Planet Blupi" +msgstr "Lasciare Planet Blupi" + +msgid "Quit construction" +msgstr "Terminare la costruzione" + +msgid "Quit this game" +msgstr "Lasciare la partita" + +msgid "REC" +msgstr "REC" + +msgid "Reduce volume" +msgstr "Abbassa il volume" + +msgid "Reduce window size" +msgstr "Ridurre la dimesione della finestra" + +msgid "Repeat" +msgstr "Ripeti" + +msgid "Restart this game" +msgstr "Ricomincia la partita" + +msgid "Robot on striped paving stones" +msgstr "Robot su lastre tratteggiate" + +msgid "Rocks" +msgstr "Rocce" + +msgid "S" +msgstr "S" + +msgid "Save" +msgstr "Salvare" + +msgid "Save this game" +msgstr "Salvare questa partita" + +msgid "Scenery choice" +msgstr "Scelta degli scenari" + +msgid "" +"Scroll speed\n" +"with mouse" +msgstr "" +"Velocità\n" +"del mouse" + +msgid "" +"Select the\n" +"window mode" +msgstr "" +"Selezionare il\n" +"modo finestra" + +msgid "Settings" +msgstr "Configurazione" + +msgid "Show videos" +msgstr "Mostra i video" + +msgid "Sick Blupi" +msgstr "Blupi ammalato" + +msgid "Skill level" +msgstr "Livello di difficoltà" + +msgid "Slower" +msgstr "Lento" + +msgid "" +"Sound effect\n" +"volume" +msgstr "" +"Volume\n" +"degli effetti" + +msgid "Special pavings" +msgstr "Lastre speciali" + +msgid "Spider" +msgstr "Ragno" + +msgid "Starting fire" +msgstr "Inizio d'incendio" + +msgid "Sterile ground" +msgstr "Terreno sterile" + +msgid "Sticky trap" +msgstr "Trappola collosa" + +msgid "Stones" +msgstr "Pietre" + +msgid "Stop" +msgstr "Stop" + +msgid "Striped paving stones" +msgstr "Lastre tratteggiate" + +msgid "Take" +msgstr "Prendi" + +msgid "Teleporter" +msgstr "Teletrasporto" + +msgid "" +"This game is an original creation of Epsitec SA, CH-1400 Yverdon-les-Bains" +msgstr "" +"Questo gioco è una realizzazione originale di Epsitec SA, CH-1400 Yverdon-" +"les-Bains" + +msgid "This game uses statically linked free and open-source libraries:" +msgstr "Questo gioco utilizza delle librerie open-source:" + +msgid "Time bomb" +msgstr "Bomba a tempo" + +msgid "Tired Blupi" +msgstr "Blupi stanco" + +msgid "Tomatoes" +msgstr "Pomodori" + +msgid "Tomatoes on striped paving stones" +msgstr "Pomodori su lastre tratteggiate" + +msgid "Too close to water" +msgstr "Troppo vicino all'acqua" + +msgid "Training" +msgstr "Allenamento" + +msgid "Training number" +msgstr "Allenamento numero" + +msgid "Transform" +msgstr "Trasforma" + +msgid "Transport" +msgstr "Mezzi di trasporto" + +msgid "Trapped enemy" +msgstr "Nemico intrappolato" + +msgid "Tree" +msgstr "Alberi" + +msgid "Tree trunks" +msgstr "Tronchi" + +msgid "Version" +msgstr "Versione" + +msgid "Very good, success on all missions !" +msgstr "Splendido, hai concluso il gioco !" + +msgid "Very good." +msgstr "Molto bene." + +msgid "" +"Video\n" +"sequences" +msgstr "" +"Sequenze\n" +"video" + +msgid "Virus" +msgstr "Virus" + +msgid "W" +msgstr "O" + +msgid "Wall" +msgstr "Muro" + +msgid "Wall or palisade" +msgstr "Muro o Palizzata" + +msgid "Water" +msgstr "Acqua" + +msgid "We hope you have had as much fun playing the game as we had making it !" +msgstr "" +"Speriamo che ti sia divertito con questo gioco almeno quanto noi ci siamo " +"zzarlo !" + +msgid "Weapons" +msgstr "Armi" + +msgid "Well done !" +msgstr "Bravo, ce l'hai fatta !" + +msgid "Windowed" +msgstr "Finestra" + +msgid "Work done" +msgstr "Lavoro in corso" + +msgid "Workshop" +msgstr "Fabbrica" + +msgid "Yes" +msgstr "Si" + +msgid "Yes, great ..." +msgstr "Si, fantastico ..." + +msgid "You have failed, try again..." +msgstr "Hai sbagliato, riprova..." + +msgid "You have played Planet Blupi." +msgstr "Hai giocato con Planet Blupi." + +#, c-format +msgid "construction %d, time %d" +msgstr "Costruzione %d, tempo %d" + +msgid "en" +msgstr "it" + +msgid "free slot" +msgstr "libero" + +msgid "http://www.blupi.org info@blupi.org" +msgstr "http://www.blupi.org info@blupi.org" + +#, c-format +msgid "mission %d, time %d" +msgstr "missione %d, tempo %d" + +#, c-format +msgid "training %d, time %d" +msgstr "allenamento %d, tempo %d" diff --git a/resources/po/pl.po b/resources/po/pl.po index 1627573..d5d084e 100644 --- a/resources/po/pl.po +++ b/resources/po/pl.po @@ -1,906 +1,914 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-09-09 09:13+0200\n" -"PO-Revision-Date: 2017-09-12 20:10+0200\n" -"Last-Translator: tomangelo \n" -"Language-Team: TerranovaTeam \n" -"Language: pl\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " -"|| n%100>=20) ? 1 : 2);\n" - -msgid "Planet Blupi" -msgstr "Planet Blupi" - -msgid "Planet Blupi -- stop" -msgstr "Planet Blupi -- zatrzymano" - -msgid "" -"1: Grow tomatoes\n" -"2: Eat" -msgstr "" -"1: Zasadź pomidory\n" -"2: Zjedz" - -msgid "" -"1: Make a bunch\n" -"2: Transform" -msgstr "" -"1: Zbierz wiele\n" -"2: Przetwórz" - -msgid "" -"1: Take\n" -"2: Transform" -msgstr "" -"1: Weź\n" -"2: Przetwórz" - -msgid "" -"1: Extract iron\n" -"2: Make a bomb" -msgstr "" -"1: Wykop żelazo\n" -"2: Stwórz bombę" - -msgid "" -"1: Extract iron\n" -"2: Make a Jeep" -msgstr "" -"1: Wykop żelazo\n" -"2: Stwórz Jeepa" - -msgid "" -"1: Extract iron\n" -"2: Make an armour" -msgstr "" -"1: Wykop żelazo\n" -"2: Stwórz zbroję" - -msgid "" -"1: Cut down a tree \n" -"2: Make a palisade" -msgstr "" -"1: Zetnij drzewo\n" -"2: Zbuduj palisadę" - -msgid "" -"1: Take\n" -"2: Build palisade" -msgstr "" -"1: Weź\n" -"2: Zbuduj palisadę" - -msgid "" -"1: Cut down a tree \n" -"2: Build a bridge" -msgstr "" -"1: Zetnij drzewo\n" -"2: Zbuduj most" - -msgid "" -"1: Take\n" -"2: Build a bridge" -msgstr "" -"1: Weź\n" -"2: Zbuduj most" - -msgid "" -"1: Cut down a tree \n" -"2: Make a boat" -msgstr "" -"1: Zetnij drzewo\n" -"2: Zbuduj łódź" - -msgid "" -"1: Take\n" -"2: Make a boat" -msgstr "" -"1: Weź\n" -"2: Zbuduj łódź" - -msgid "Tree" -msgstr "Drzewo" - -msgid "Enemy rocket" -msgstr "Wroga rakieta" - -msgid "Platinium" -msgstr "Platyna" - -msgid "Armour" -msgstr "Zbroja" - -msgid "Enemy construction" -msgstr "Wroga konstrukcja" - -msgid "Wall" -msgstr "Mur" - -msgid "Protection tower" -msgstr "Wieża obronna" - -msgid "Laboratory" -msgstr "Laboratorium" - -msgid "Tree trunks" -msgstr "Pnie drzew" - -msgid "Planks" -msgstr "Deski" - -msgid "Rocks" -msgstr "Skały" - -msgid "Stones" -msgstr "Kamienie" - -msgid "Fire" -msgstr "Ogień" - -msgid "Tomatoes" -msgstr "Pomidory" - -msgid "Garden shed" -msgstr "Szopka ogrodowa" - -msgid "Eggs" -msgstr "Jaja" - -msgid "Palisade" -msgstr "Palisada" - -msgid "Bridge" -msgstr "Most" - -msgid "Medical potion" -msgstr "Lekarstwo" - -msgid "Flowers" -msgstr "Kwiaty" - -msgid "Bunch of flowers" -msgstr "Bukiet kwiatów" - -msgid "Dynamite" -msgstr "Dynamit" - -msgid "Poison" -msgstr "Trucizna" - -msgid "Sticky trap" -msgstr "Klejąca pułapka" - -msgid "Trapped enemy" -msgstr "Przyklejony przeciwnik" - -msgid "Blupi's house" -msgstr "Domek Blupiego" - -msgid "Boat" -msgstr "Łódź" - -msgid "Jeep" -msgstr "Jeep" - -msgid "Workshop" -msgstr "Warsztat" - -msgid "Mine" -msgstr "Kopalnia" - -msgid "Iron" -msgstr "Żelazo" - -msgid "Flag" -msgstr "Flaga" - -msgid "Time bomb" -msgstr "Bomba zegarowa" - -msgid "Normal ground" -msgstr "Zwykła ziemia" - -msgid "Bank" -msgstr "Brzeg" - -msgid "Water" -msgstr "Woda" - -msgid "Paving stones" -msgstr "Kostka brukowa" - -msgid "Striped paving stones" -msgstr "Nawierzchnia docelowa" - -msgid "Ice" -msgstr "Lód" - -msgid "Burnt ground" -msgstr "Wypalona ziemia" - -msgid "Inflammable ground" -msgstr "Łatwopalna ziemia" - -msgid "Miscellaneous ground" -msgstr "Mieszana ziemia" - -msgid "Sterile ground" -msgstr "Jałowa ziemia" - -msgid "Incubator" -msgstr "Wylęgarka" - -msgid "Enemy ground" -msgstr "Wroga ziemia" - -msgid "Teleporter" -msgstr "Teleporter" - -msgid "Tired Blupi" -msgstr "Zmęczony Blupi" - -msgid "Sick Blupi" -msgstr "Zarażony Blupi" - -msgid "Blupi" -msgstr "Blupi" - -msgid "Spider" -msgstr "Pająk" - -msgid "Virus" -msgstr "Wirus" - -msgid "Bulldozer" -msgstr "Buldożer" - -msgid "Master robot" -msgstr "Mistrz robotów" - -msgid "Bouncing bomb" -msgstr "Skacząca bomba" - -msgid "Electrocutor" -msgstr "Paralizator" - -msgid "Helper robot" -msgstr "Robot-pomocnik" - -msgid "Interrupt" -msgstr "Przerwij" - -msgid "Settings" -msgstr "Opcje" - -msgid "Save" -msgstr "Zapisz" - -msgid "Demo" -msgstr "Demonstracja" - -msgid "Training" -msgstr "Trening" - -msgid "Missions" -msgstr "Misje" - -msgid "Construction" -msgstr "Konstrukcja" - -msgid "Global settings" -msgstr "Ustawienia" - -msgid "Quit Planet Blupi" -msgstr "Wyjdź z Planet Blupi" - -msgid "Previous page" -msgstr "Poprzednia strona" - -msgid "Next page" -msgstr "Następna strona" - -msgid "Previous game" -msgstr "Poprzednie zadanie" - -msgid "Play this game" -msgstr "Zagraj" - -msgid "Next game" -msgstr "Następne zadanie" - -msgid "Open another game" -msgstr "Otwórz poprzednią grę" - -msgid "Construct this game" -msgstr "Edytuj poziom" - -msgid "Skill level" -msgstr "Poziom trudności" - -msgid "Finish" -msgstr "Zakończ" - -msgid "Continue this game" -msgstr "Kontynuuj" - -msgid "Save this game" -msgstr "Zapisz tą grę" - -msgid "Quit this game" -msgstr "Opuść tą grę" - -msgid "Help" -msgstr "Pomoc" - -msgid "Slower" -msgstr "Wolniej" - -msgid "Faster" -msgstr "Szybciej" - -msgid "Reduce volume" -msgstr "Zmniejsz głośność" - -msgid "Increase volume" -msgstr "Zwiększ głośność" - -msgid "No video" -msgstr "Brak wstawek filmowych" - -msgid "Show videos" -msgstr "Pokaż wstawki filmowe" - -msgid "Restart this game" -msgstr "Uruchom grę ponownie" - -msgid "Special pavings" -msgstr "Specjalne nawierzchnie" - -msgid "Incubator or teleporter" -msgstr "Inkubator lub teleporter" - -msgid "Delete item" -msgstr "Usuń przedmiot" - -msgid "Decorative plants" -msgstr "Rośliny ozdobne" - -msgid "Buildings" -msgstr "Budynki" - -msgid "Enemy buildings" -msgstr "Wrogie budynki" - -msgid "Enemy barrier" -msgstr "Wroga bariera" - -msgid "Wall or palisade" -msgstr "Mur lub palisada" - -msgid "Items" -msgstr "Przedmioty" - -msgid "Weapons" -msgstr "Bronie" - -msgid "Transport" -msgstr "Środki transportu" - -msgid "Delete figure" -msgstr "Usuń postać" - -msgid "Delete fire" -msgstr "Usuń ogień" - -msgid "Starting fire" -msgstr "Początek pożaru" - -msgid "Scenery choice" -msgstr "Wybór scenerii" - -msgid "Music choice" -msgstr "Wybór muzyki" - -msgid "Available buttons" -msgstr "Dostępne przyciski" - -msgid "Ending conditions" -msgstr "Warunki zwycięstwa" - -msgid "Quit construction" -msgstr "Zakończ tworzenie" - -msgid "Cancel last operation" -msgstr "Cofnij ostatnią operację" - -msgid "Stop" -msgstr "Przerwij" - -msgid "Go" -msgstr "Idź" - -msgid "Take" -msgstr "Weź" - -msgid "Drop" -msgstr "Upuść" - -msgid "Repeat" -msgstr "Powtórz" - -msgid "Cut down a tree" -msgstr "Zetnij drzewo" - -msgid "Cut down trees" -msgstr "Zetnij drzewa" - -msgid "Carve a rock" -msgstr "Wyłup skałę" - -msgid "Carve rocks" -msgstr "Wyłup skały" - -msgid "Make bunch of flowers" -msgstr "Ułóż bukiet kwiatów" - -msgid "Make bunches of flowers" -msgstr "Ułóż bukiety kwiatów" - -msgid "Grow tomatoes" -msgstr "Sadź pomidory" - -msgid "Eat" -msgstr "Jedz" - -msgid "Transform" -msgstr "Przetwórz" - -msgid "Drink" -msgstr "Wypij" - -msgid "Blow up" -msgstr "Wysadź w powietrze" - -msgid "Prospect for iron" -msgstr "Szukaj żelaza" - -msgid "Extract iron" -msgstr "Wykop żelazo" - -msgid "Make a Jeep" -msgstr "Stwórz Jeepa" - -msgid "Make a time bomb" -msgstr "Stwórz bombę zegarową" - -msgid "Make armour" -msgstr "Stwórz zbroję" - -msgid "Make a helper robot" -msgstr "Stwórz robota-pomocnika" - -msgid "Blupi in house" -msgstr "Blupi w domu" - -msgid "No more enemies" -msgstr "Brak przeciwników" - -msgid "Fire out" -msgstr "Ugaszony pożar" - -msgid "Blupi on striped paving stones" -msgstr "Blupi na nawierzchni docelowej" - -msgid "Planks on striped paving stones" -msgstr "Deski na nawierzchni docelowej" - -msgid "Tomatoes on striped paving stones" -msgstr "Pomidory na nawierzchni docelowej" - -msgid "Platinium on striped paving stones" -msgstr "Platyna na nawierzchni docelowej" - -msgid "Robot on striped paving stones" -msgstr "Roboty na nawierzchni docelowej" - -msgid "No music" -msgstr "Brak muzyki" - -msgid "Music number 1" -msgstr "Muzyka numer 1" - -msgid "Music number 2" -msgstr "Muzyka numer 2" - -msgid "Music number 3" -msgstr "Muzyka numer 3" - -msgid "Music number 4" -msgstr "Muzyka numer 4" - -msgid "Music number 5" -msgstr "Muzyka numer 5" - -msgid "Music number 6" -msgstr "Muzyka numer 6" - -msgid "Music number 7" -msgstr "Muzyka numer 7" - -msgid "Music number 8" -msgstr "Muzyka numer 8" - -msgid "Music number 9" -msgstr "Muzyka numer 9" - -msgid "Prairie" -msgstr "Preria" - -msgid "Forest" -msgstr "Las" - -msgid "Desert" -msgstr "Pustynia" - -msgid "Forest under snow" -msgstr "Las pokryty śniegiem" - -msgid "Previous language" -msgstr "Poprzedni język" - -msgid "Next language" -msgstr "Następny język" - -msgid "Fullscreen" -msgstr "Pełny ekran" - -msgid "Windowed" -msgstr "Tryb okienkowy" - -msgid "Reduce window size" -msgstr "Zmniejsz rozmiar okna" - -msgid "Increase window size" -msgstr "Zwiększ rozmiar okna" - -msgid "Version" -msgstr "Wersja" - -#, c-format -msgid "New version available for download on www.blupi.org (v%s)" -msgstr "Nowa wersja dostępna do pobrania na www.blupi.org (v%s)" - -msgid "N" -msgstr "Pn" - -msgid "S" -msgstr "Pd" - -msgid "W" -msgstr "Za" - -msgid "E" -msgstr "Ws" - -msgid "Game paused" -msgstr "Gra zapauzowana" - -msgid "REC" -msgstr "Nagrywanie" - -#, c-format -msgid "construction %d, time %d" -msgstr "Budowanie %d, czas %d" - -#, c-format -msgid "mission %d, time %d" -msgstr "Misja %d, czas %d" - -#, c-format -msgid "training %d, time %d" -msgstr "Trenowanie %d, czas %d" - -msgid "free slot" -msgstr "Wolny slot" - -#, c-format -msgid "Lost if less than %d Blupi" -msgstr "Przegrana jeśli mniej niż %d Blupich" - -#, c-format -msgid "Impossible to win if less than %d Blupi" -msgstr "Niemożliwe do wygrania jeśli mniej niż %d Blupich" - -msgid "Training number" -msgstr "Trening numer" - -msgid "Mission number" -msgstr "Misja numer" - -msgid "Construction number" -msgstr "Konstrukcja numer" - -msgid "Help number" -msgstr "Pomoc numer" - -msgid "Easy" -msgstr "Prosty" - -msgid "Difficult" -msgstr "Trudny" - -msgid "You have failed, try again..." -msgstr "Przegrałeś, spróbuj ponownie..." - -msgid "No, wrong way ..." -msgstr "Nie, nie tak..." - -msgid "Bang, failed again !" -msgstr "Motyla noga, znowu porażka!" - -msgid "Another mistake..." -msgstr "Znowu pomyłka..." - -msgid "No, not that way !" -msgstr "Nie, nie w ten sposób!" - -msgid "Well done !" -msgstr "Dobra robota!" - -msgid "Yes, great ..." -msgstr "Tak, wspaniale ..." - -msgid "Very good." -msgstr "Bardzo dobrze." - -msgid "Excellent..." -msgstr "Doskonale..." - -msgid "Mission over..." -msgstr "Koniec zadania..." - -msgid "Now go on mission." -msgstr "Teraz spróbuj swoich sił w misjach" - -msgid "Very good, success on all missions !" -msgstr "Bardzo dobrze, suksesów we wszystkich misjach" - -msgid "Last construction resolved !" -msgstr "Ostatnia łamigłówka rozwiązana!" - -msgid "" -"Global game\n" -"speed" -msgstr "" -"Prędkość\n" -"gry" - -msgid "" -"Scroll speed\n" -"with mouse" -msgstr "" -"Prędkość przewijania\n" -"myszą" - -msgid "" -"Sound effect\n" -"volume" -msgstr "" -"Głośność\n" -"efektów" - -msgid "" -"Music\n" -"volume" -msgstr "" -"Głośność\n" -"muzyki" - -msgid "" -"Video\n" -"sequences" -msgstr "" -"Wstawki\n" -"filmowe" - -msgid "No" -msgstr "Nie" - -msgid "Yes" -msgstr "Tak" - -msgid "None" -msgstr "Brak" - -msgid "" -"Interface language\n" -"and sounds" -msgstr "" -"Język interfejsu\n" -"oraz dźwięków" - -msgid "" -"Select the\n" -"window mode" -msgstr "" -"Wybierz\n" -"tryb okienkowy" - -msgid "" -"Change the\n" -"window size" -msgstr "" -"Zmień rozmiar\n" -"okna" - -msgid "You have played Planet Blupi." -msgstr "Grałeś w Planet Blupi" - -msgid "We hope you have had as much fun playing the game as we had making it !" -msgstr "Mamy nadzieję że miałeś tak dużo frajdy z gry jak my gdy ją tworzyliśmy!" - -msgid "This game uses statically linked free and open-source libraries:" -msgstr "Ta gra używa statystycznie linkowanych wolnych i otwartoźródłowych bibliotek: " - -msgid " - argagg (MIT)" -msgstr " - argagg (MIT)" - -msgid " - FFmpeg (LGPLv2.1)" -msgstr " - FFmpeg (LGPLv2.1)" - -msgid " - GNU/gettext and GNU/libiconv (GPLv3)" -msgstr " - GNU/gettext and GNU/libiconv (GPLv3)" - -msgid " - libasound (LGPLv2.1)" -msgstr " - libasound (LGPLv2.1)" - -msgid " - libcurl (MIT/X derivate)" -msgstr " - libcurl (MIT/X derivate)" - -msgid " - libpng (own license)" -msgstr " - libpng (własna licencja)" - -msgid " - libpulse (LGPLv2.1)" -msgstr " - libpulse (LGPLv2.1)" - -msgid " - SDL_kitchensink (MIT)" -msgstr " - SDL_kitchensink (MIT)" - -msgid " - SDL2, SDL2_image and SDL2_mixer (zlib license)" -msgstr " - SDL2, SDL2_image and SDL2_mixer (licencja zlib)" - -msgid " - zlib (own license)" -msgstr " - zlib (własna licencja)" - -msgid "All licenses are available under share/doc/planetblupi/copyright" -msgstr "Wszystkie licencje dostępne są w share/doc/planetblupi/copyright" - -msgid "" -"This game is an original creation of Epsitec SA, CH-1400 Yverdon-les-Bains" -msgstr "" -"Ta gra to oryginalne dzieło Epsitec SA, CH-1400 Yverdon-les-Bains" - -msgid "http://www.blupi.org info@blupi.org" -msgstr "http://www.blupi.org info@blupi.org" - -msgid "Insert CD-Rom Planet Blupi and wait a few seconds..." -msgstr "Włóż płytę CD-ROM z grą Planet Blupi do napędu optycznego i poczekaj kilka sekund" - -msgid "Blupi's energy" -msgstr "Siła Blupiego" - -msgid "Work done" -msgstr "Zadanie skończone" - -msgid "1|Goal :" -msgstr "1|Zadanie :" - -msgid "" -"1|Kill all\n" -"1|enemies !" -msgstr "" -"1|Wyeliminuj wszystkich\n" -"1|przeciwników!" - -msgid "" -"1|Go on striped\n" -"1|paving stones." -msgstr "" -"1|Idź na\n" -"1|nawierzchnię docelową." - -msgid "" -"1|Drop planks on striped \n" -"1|paving stones." -msgstr "" -"1|Połóż deski na\n" -"1|nawierzchni docelowej." - -msgid "" -"1|Drop tomatoes on striped \n" -"1|paving stones." -msgstr "" -"1|Połóż pomidory na\n" -"1|nawierzchni docelowej." - -msgid "" -"1|Drop platinium on striped \n" -"1|paving stones." -msgstr "" -"1|Połóż platynę na\n" -"1|nawierzchni docelowej." - -msgid "" -"1|The robot must reach\n" -"1|the striped paving stones." -msgstr "" -"1|Robot musi dotrzeć do\n" -"1|nawierzchni docelowej." - -msgid "" -"1|Each Blupi in\n" -"1|his house." -msgstr "" -"1|Każdy Blupi we\n" -"1|własnym domu." - -msgid "" -"1|Resist until\n" -"1|fire extinction ..." -msgstr "" -"1|Wytrzymaj dopóki\n" -"1|pożar nie wygaśnie ..." - -#, c-format -msgid "" -"1|The Blupi population must\n" -"1|be of at least %d Blupi." -msgstr "" -"1|Populacja Blupich musi\n" -"1|wynosić minimum %d Blupich." - -msgid "Leave Jeep" -msgstr "Opuść Jeepa" - -msgid "Quit" -msgstr "Wyjdź" - -msgid "Impossible" -msgstr "Niemożliwe" - -msgid "Inadequate ground" -msgstr "Nieodpowiedni teren" - -msgid "Occupied ground" -msgstr "Teren zajęty" - -msgid "Opposite bank no good" -msgstr "Brzeg nie jest odpowiedni" - -msgid "Bridge finished" -msgstr "Most skończony" - -msgid "(isolated tower)" -msgstr "(samotna wieża)" - -msgid "Too close to water" -msgstr "Za blisko wody" - -msgid "Already two teleporters" -msgstr "Już istnieją 2 teleportery" - -msgid "Not enough energy" -msgstr "Za mało siły" - -msgid "en" -msgstr "pl" +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-10-04 07:04+0200\n" +"PO-Revision-Date: 2017-09-12 20:10+0200\n" +"Last-Translator: tomangelo \n" +"Language-Team: TerranovaTeam \n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" + +msgid " - FFmpeg (LGPLv2.1)" +msgstr " - FFmpeg (LGPLv2.1)" + +msgid " - GNU/gettext and GNU/libiconv (GPLv3)" +msgstr " - GNU/gettext and GNU/libiconv (GPLv3)" + +msgid " - SDL2, SDL2_image and SDL2_mixer (zlib license)" +msgstr " - SDL2, SDL2_image and SDL2_mixer (licencja zlib)" + +msgid " - SDL_kitchensink (MIT)" +msgstr " - SDL_kitchensink (MIT)" + +msgid " - argagg (MIT)" +msgstr " - argagg (MIT)" + +msgid " - libasound (LGPLv2.1)" +msgstr " - libasound (LGPLv2.1)" + +msgid " - libcurl (MIT/X derivate)" +msgstr " - libcurl (MIT/X derivate)" + +msgid " - libpng (own license)" +msgstr " - libpng (własna licencja)" + +msgid " - libpulse (LGPLv2.1)" +msgstr " - libpulse (LGPLv2.1)" + +msgid " - zlib (own license)" +msgstr " - zlib (własna licencja)" + +msgid "(isolated tower)" +msgstr "(samotna wieża)" + +msgid "" +"1: Cut down a tree \n" +"2: Build a bridge" +msgstr "" +"1: Zetnij drzewo\n" +"2: Zbuduj most" + +msgid "" +"1: Cut down a tree \n" +"2: Make a boat" +msgstr "" +"1: Zetnij drzewo\n" +"2: Zbuduj łódź" + +msgid "" +"1: Cut down a tree \n" +"2: Make a palisade" +msgstr "" +"1: Zetnij drzewo\n" +"2: Zbuduj palisadę" + +msgid "" +"1: Extract iron\n" +"2: Make a Jeep" +msgstr "" +"1: Wykop żelazo\n" +"2: Stwórz Jeepa" + +msgid "" +"1: Extract iron\n" +"2: Make a bomb" +msgstr "" +"1: Wykop żelazo\n" +"2: Stwórz bombę" + +msgid "" +"1: Extract iron\n" +"2: Make an armour" +msgstr "" +"1: Wykop żelazo\n" +"2: Stwórz zbroję" + +msgid "" +"1: Grow tomatoes\n" +"2: Eat" +msgstr "" +"1: Zasadź pomidory\n" +"2: Zjedz" + +msgid "" +"1: Make a bunch\n" +"2: Transform" +msgstr "" +"1: Zbierz wiele\n" +"2: Przetwórz" + +msgid "" +"1: Take\n" +"2: Build a bridge" +msgstr "" +"1: Weź\n" +"2: Zbuduj most" + +msgid "" +"1: Take\n" +"2: Build palisade" +msgstr "" +"1: Weź\n" +"2: Zbuduj palisadę" + +msgid "" +"1: Take\n" +"2: Make a boat" +msgstr "" +"1: Weź\n" +"2: Zbuduj łódź" + +msgid "" +"1: Take\n" +"2: Transform" +msgstr "" +"1: Weź\n" +"2: Przetwórz" + +msgid "" +"1|Drop planks on striped \n" +"1|paving stones." +msgstr "" +"1|Połóż deski na\n" +"1|nawierzchni docelowej." + +msgid "" +"1|Drop platinium on striped \n" +"1|paving stones." +msgstr "" +"1|Połóż platynę na\n" +"1|nawierzchni docelowej." + +msgid "" +"1|Drop tomatoes on striped \n" +"1|paving stones." +msgstr "" +"1|Połóż pomidory na\n" +"1|nawierzchni docelowej." + +msgid "" +"1|Each Blupi in\n" +"1|his house." +msgstr "" +"1|Każdy Blupi we\n" +"1|własnym domu." + +msgid "" +"1|Go on striped\n" +"1|paving stones." +msgstr "" +"1|Idź na\n" +"1|nawierzchnię docelową." + +msgid "1|Goal :" +msgstr "1|Zadanie :" + +msgid "" +"1|Kill all\n" +"1|enemies !" +msgstr "" +"1|Wyeliminuj wszystkich\n" +"1|przeciwników!" + +msgid "" +"1|Resist until\n" +"1|fire extinction ..." +msgstr "" +"1|Wytrzymaj dopóki\n" +"1|pożar nie wygaśnie ..." + +#, c-format +msgid "" +"1|The Blupi population must\n" +"1|be of at least %d Blupi." +msgstr "" +"1|Populacja Blupich musi\n" +"1|wynosić minimum %d Blupich." + +msgid "" +"1|The robot must reach\n" +"1|the striped paving stones." +msgstr "" +"1|Robot musi dotrzeć do\n" +"1|nawierzchni docelowej." + +msgid "All licenses are available under share/doc/planetblupi/copyright" +msgstr "Wszystkie licencje dostępne są w share/doc/planetblupi/copyright" + +msgid "Already two teleporters" +msgstr "Już istnieją 2 teleportery" + +msgid "Another mistake..." +msgstr "Znowu pomyłka..." + +msgid "Armour" +msgstr "Zbroja" + +msgid "Available buttons" +msgstr "Dostępne przyciski" + +msgid "Bang, failed again !" +msgstr "Motyla noga, znowu porażka!" + +msgid "Bank" +msgstr "Brzeg" + +msgid "Blow up" +msgstr "Wysadź w powietrze" + +msgid "Blupi" +msgstr "Blupi" + +msgid "Blupi in house" +msgstr "Blupi w domu" + +msgid "Blupi on striped paving stones" +msgstr "Blupi na nawierzchni docelowej" + +msgid "Blupi's energy" +msgstr "Siła Blupiego" + +msgid "Blupi's house" +msgstr "Domek Blupiego" + +msgid "Boat" +msgstr "Łódź" + +msgid "Bouncing bomb" +msgstr "Skacząca bomba" + +msgid "Bridge" +msgstr "Most" + +msgid "Bridge finished" +msgstr "Most skończony" + +msgid "Buildings" +msgstr "Budynki" + +msgid "Bulldozer" +msgstr "Buldożer" + +msgid "Bunch of flowers" +msgstr "Bukiet kwiatów" + +msgid "Burnt ground" +msgstr "Wypalona ziemia" + +msgid "Cancel last operation" +msgstr "Cofnij ostatnią operację" + +msgid "Carve a rock" +msgstr "Wyłup skałę" + +msgid "Carve rocks" +msgstr "Wyłup skały" + +msgid "" +"Change the\n" +"window size" +msgstr "" +"Zmień rozmiar\n" +"okna" + +msgid "Construct this game" +msgstr "Edytuj poziom" + +msgid "Construction" +msgstr "Konstrukcja" + +msgid "Construction number" +msgstr "Konstrukcja numer" + +msgid "Continue this game" +msgstr "Kontynuuj" + +msgid "Cut down a tree" +msgstr "Zetnij drzewo" + +msgid "Cut down trees" +msgstr "Zetnij drzewa" + +msgid "Decorative plants" +msgstr "Rośliny ozdobne" + +msgid "Delete figure" +msgstr "Usuń postać" + +msgid "Delete fire" +msgstr "Usuń ogień" + +msgid "Delete item" +msgstr "Usuń przedmiot" + +msgid "Demo" +msgstr "Demonstracja" + +msgid "Desert" +msgstr "Pustynia" + +msgid "Difficult" +msgstr "Trudny" + +msgid "Drink" +msgstr "Wypij" + +msgid "Drop" +msgstr "Upuść" + +msgid "Dynamite" +msgstr "Dynamit" + +msgid "E" +msgstr "Ws" + +msgid "Easy" +msgstr "Prosty" + +msgid "Eat" +msgstr "Jedz" + +msgid "Eggs" +msgstr "Jaja" + +msgid "Electrocutor" +msgstr "Paralizator" + +msgid "Ending conditions" +msgstr "Warunki zwycięstwa" + +msgid "Enemy barrier" +msgstr "Wroga bariera" + +msgid "Enemy buildings" +msgstr "Wrogie budynki" + +msgid "Enemy construction" +msgstr "Wroga konstrukcja" + +msgid "Enemy ground" +msgstr "Wroga ziemia" + +msgid "Enemy rocket" +msgstr "Wroga rakieta" + +msgid "Excellent..." +msgstr "Doskonale..." + +msgid "Extract iron" +msgstr "Wykop żelazo" + +msgid "Faster" +msgstr "Szybciej" + +msgid "Finish" +msgstr "Zakończ" + +msgid "Fire" +msgstr "Ogień" + +msgid "Fire out" +msgstr "Ugaszony pożar" + +msgid "Flag" +msgstr "Flaga" + +msgid "Flowers" +msgstr "Kwiaty" + +msgid "Forest" +msgstr "Las" + +msgid "Forest under snow" +msgstr "Las pokryty śniegiem" + +msgid "Fullscreen" +msgstr "Pełny ekran" + +msgid "Game paused" +msgstr "Gra zapauzowana" + +msgid "Garden shed" +msgstr "Szopka ogrodowa" + +msgid "" +"Global game\n" +"speed" +msgstr "" +"Prędkość\n" +"gry" + +msgid "Global settings" +msgstr "Ustawienia" + +msgid "Go" +msgstr "Idź" + +msgid "Grow tomatoes" +msgstr "Sadź pomidory" + +msgid "Help" +msgstr "Pomoc" + +msgid "Help number" +msgstr "Pomoc numer" + +msgid "Helper robot" +msgstr "Robot-pomocnik" + +msgid "Ice" +msgstr "Lód" + +msgid "Impossible" +msgstr "Niemożliwe" + +#, c-format +msgid "Impossible to win if less than %d Blupi" +msgstr "Niemożliwe do wygrania jeśli mniej niż %d Blupich" + +msgid "Inadequate ground" +msgstr "Nieodpowiedni teren" + +msgid "Increase volume" +msgstr "Zwiększ głośność" + +msgid "Increase window size" +msgstr "Zwiększ rozmiar okna" + +msgid "Incubator" +msgstr "Wylęgarka" + +msgid "Incubator or teleporter" +msgstr "Inkubator lub teleporter" + +msgid "Inflammable ground" +msgstr "Łatwopalna ziemia" + +msgid "Insert CD-Rom Planet Blupi and wait a few seconds..." +msgstr "" +"Włóż płytę CD-ROM z grą Planet Blupi do napędu optycznego i poczekaj kilka " +"sekund" + +msgid "" +"Interface language\n" +"and sounds" +msgstr "" +"Język interfejsu\n" +"oraz dźwięków" + +msgid "Interrupt" +msgstr "Przerwij" + +msgid "Iron" +msgstr "Żelazo" + +msgid "Items" +msgstr "Przedmioty" + +msgid "Jeep" +msgstr "Jeep" + +msgid "Laboratory" +msgstr "Laboratorium" + +msgid "Last construction resolved !" +msgstr "Ostatnia łamigłówka rozwiązana!" + +msgid "Leave Jeep" +msgstr "Opuść Jeepa" + +#, c-format +msgid "Lost if less than %d Blupi" +msgstr "Przegrana jeśli mniej niż %d Blupich" + +msgid "Make a Jeep" +msgstr "Stwórz Jeepa" + +msgid "Make a helper robot" +msgstr "Stwórz robota-pomocnika" + +msgid "Make a time bomb" +msgstr "Stwórz bombę zegarową" + +msgid "Make armour" +msgstr "Stwórz zbroję" + +msgid "Make bunch of flowers" +msgstr "Ułóż bukiet kwiatów" + +msgid "Make bunches of flowers" +msgstr "Ułóż bukiety kwiatów" + +msgid "Master robot" +msgstr "Mistrz robotów" + +msgid "Medical potion" +msgstr "Lekarstwo" + +msgid "Mine" +msgstr "Kopalnia" + +msgid "Miscellaneous ground" +msgstr "Mieszana ziemia" + +msgid "Mission number" +msgstr "Misja numer" + +msgid "Mission over..." +msgstr "Koniec zadania..." + +msgid "Missions" +msgstr "Misje" + +msgid "" +"Music\n" +"volume" +msgstr "" +"Głośność\n" +"muzyki" + +msgid "Music choice" +msgstr "Wybór muzyki" + +msgid "Music number 1" +msgstr "Muzyka numer 1" + +#, fuzzy +msgid "Music number 10" +msgstr "Muzyka numer 1" + +msgid "Music number 2" +msgstr "Muzyka numer 2" + +msgid "Music number 3" +msgstr "Muzyka numer 3" + +msgid "Music number 4" +msgstr "Muzyka numer 4" + +msgid "Music number 5" +msgstr "Muzyka numer 5" + +msgid "Music number 6" +msgstr "Muzyka numer 6" + +msgid "Music number 7" +msgstr "Muzyka numer 7" + +msgid "Music number 8" +msgstr "Muzyka numer 8" + +msgid "Music number 9" +msgstr "Muzyka numer 9" + +msgid "N" +msgstr "Pn" + +#, c-format +msgid "New version available for download on www.blupi.org (v%s)" +msgstr "Nowa wersja dostępna do pobrania na www.blupi.org (v%s)" + +msgid "Next game" +msgstr "Następne zadanie" + +msgid "Next language" +msgstr "Następny język" + +msgid "Next page" +msgstr "Następna strona" + +msgid "No" +msgstr "Nie" + +msgid "No more enemies" +msgstr "Brak przeciwników" + +msgid "No music" +msgstr "Brak muzyki" + +msgid "No video" +msgstr "Brak wstawek filmowych" + +msgid "No, not that way !" +msgstr "Nie, nie w ten sposób!" + +msgid "No, wrong way ..." +msgstr "Nie, nie tak..." + +msgid "None" +msgstr "Brak" + +msgid "Normal ground" +msgstr "Zwykła ziemia" + +msgid "Not enough energy" +msgstr "Za mało siły" + +msgid "Now go on mission." +msgstr "Teraz spróbuj swoich sił w misjach" + +msgid "Occupied ground" +msgstr "Teren zajęty" + +msgid "Open another game" +msgstr "Otwórz poprzednią grę" + +msgid "Opposite bank no good" +msgstr "Brzeg nie jest odpowiedni" + +msgid "Palisade" +msgstr "Palisada" + +msgid "Paving stones" +msgstr "Kostka brukowa" + +msgid "Planet Blupi" +msgstr "Planet Blupi" + +msgid "Planet Blupi -- stop" +msgstr "Planet Blupi -- zatrzymano" + +msgid "Planks" +msgstr "Deski" + +msgid "Planks on striped paving stones" +msgstr "Deski na nawierzchni docelowej" + +msgid "Platinium" +msgstr "Platyna" + +msgid "Platinium on striped paving stones" +msgstr "Platyna na nawierzchni docelowej" + +msgid "Play this game" +msgstr "Zagraj" + +msgid "Poison" +msgstr "Trucizna" + +msgid "Prairie" +msgstr "Preria" + +msgid "Previous game" +msgstr "Poprzednie zadanie" + +msgid "Previous language" +msgstr "Poprzedni język" + +msgid "Previous page" +msgstr "Poprzednia strona" + +msgid "Prospect for iron" +msgstr "Szukaj żelaza" + +msgid "Protection tower" +msgstr "Wieża obronna" + +msgid "Quit" +msgstr "Wyjdź" + +msgid "Quit Planet Blupi" +msgstr "Wyjdź z Planet Blupi" + +msgid "Quit construction" +msgstr "Zakończ tworzenie" + +msgid "Quit this game" +msgstr "Opuść tą grę" + +msgid "REC" +msgstr "Nagrywanie" + +msgid "Reduce volume" +msgstr "Zmniejsz głośność" + +msgid "Reduce window size" +msgstr "Zmniejsz rozmiar okna" + +msgid "Repeat" +msgstr "Powtórz" + +msgid "Restart this game" +msgstr "Uruchom grę ponownie" + +msgid "Robot on striped paving stones" +msgstr "Roboty na nawierzchni docelowej" + +msgid "Rocks" +msgstr "Skały" + +msgid "S" +msgstr "Pd" + +msgid "Save" +msgstr "Zapisz" + +msgid "Save this game" +msgstr "Zapisz tą grę" + +msgid "Scenery choice" +msgstr "Wybór scenerii" + +msgid "" +"Scroll speed\n" +"with mouse" +msgstr "" +"Prędkość przewijania\n" +"myszą" + +msgid "" +"Select the\n" +"window mode" +msgstr "" +"Wybierz\n" +"tryb okienkowy" + +msgid "Settings" +msgstr "Opcje" + +msgid "Show videos" +msgstr "Pokaż wstawki filmowe" + +msgid "Sick Blupi" +msgstr "Zarażony Blupi" + +msgid "Skill level" +msgstr "Poziom trudności" + +msgid "Slower" +msgstr "Wolniej" + +msgid "" +"Sound effect\n" +"volume" +msgstr "" +"Głośność\n" +"efektów" + +msgid "Special pavings" +msgstr "Specjalne nawierzchnie" + +msgid "Spider" +msgstr "Pająk" + +msgid "Starting fire" +msgstr "Początek pożaru" + +msgid "Sterile ground" +msgstr "Jałowa ziemia" + +msgid "Sticky trap" +msgstr "Klejąca pułapka" + +msgid "Stones" +msgstr "Kamienie" + +msgid "Stop" +msgstr "Przerwij" + +msgid "Striped paving stones" +msgstr "Nawierzchnia docelowa" + +msgid "Take" +msgstr "Weź" + +msgid "Teleporter" +msgstr "Teleporter" + +msgid "" +"This game is an original creation of Epsitec SA, CH-1400 Yverdon-les-Bains" +msgstr "Ta gra to oryginalne dzieło Epsitec SA, CH-1400 Yverdon-les-Bains" + +msgid "This game uses statically linked free and open-source libraries:" +msgstr "" +"Ta gra używa statystycznie linkowanych wolnych i otwartoźródłowych " +"bibliotek: " + +msgid "Time bomb" +msgstr "Bomba zegarowa" + +msgid "Tired Blupi" +msgstr "Zmęczony Blupi" + +msgid "Tomatoes" +msgstr "Pomidory" + +msgid "Tomatoes on striped paving stones" +msgstr "Pomidory na nawierzchni docelowej" + +msgid "Too close to water" +msgstr "Za blisko wody" + +msgid "Training" +msgstr "Trening" + +msgid "Training number" +msgstr "Trening numer" + +msgid "Transform" +msgstr "Przetwórz" + +msgid "Transport" +msgstr "Środki transportu" + +msgid "Trapped enemy" +msgstr "Przyklejony przeciwnik" + +msgid "Tree" +msgstr "Drzewo" + +msgid "Tree trunks" +msgstr "Pnie drzew" + +msgid "Version" +msgstr "Wersja" + +msgid "Very good, success on all missions !" +msgstr "Bardzo dobrze, suksesów we wszystkich misjach" + +msgid "Very good." +msgstr "Bardzo dobrze." + +msgid "" +"Video\n" +"sequences" +msgstr "" +"Wstawki\n" +"filmowe" + +msgid "Virus" +msgstr "Wirus" + +msgid "W" +msgstr "Za" + +msgid "Wall" +msgstr "Mur" + +msgid "Wall or palisade" +msgstr "Mur lub palisada" + +msgid "Water" +msgstr "Woda" + +msgid "We hope you have had as much fun playing the game as we had making it !" +msgstr "" +"Mamy nadzieję że miałeś tak dużo frajdy z gry jak my gdy ją tworzyliśmy!" + +msgid "Weapons" +msgstr "Bronie" + +msgid "Well done !" +msgstr "Dobra robota!" + +msgid "Windowed" +msgstr "Tryb okienkowy" + +msgid "Work done" +msgstr "Zadanie skończone" + +msgid "Workshop" +msgstr "Warsztat" + +msgid "Yes" +msgstr "Tak" + +msgid "Yes, great ..." +msgstr "Tak, wspaniale ..." + +msgid "You have failed, try again..." +msgstr "Przegrałeś, spróbuj ponownie..." + +msgid "You have played Planet Blupi." +msgstr "Grałeś w Planet Blupi" + +#, c-format +msgid "construction %d, time %d" +msgstr "Budowanie %d, czas %d" + +msgid "en" +msgstr "pl" + +msgid "free slot" +msgstr "Wolny slot" + +msgid "http://www.blupi.org info@blupi.org" +msgstr "http://www.blupi.org info@blupi.org" + +#, c-format +msgid "mission %d, time %d" +msgstr "Misja %d, czas %d" + +#, c-format +msgid "training %d, time %d" +msgstr "Trenowanie %d, czas %d" diff --git a/resources/po/planetblupi.pot b/resources/po/planetblupi.pot index 31b95ea..5b3b444 100644 --- a/resources/po/planetblupi.pot +++ b/resources/po/planetblupi.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-09-09 09:13+0200\n" +"POT-Creation-Date: 2017-10-04 07:04+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -518,6 +518,9 @@ msgstr "" msgid "Music number 9" msgstr "" +msgid "Music number 10" +msgstr "" + msgid "Prairie" msgstr "" diff --git a/resources/sound/it/sound002.wav b/resources/sound/it/sound002.wav new file mode 100644 index 0000000..c19b707 Binary files /dev/null and b/resources/sound/it/sound002.wav differ diff --git a/resources/sound/it/sound003.wav b/resources/sound/it/sound003.wav new file mode 100644 index 0000000..d307723 Binary files /dev/null and b/resources/sound/it/sound003.wav differ diff --git a/resources/sound/it/sound004.wav b/resources/sound/it/sound004.wav new file mode 100644 index 0000000..c0672c7 Binary files /dev/null and b/resources/sound/it/sound004.wav differ diff --git a/resources/sound/it/sound005.wav b/resources/sound/it/sound005.wav new file mode 100644 index 0000000..25ac116 Binary files /dev/null and b/resources/sound/it/sound005.wav differ diff --git a/resources/sound/it/sound006.wav b/resources/sound/it/sound006.wav new file mode 100644 index 0000000..a34045d Binary files /dev/null and b/resources/sound/it/sound006.wav differ diff --git a/resources/sound/it/sound007.wav b/resources/sound/it/sound007.wav new file mode 100644 index 0000000..6ac6dd5 Binary files /dev/null and b/resources/sound/it/sound007.wav differ diff --git a/resources/sound/it/sound008.wav b/resources/sound/it/sound008.wav new file mode 100644 index 0000000..ffc5efd Binary files /dev/null and b/resources/sound/it/sound008.wav differ diff --git a/resources/sound/it/sound009.wav b/resources/sound/it/sound009.wav new file mode 100644 index 0000000..5d6478c Binary files /dev/null and b/resources/sound/it/sound009.wav differ diff --git a/resources/sound/it/sound010.wav b/resources/sound/it/sound010.wav new file mode 100644 index 0000000..b6860bb Binary files /dev/null and b/resources/sound/it/sound010.wav differ diff --git a/resources/sound/it/sound014.wav b/resources/sound/it/sound014.wav new file mode 100644 index 0000000..a8556b1 Binary files /dev/null and b/resources/sound/it/sound014.wav differ diff --git a/resources/sound/it/sound017.wav b/resources/sound/it/sound017.wav new file mode 100644 index 0000000..4cffd22 Binary files /dev/null and b/resources/sound/it/sound017.wav differ diff --git a/resources/sound/it/sound018.wav b/resources/sound/it/sound018.wav new file mode 100644 index 0000000..93c117e Binary files /dev/null and b/resources/sound/it/sound018.wav differ diff --git a/resources/sound/it/sound019.wav b/resources/sound/it/sound019.wav new file mode 100644 index 0000000..e403b8c Binary files /dev/null and b/resources/sound/it/sound019.wav differ diff --git a/resources/sound/it/sound027.wav b/resources/sound/it/sound027.wav new file mode 100644 index 0000000..b006541 Binary files /dev/null and b/resources/sound/it/sound027.wav differ diff --git a/resources/sound/it/sound033.wav b/resources/sound/it/sound033.wav new file mode 100644 index 0000000..845c263 Binary files /dev/null and b/resources/sound/it/sound033.wav differ diff --git a/resources/sound/it/sound037.wav b/resources/sound/it/sound037.wav new file mode 100644 index 0000000..089204e Binary files /dev/null and b/resources/sound/it/sound037.wav differ diff --git a/resources/sound/it/sound056.wav b/resources/sound/it/sound056.wav new file mode 100644 index 0000000..9ae8904 Binary files /dev/null and b/resources/sound/it/sound056.wav differ diff --git a/resources/sound/it/sound057.wav b/resources/sound/it/sound057.wav new file mode 100644 index 0000000..5e6b602 Binary files /dev/null and b/resources/sound/it/sound057.wav differ diff --git a/resources/sound/it/sound058.wav b/resources/sound/it/sound058.wav new file mode 100644 index 0000000..30d1a0a Binary files /dev/null and b/resources/sound/it/sound058.wav differ diff --git a/resources/sound/it/sound059.wav b/resources/sound/it/sound059.wav new file mode 100644 index 0000000..9df9b59 Binary files /dev/null and b/resources/sound/it/sound059.wav differ diff --git a/resources/sound/it/sound060.wav b/resources/sound/it/sound060.wav new file mode 100644 index 0000000..f09c5c5 Binary files /dev/null and b/resources/sound/it/sound060.wav differ diff --git a/resources/sound/it/sound061.wav b/resources/sound/it/sound061.wav new file mode 100644 index 0000000..8f57fa4 Binary files /dev/null and b/resources/sound/it/sound061.wav differ diff --git a/resources/sound/it/sound062.wav b/resources/sound/it/sound062.wav new file mode 100644 index 0000000..6810088 Binary files /dev/null and b/resources/sound/it/sound062.wav differ diff --git a/resources/sound/it/sound063.wav b/resources/sound/it/sound063.wav new file mode 100644 index 0000000..2d4efdf Binary files /dev/null and b/resources/sound/it/sound063.wav differ diff --git a/resources/sound/it/sound064.wav b/resources/sound/it/sound064.wav new file mode 100644 index 0000000..fcee0f2 Binary files /dev/null and b/resources/sound/it/sound064.wav differ diff --git a/resources/sound/it/sound065.wav b/resources/sound/it/sound065.wav new file mode 100644 index 0000000..f1cdbba Binary files /dev/null and b/resources/sound/it/sound065.wav differ diff --git a/resources/sound/it/sound066.wav b/resources/sound/it/sound066.wav new file mode 100644 index 0000000..825ad46 Binary files /dev/null and b/resources/sound/it/sound066.wav differ diff --git a/resources/sound/it/sound067.wav b/resources/sound/it/sound067.wav new file mode 100644 index 0000000..9f4989b Binary files /dev/null and b/resources/sound/it/sound067.wav differ diff --git a/resources/sound/it/sound068.wav b/resources/sound/it/sound068.wav new file mode 100644 index 0000000..f479d55 Binary files /dev/null and b/resources/sound/it/sound068.wav differ diff --git a/resources/sound/it/sound069.wav b/resources/sound/it/sound069.wav new file mode 100644 index 0000000..e58fe6b Binary files /dev/null and b/resources/sound/it/sound069.wav differ diff --git a/resources/sound/it/sound070.wav b/resources/sound/it/sound070.wav new file mode 100644 index 0000000..c0c7ce7 Binary files /dev/null and b/resources/sound/it/sound070.wav differ diff --git a/resources/sound/it/sound071.wav b/resources/sound/it/sound071.wav new file mode 100644 index 0000000..fa780d0 Binary files /dev/null and b/resources/sound/it/sound071.wav differ diff --git a/resources/sound/it/sound072.wav b/resources/sound/it/sound072.wav new file mode 100644 index 0000000..bfc4aea Binary files /dev/null and b/resources/sound/it/sound072.wav differ diff --git a/resources/sound/it/sound073.wav b/resources/sound/it/sound073.wav new file mode 100644 index 0000000..839bf05 Binary files /dev/null and b/resources/sound/it/sound073.wav differ diff --git a/src/blupi.cxx b/src/blupi.cxx index 011c0be..b0d405f 100644 --- a/src/blupi.cxx +++ b/src/blupi.cxx @@ -30,7 +30,9 @@ #include #include +#ifdef USE_CURL #include +#endif /* USE_CURL */ #include "json/json.hpp" @@ -59,6 +61,7 @@ CDecor * g_pDecor = nullptr; std::thread * g_updateThread = nullptr; bool g_bFullScreen = false; // false si mode de test +Uint8 g_windowScale = 1; Sint32 g_speedRate = 1; Sint32 g_timerInterval = 50; // inverval = 50ms int g_rendererType = 0; @@ -71,6 +74,7 @@ enum Settings { SETTING_SPEEDRATE = 1 << 1, SETTING_TIMERINTERVAL = 1 << 2, SETTING_RENDERER = 1 << 3, + SETTING_ZOOM = 1 << 4, }; static int g_settingsOverload = 0; @@ -79,11 +83,13 @@ bool g_bTermInit = false; // initialisation en cours Uint32 g_lastPhase = 999; static bool g_pause; +#ifdef USE_CURL struct url_data { CURLcode status; char * buffer; size_t size; }; +#endif template static void @@ -92,7 +98,7 @@ split (const std::string & s, char delim, Out result) std::stringstream ss; ss.str (s); std::string item; - while (std::getline (ss, item, delim).good ()) + while (std::getline (ss, item, delim)) *(result++) = item; } @@ -114,7 +120,10 @@ ReadConfig () { const auto config = GetBaseDir () + "data/config.json"; - std::ifstream file (config, std::ifstream::in); + std::ifstream file (config, std::ifstream::in); + if (!file) + return false; + nlohmann::json j; file >> j; @@ -149,6 +158,13 @@ ReadConfig () g_bFullScreen = 1; } + if (!(g_settingsOverload & SETTING_ZOOM) && j.find ("zoom") != j.end ()) + { + g_windowScale = j["zoom"].get (); + if (g_windowScale != 1 && g_windowScale != 2) + g_windowScale = 1; + } + if ( !(g_settingsOverload & SETTING_RENDERER) && j.find ("renderer") != j.end ()) { @@ -164,13 +180,14 @@ ReadConfig () /** * \brief Main frame update. */ -static void +static bool UpdateFrame (void) { Rect clip, rcRect; Uint32 phase; Point posMouse; Sint32 i, term, speed; + bool display = true; posMouse = g_pEvent->GetLastMousePos (); @@ -243,7 +260,7 @@ UpdateFrame (void) phase == EV_PHASE_H2MOVIE || phase == EV_PHASE_PLAYMOVIE || phase == EV_PHASE_WINMOVIE) { - g_pEvent->MovieToStart (); // start a movie if necessary + display = g_pEvent->MovieToStart (); // start a movie if necessary } if (phase == EV_PHASE_INSERT) @@ -257,6 +274,8 @@ UpdateFrame (void) if (term == 2) g_pEvent->ChangePhase (EV_PHASE_WINMOVIE); // win } + + return display; } /** @@ -371,10 +390,12 @@ HandleEvent (const SDL_Event & event) case EV_UPDATE: if (!g_pEvent->IsMovie ()) // pas de film en cours ? { - if (!g_pause) - UpdateFrame (); + bool display = true; - if (!g_pEvent->IsMovie ()) + if (!g_pause) + display = UpdateFrame (); + + if (!g_pEvent->IsMovie () && display) g_pPixmap->Display (); } break; @@ -446,6 +467,7 @@ InitFail (const char * msg) FinishObjects (); } +#ifdef USE_CURL static size_t updateCallback (void * ptr, size_t size, size_t nmemb, void * data) { @@ -463,10 +485,12 @@ updateCallback (void * ptr, size_t size, size_t nmemb, void * data) return realsize; } +#endif /* USE_CURL */ static void CheckForUpdates () { +#ifdef USE_CURL url_data chunk; chunk.buffer = nullptr; /* we expect realloc(NULL, size) to work */ @@ -503,6 +527,7 @@ CheckForUpdates () free (chunk.buffer); curl_easy_cleanup (curl); +#endif /* USE_CURL */ } static int @@ -523,6 +548,10 @@ parseArgs (int argc, char * argv[], bool & exit) {"-f", "--fullscreen"}, "load in fullscreen [on;off] (default: on)", 1}, + {"zoom", + {"-z", "--zoom"}, + "change the window scale (only if fullscreen is off) [1;2] (default: 1)", + 1}, {"renderer", {"-r", "--renderer"}, "set a renderer [auto;software;accelerated] (default: auto)", @@ -584,6 +613,12 @@ parseArgs (int argc, char * argv[], bool & exit) g_settingsOverload |= SETTING_FULLSCREEN; } + if (args["zoom"]) + { + g_windowScale = args["zoom"]; + g_settingsOverload |= SETTING_ZOOM; + } + if (args["renderer"]) { if (args["renderer"].as () == "auto") @@ -622,19 +657,20 @@ DoInit (int argc, char * argv[], bool & exit) bOK = ReadConfig (); // lit le fichier config.json + if (!bOK) // Something wrong with config.json file? + { + InitFail ("Game not correctly installed"); + return EXIT_FAILURE; + } + auto res = SDL_Init (SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER); if (res < 0) return EXIT_FAILURE; // Create a window. - if (g_bFullScreen) - g_window = SDL_CreateWindow ( - gettext ("Planet Blupi"), 0, 0, LXIMAGE, LYIMAGE, - SDL_WINDOW_FULLSCREEN | SDL_WINDOW_BORDERLESS | SDL_WINDOW_INPUT_GRABBED); - else - g_window = SDL_CreateWindow ( - gettext ("Planet Blupi"), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, - LXIMAGE, LYIMAGE, 0); + g_window = SDL_CreateWindow ( + gettext ("Planet Blupi"), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, + LXIMAGE, LYIMAGE, 0); if (!g_window) { @@ -657,12 +693,6 @@ DoInit (int argc, char * argv[], bool & exit) return EXIT_FAILURE; } - if (!bOK) // Something wrong with config.json file? - { - InitFail ("Game not correctly installed"); - return EXIT_FAILURE; - } - SDL_RenderSetLogicalSize (g_renderer, LXIMAGE, LYIMAGE); const auto renders = SDL_GetNumRenderDrivers (); @@ -830,26 +860,20 @@ DoInit (int argc, char * argv[], bool & exit) } totalDim.x = DIMTEXTX * 16; - totalDim.y = DIMTEXTY * 8 * 3; + totalDim.y = DIMTEXTY * 9 * 3; iconDim.x = DIMTEXTX; iconDim.y = DIMTEXTY; - std::string text_filename = "image/text.png"; - if (GetLocale() == "pl") - text_filename = "image/text_pl.png"; // TODO: Merge into one texture, or use TTF fonts instead? - if (!g_pPixmap->Cache (CHTEXT, text_filename, totalDim, iconDim)) + if (!g_pPixmap->Cache (CHTEXT, "image/text.png", totalDim, iconDim)) { InitFail ("Cache text.png"); return EXIT_FAILURE; } totalDim.x = DIMLITTLEX * 16; - totalDim.y = DIMLITTLEY * 8; + totalDim.y = DIMLITTLEY * 9; iconDim.x = DIMLITTLEX; iconDim.y = DIMLITTLEY; - std::string little_filename = "image/little.png"; - if (GetLocale() == "pl") - little_filename = "image/little_pl.png"; // TODO: Merge into one texture, or use TTF fonts instead? - if (!g_pPixmap->Cache (CHLITTLE, little_filename, totalDim, iconDim)) + if (!g_pPixmap->Cache (CHLITTLE, "image/little.png", totalDim, iconDim)) { InitFail ("Cache little.png"); return EXIT_FAILURE; @@ -866,7 +890,7 @@ DoInit (int argc, char * argv[], bool & exit) } // Load all cursors - g_pPixmap->LoadCursors (); + g_pPixmap->LoadCursors (g_windowScale); g_pPixmap->ChangeSprite (SPRITE_WAIT); // met le sablier maison // Create the sound manager. @@ -913,6 +937,8 @@ DoInit (int argc, char * argv[], bool & exit) g_pEvent->Create (g_pPixmap, g_pDecor, g_pSound, g_pMovie); g_updateThread = new std::thread (CheckForUpdates); g_pEvent->SetFullScreen (g_bFullScreen); + if (!g_bFullScreen) + g_pEvent->SetWindowSize (g_windowScale); g_pEvent->ChangePhase (EV_PHASE_INTRO1); g_bTermInit = true; diff --git a/src/button.cxx b/src/button.cxx index 1ae2e48..7247a63 100644 --- a/src/button.cxx +++ b/src/button.cxx @@ -155,7 +155,7 @@ CButton::Draw () rect.right = m_pos.x + m_dim.x; rect.top = m_pos.y; rect.bottom = m_pos.y + m_dim.y; - m_pPixmap->DrawPart (-1, CHBACK, m_pos, rect, 1); // dessine le fond + m_pPixmap->DrawPart (-1, CHBACK, m_pos, rect); // dessine le fond return; } diff --git a/src/decblupi.cxx b/src/decblupi.cxx index d28a7be..06c4c21 100644 --- a/src/decblupi.cxx +++ b/src/decblupi.cxx @@ -2487,6 +2487,29 @@ CDecor::BlupiNextAction (Sint32 rank) return false; } } + + /* Prevent Blupi to take a trap when an enemy is already captured. */ + if (m_blupi[rank].perso == 0 && m_blupi[rank].action == ACTION_CARRY) + { + Sint32 ch, icon; + + auto exists = this->GetObject (m_blupi[rank].goalHili, ch, icon); + if (exists && ch == CHOBJECT) + { + switch (icon) + { + case 96: // spider in trap + case 97: // track in trap + case 98: // robot in trap + BlupiInitAction (rank, ACTION_STOP); + GoalStop (rank, true); + return false; + + default: + break; + } + } + } } if (m_blupi[rank].clicDelay > 0) @@ -3991,7 +4014,7 @@ CDecor::BlupiGoal (Sint32 rank, Buttons button, Point cel, Point cMem) if (direct == DIRECT_S) action = EV_ACTION_BOATS; - if (direct == DIRECT_O) + if (direct == DIRECT_W) action = EV_ACTION_BOATO; if (direct == DIRECT_N) action = EV_ACTION_BOATN; diff --git a/src/decgoal.cxx b/src/decgoal.cxx index 32c2f1c..1f39427 100644 --- a/src/decgoal.cxx +++ b/src/decgoal.cxx @@ -640,7 +640,7 @@ static Sint16 table_goal_build1[] = GOAL_ACTION, ACTION_BUILDSEC, DIRECT_S, GOAL_GOBLUPI, +1, +1, true, GOAL_GOBLUPI, 0, +1, true, - GOAL_ACTION, ACTION_BUILDSOURD, DIRECT_O, + GOAL_ACTION, ACTION_BUILDSOURD, DIRECT_W, GOAL_GOBLUPI, 0, -2, true, GOAL_GOBLUPI, -2, 0, true, GOAL_ACTION, ACTION_SAW, DIRECT_S, @@ -648,11 +648,11 @@ static Sint16 table_goal_build1[] = GOAL_GOBLUPI, 0, +1, true, // maison GOAL_BUILDOBJECT, -2, 0, CHOBJECT, 61, -1, -1, DIMOBJY / 10, 20, 10 * 100, - GOAL_ACTION, ACTION_BUILDSOURD, DIRECT_O, + GOAL_ACTION, ACTION_BUILDSOURD, DIRECT_W, GOAL_GOBLUPI, 0, +1, true, - GOAL_ACTION, ACTION_BUILDSOURD, DIRECT_O, + GOAL_ACTION, ACTION_BUILDSOURD, DIRECT_W, GOAL_GOBLUPI, 0, -1, true, - GOAL_ACTION, ACTION_BUILDSOURD, DIRECT_O, + GOAL_ACTION, ACTION_BUILDSOURD, DIRECT_W, GOAL_GOBLUPI, 0, -1, true, GOAL_GOBLUPI, -1, 0, true, GOAL_ACTION, ACTION_BUILDSEC, DIRECT_S, @@ -723,11 +723,11 @@ static Sint16 table_goal_build3[] = GOAL_ACTION, ACTION_BUILDSEC, DIRECT_S, GOAL_GOBLUPI, +1, 0, true, GOAL_GOBLUPI, 0, +1, true, - GOAL_ACTION, ACTION_BUILDSOURD, DIRECT_O, + GOAL_ACTION, ACTION_BUILDSOURD, DIRECT_W, GOAL_GOBLUPI, 0, -1, true, - GOAL_ACTION, ACTION_BUILDSOURD, DIRECT_O, + GOAL_ACTION, ACTION_BUILDSOURD, DIRECT_W, GOAL_GOBLUPI, 0, +1, true, - GOAL_ACTION, ACTION_BUILDSOURD, DIRECT_O, + GOAL_ACTION, ACTION_BUILDSOURD, DIRECT_W, GOAL_GOBLUPI, 0, -1, true, GOAL_ACTION, ACTION_STOP, DIRECT_E, GOAL_FINISHMOVE, @@ -752,7 +752,7 @@ static Sint16 table_goal_build4[] = GOAL_ACTION, ACTION_SAW, DIRECT_S, GOAL_GOBLUPI, +1, 0, true, GOAL_GOBLUPI, 0, +1, true, - GOAL_ACTION, ACTION_BUILDSOURD, DIRECT_O, + GOAL_ACTION, ACTION_BUILDSOURD, DIRECT_W, GOAL_GOBLUPI, 0, -2, true, GOAL_GOBLUPI, -1, 0, true, GOAL_ACTION, ACTION_SAW, DIRECT_S, @@ -760,11 +760,11 @@ static Sint16 table_goal_build4[] = GOAL_GOBLUPI, 0, +1, true, // mine GOAL_BUILDOBJECT, -2, 0, CHOBJECT, 122, -1, -1, DIMOBJY / 10, 20, 10 * 100, - GOAL_ACTION, ACTION_BUILDSOURD, DIRECT_O, + GOAL_ACTION, ACTION_BUILDSOURD, DIRECT_W, GOAL_GOBLUPI, 0, +1, true, - GOAL_ACTION, ACTION_BUILDSOURD, DIRECT_O, + GOAL_ACTION, ACTION_BUILDSOURD, DIRECT_W, GOAL_GOBLUPI, 0, -1, true, - GOAL_ACTION, ACTION_BUILDSOURD, DIRECT_O, + GOAL_ACTION, ACTION_BUILDSOURD, DIRECT_W, GOAL_GOBLUPI, 0, -1, true, GOAL_GOBLUPI, -1, 0, true, GOAL_ACTION, ACTION_BUILDSEC, DIRECT_S, @@ -801,11 +801,11 @@ static Sint16 table_goal_build5[] = GOAL_ACTION, ACTION_BUILDSEC, DIRECT_S, GOAL_GOBLUPI, +1, 0, true, GOAL_GOBLUPI, 0, +1, true, - GOAL_ACTION, ACTION_BUILDSOURD, DIRECT_O, + GOAL_ACTION, ACTION_BUILDSOURD, DIRECT_W, GOAL_GOBLUPI, 0, -1, true, - GOAL_ACTION, ACTION_BUILDSOURD, DIRECT_O, + GOAL_ACTION, ACTION_BUILDSOURD, DIRECT_W, GOAL_GOBLUPI, 0, +1, true, - GOAL_ACTION, ACTION_BUILDSOURD, DIRECT_O, + GOAL_ACTION, ACTION_BUILDSOURD, DIRECT_W, GOAL_GOBLUPI, 0, -1, true, GOAL_ACTION, ACTION_STOP, DIRECT_E, GOAL_FINISHMOVE, @@ -876,16 +876,16 @@ static Sint16 table_goal_mur[] = GOAL_ACTION, ACTION_BUILDBREF, DIRECT_S, GOAL_ACTION, ACTION_PIOCHEPIERRE, DIRECT_E, GOAL_ACTION, ACTION_PIOCHEPIERRE, DIRECT_E, - GOAL_ACTION, ACTION_BUILDBREF, DIRECT_O, + GOAL_ACTION, ACTION_BUILDBREF, DIRECT_W, GOAL_ACTION, ACTION_PIOCHEPIERRE, DIRECT_E, - GOAL_ACTION, ACTION_BUILDBREF, DIRECT_O, + GOAL_ACTION, ACTION_BUILDBREF, DIRECT_W, GOAL_ACTION, ACTION_PIOCHEPIERRE, DIRECT_E, GOAL_ACTION, ACTION_BUILDBREF, DIRECT_S, - GOAL_ACTION, ACTION_BUILDBREF, DIRECT_O, + GOAL_ACTION, ACTION_BUILDBREF, DIRECT_W, GOAL_ACTION, ACTION_PIOCHEPIERRE, DIRECT_E, GOAL_ACTION, ACTION_PIOCHEPIERRE, DIRECT_E, GOAL_ACTION, ACTION_PIOCHEPIERRE, DIRECT_E, - GOAL_ACTION, ACTION_BUILDBREF, DIRECT_O, + GOAL_ACTION, ACTION_BUILDBREF, DIRECT_W, GOAL_ACTION, ACTION_PIOCHEPIERRE, DIRECT_E, GOAL_ACTION, ACTION_TCHAO, DIRECT_E, GOAL_FINISHMOVE, @@ -911,16 +911,16 @@ static Sint16 table_goal_tour[] = GOAL_ACTION, ACTION_PIOCHEPIERRE, DIRECT_E, GOAL_PUTOBJECT, -1, 0, -1, -1, // enlève les pierres GOAL_GOBLUPI, 0, +1, true, - GOAL_ACTION, ACTION_BUILDBREF, DIRECT_O, + GOAL_ACTION, ACTION_BUILDBREF, DIRECT_W, GOAL_ACTION, ACTION_PIOCHEPIERRE, DIRECT_E, - GOAL_ACTION, ACTION_BUILDBREF, DIRECT_O, - GOAL_ACTION, ACTION_BUILDBREF, DIRECT_O, - GOAL_ACTION, ACTION_BUILDBREF, DIRECT_O, - GOAL_ACTION, ACTION_BUILDBREF, DIRECT_O, + GOAL_ACTION, ACTION_BUILDBREF, DIRECT_W, + GOAL_ACTION, ACTION_BUILDBREF, DIRECT_W, + GOAL_ACTION, ACTION_BUILDBREF, DIRECT_W, + GOAL_ACTION, ACTION_BUILDBREF, DIRECT_W, GOAL_ACTION, ACTION_PIOCHEPIERRE, DIRECT_E, - GOAL_ACTION, ACTION_BUILDBREF, DIRECT_O, - GOAL_ACTION, ACTION_BUILDBREF, DIRECT_O, - GOAL_ACTION, ACTION_BUILDBREF, DIRECT_O, + GOAL_ACTION, ACTION_BUILDBREF, DIRECT_W, + GOAL_ACTION, ACTION_BUILDBREF, DIRECT_W, + GOAL_ACTION, ACTION_BUILDBREF, DIRECT_W, GOAL_ACTION, ACTION_STOP, DIRECT_S, GOAL_FINISHMOVE, GOAL_ARRANGEOBJECT, -1, -1, @@ -1317,7 +1317,7 @@ static Sint16 table_goal_labo[] = GOAL_ADDMOVES, -1, -1, 10, // secoue GOAL_CACHE, true, false, GOAL_ACTION, ACTION_STOP, DIRECT_E, - GOAL_ACTION, ACTION_STOP, DIRECT_O, + GOAL_ACTION, ACTION_STOP, DIRECT_W, GOAL_SOUND, SOUND_LABO, GOAL_ACTION, ACTION_LABO, DIRECT_E, GOAL_SOUND, SOUND_DOOR, @@ -1785,7 +1785,7 @@ static Sint16 table_goal_pontol[] = GOAL_INTERRUPT, 0, // prioritaire GOAL_BUILDOBJECT, -10, -10, CHOBJECT, 72, -1, -1, DIMOBJY, 1, -1 * 100, GOAL_ADDMOVES, -10, -10, 7, // pont vers l'ouest - GOAL_ACTION, ACTION_BRIDGE, DIRECT_O, + GOAL_ACTION, ACTION_BRIDGE, DIRECT_W, GOAL_GROUP, 4, GOAL_FINISHMOVE, GOAL_PUTOBJECT, -10, -10, -1, -1, @@ -1798,7 +1798,7 @@ static Sint16 table_goal_pontol[] = GOAL_PUTFLOOR, -10, -10, CHFLOOR, -2, // vIcon GOAL_SOUND, SOUND_PLOUF, //? GOAL_GOBLUPI, 0,-1, true, - GOAL_ACTION, ACTION_STOP, DIRECT_O, + GOAL_ACTION, ACTION_STOP, DIRECT_W, GOAL_TERM, 0 }; @@ -1982,7 +1982,7 @@ static Sint16 table_goal_bateauo[] = GOAL_GROUP, 2, GOAL_BUILDOBJECT, -1, 0, CHOBJECT, 117, -1, -1, DIMOBJY, 1, -1 * 100, GOAL_ADDMOVES, -1, 0, 7, // bateau vers l'ouest - GOAL_ACTION, ACTION_BRIDGE, DIRECT_O, + GOAL_ACTION, ACTION_BRIDGE, DIRECT_W, GOAL_GROUP, 4, GOAL_FINISHMOVE, GOAL_PUTOBJECT, -1, 0, -1, -1, @@ -2227,7 +2227,7 @@ static Sint16 table_goal_r_build1[] = GOAL_GOBLUPI, 0, -1, true, GOAL_ACTION, ACTION_R_APLAT, DIRECT_E, GOAL_GOBLUPI, +1, 0, true, - GOAL_ACTION, ACTION_R_BUILD, DIRECT_O, + GOAL_ACTION, ACTION_R_BUILD, DIRECT_W, GOAL_GOBLUPI, 0, +1, true, GOAL_ACTION, ACTION_R_BUILD, DIRECT_E, GOAL_GOBLUPI, -1, 0, true, @@ -2235,7 +2235,7 @@ static Sint16 table_goal_r_build1[] = GOAL_GOBLUPI, +1, 0, true, GOAL_ACTION, ACTION_R_BUILD, DIRECT_E, GOAL_GOBLUPI, 0, -1, true, - GOAL_ACTION, ACTION_R_APLAT, DIRECT_O, + GOAL_ACTION, ACTION_R_APLAT, DIRECT_W, GOAL_ACTION, ACTION_R_STOP, DIRECT_S, GOAL_FINISHMOVE, GOAL_TERM, @@ -2265,7 +2265,7 @@ static Sint16 table_goal_r_build2[] = GOAL_GOBLUPI, 0, -1, true, GOAL_ACTION, ACTION_R_APLAT, DIRECT_E, GOAL_GOBLUPI, +1, 0, true, - GOAL_ACTION, ACTION_R_APLAT, DIRECT_O, + GOAL_ACTION, ACTION_R_APLAT, DIRECT_W, GOAL_GOBLUPI, 0, +1, true, GOAL_ACTION, ACTION_R_BUILD, DIRECT_S, GOAL_GOBLUPI, 0, -1, true, @@ -2273,7 +2273,7 @@ static Sint16 table_goal_r_build2[] = GOAL_GOBLUPI, 0, +1, true, GOAL_ACTION, ACTION_R_APLAT, DIRECT_S, GOAL_GOBLUPI, 0, -1, true, - GOAL_ACTION, ACTION_R_APLAT, DIRECT_O, + GOAL_ACTION, ACTION_R_APLAT, DIRECT_W, GOAL_ACTION, ACTION_R_STOP, DIRECT_S, GOAL_FINISHMOVE, GOAL_TERM, @@ -2301,7 +2301,7 @@ static Sint16 table_goal_r_build3[] = GOAL_BUILDOBJECT, -1, -1, CHOBJECT, 102, -1, -1, DIMOBJY / 4, 20, 4 * 100, GOAL_ACTION, ACTION_R_BUILD, DIRECT_E, GOAL_GOBLUPI, 0, -1, true, - GOAL_ACTION, ACTION_R_APLAT, DIRECT_O, + GOAL_ACTION, ACTION_R_APLAT, DIRECT_W, GOAL_GOBLUPI, +1, 0, true, GOAL_ACTION, ACTION_R_BUILD, DIRECT_N, GOAL_GOBLUPI, 0, +1, true, @@ -2341,7 +2341,7 @@ static Sint16 table_goal_r_build4[] = GOAL_GOBLUPI, 0, -1, true, GOAL_ACTION, ACTION_R_BUILD, DIRECT_S, GOAL_GOBLUPI, +1, 0, true, - GOAL_ACTION, ACTION_R_APLAT, DIRECT_O, + GOAL_ACTION, ACTION_R_APLAT, DIRECT_W, GOAL_GOBLUPI, 0, +1, true, GOAL_ACTION, ACTION_R_BUILD, DIRECT_S, GOAL_GOBLUPI, 0, -1, true, @@ -2379,7 +2379,7 @@ static Sint16 table_goal_r_build5[] = GOAL_GOBLUPI, 0, -1, true, GOAL_ACTION, ACTION_R_BUILD, DIRECT_S, GOAL_GOBLUPI, +1, 0, true, - GOAL_ACTION, ACTION_R_APLAT, DIRECT_O, + GOAL_ACTION, ACTION_R_APLAT, DIRECT_W, GOAL_GOBLUPI, 0, +1, true, GOAL_ACTION, ACTION_R_BUILD, DIRECT_S, GOAL_GOBLUPI, 0, -1, true, @@ -2417,7 +2417,7 @@ static Sint16 table_goal_r_build6[] = GOAL_GOBLUPI, 0, -1, true, GOAL_ACTION, ACTION_R_BUILD, DIRECT_S, GOAL_GOBLUPI, +1, 0, true, - GOAL_ACTION, ACTION_R_APLAT, DIRECT_O, + GOAL_ACTION, ACTION_R_APLAT, DIRECT_W, GOAL_GOBLUPI, 0, +1, true, GOAL_ACTION, ACTION_R_BUILD, DIRECT_S, GOAL_GOBLUPI, 0, -1, true, @@ -2440,17 +2440,17 @@ static Sint16 table_goal_r_make1[] = GOAL_GROUP, 2, GOAL_USINEFREE, -1, -1, GOAL_INTERRUPT, 0, // prioritaire - GOAL_ACTION, ACTION_R_LOAD, DIRECT_O, - GOAL_ACTION, ACTION_R_LOAD, DIRECT_O, - GOAL_ACTION, ACTION_R_BUILD, DIRECT_O, - GOAL_ACTION, ACTION_R_LOAD, DIRECT_O, - GOAL_ACTION, ACTION_R_LOAD, DIRECT_O, - GOAL_ACTION, ACTION_R_BUILD, DIRECT_O, - GOAL_ACTION, ACTION_R_LOAD, DIRECT_O, - GOAL_ACTION, ACTION_R_BUILD, DIRECT_O, - GOAL_ACTION, ACTION_R_LOAD, DIRECT_O, - GOAL_ACTION, ACTION_R_LOAD, DIRECT_O, - GOAL_ACTION, ACTION_R_BUILD, DIRECT_O, + GOAL_ACTION, ACTION_R_LOAD, DIRECT_W, + GOAL_ACTION, ACTION_R_LOAD, DIRECT_W, + GOAL_ACTION, ACTION_R_BUILD, DIRECT_W, + GOAL_ACTION, ACTION_R_LOAD, DIRECT_W, + GOAL_ACTION, ACTION_R_LOAD, DIRECT_W, + GOAL_ACTION, ACTION_R_BUILD, DIRECT_W, + GOAL_ACTION, ACTION_R_LOAD, DIRECT_W, + GOAL_ACTION, ACTION_R_BUILD, DIRECT_W, + GOAL_ACTION, ACTION_R_LOAD, DIRECT_W, + GOAL_ACTION, ACTION_R_LOAD, DIRECT_W, + GOAL_ACTION, ACTION_R_BUILD, DIRECT_W, GOAL_TERM, 0 }; @@ -2465,11 +2465,11 @@ static Sint16 table_goal_r_make2[] = GOAL_INTERRUPT, 0, // prioritaire GOAL_SOUND, SOUND_DOOR, GOAL_PUTOBJECT, -2, -1, CHOBJECT, 101, // ouvre la porte - GOAL_ACTION, ACTION_R_STOP, DIRECT_O, - GOAL_ACTION, ACTION_R_STOP, DIRECT_O, - GOAL_ACTION, ACTION_R_STOP, DIRECT_O, - GOAL_ACTION, ACTION_R_STOP, DIRECT_O, - GOAL_ACTION, ACTION_R_STOP, DIRECT_O, + GOAL_ACTION, ACTION_R_STOP, DIRECT_W, + GOAL_ACTION, ACTION_R_STOP, DIRECT_W, + GOAL_ACTION, ACTION_R_STOP, DIRECT_W, + GOAL_ACTION, ACTION_R_STOP, DIRECT_W, + GOAL_ACTION, ACTION_R_STOP, DIRECT_W, GOAL_GOBLUPI, -1, 0, true, GOAL_SOUND, SOUND_DOOR, GOAL_GROUP, 2, @@ -2530,11 +2530,11 @@ static Sint16 table_goal_r_make3[] = GOAL_INTERRUPT, 0, // prioritaire GOAL_SOUND, SOUND_DOOR, GOAL_PUTOBJECT, -2, -1, CHOBJECT, 103, // ouvre la porte - GOAL_ACTION, ACTION_R_STOP, DIRECT_O, - GOAL_ACTION, ACTION_R_STOP, DIRECT_O, - GOAL_ACTION, ACTION_R_STOP, DIRECT_O, - GOAL_ACTION, ACTION_R_STOP, DIRECT_O, - GOAL_ACTION, ACTION_R_STOP, DIRECT_O, + GOAL_ACTION, ACTION_R_STOP, DIRECT_W, + GOAL_ACTION, ACTION_R_STOP, DIRECT_W, + GOAL_ACTION, ACTION_R_STOP, DIRECT_W, + GOAL_ACTION, ACTION_R_STOP, DIRECT_W, + GOAL_ACTION, ACTION_R_STOP, DIRECT_W, GOAL_GOBLUPI, -1, 0, true, GOAL_SOUND, SOUND_DOOR, GOAL_GROUP, 2, @@ -2594,11 +2594,11 @@ static Sint16 table_goal_r_make4[] = GOAL_INTERRUPT, 0, // prioritaire GOAL_SOUND, SOUND_DOOR, GOAL_PUTOBJECT, -2, -1, CHOBJECT, 105, // ouvre la porte - GOAL_ACTION, ACTION_R_STOP, DIRECT_O, - GOAL_ACTION, ACTION_R_STOP, DIRECT_O, - GOAL_ACTION, ACTION_R_STOP, DIRECT_O, - GOAL_ACTION, ACTION_R_STOP, DIRECT_O, - GOAL_ACTION, ACTION_R_STOP, DIRECT_O, + GOAL_ACTION, ACTION_R_STOP, DIRECT_W, + GOAL_ACTION, ACTION_R_STOP, DIRECT_W, + GOAL_ACTION, ACTION_R_STOP, DIRECT_W, + GOAL_ACTION, ACTION_R_STOP, DIRECT_W, + GOAL_ACTION, ACTION_R_STOP, DIRECT_W, GOAL_GOBLUPI, -1, 0, true, GOAL_SOUND, SOUND_DOOR, GOAL_GROUP, 2, @@ -2658,11 +2658,11 @@ static Sint16 table_goal_r_make5[] = GOAL_INTERRUPT, 0, // prioritaire GOAL_SOUND, SOUND_DOOR, GOAL_PUTOBJECT, -2, -1, CHOBJECT, 116, // ouvre la porte - GOAL_ACTION, ACTION_R_STOP, DIRECT_O, - GOAL_ACTION, ACTION_R_STOP, DIRECT_O, - GOAL_ACTION, ACTION_R_STOP, DIRECT_O, - GOAL_ACTION, ACTION_R_STOP, DIRECT_O, - GOAL_ACTION, ACTION_R_STOP, DIRECT_O, + GOAL_ACTION, ACTION_R_STOP, DIRECT_W, + GOAL_ACTION, ACTION_R_STOP, DIRECT_W, + GOAL_ACTION, ACTION_R_STOP, DIRECT_W, + GOAL_ACTION, ACTION_R_STOP, DIRECT_W, + GOAL_ACTION, ACTION_R_STOP, DIRECT_W, GOAL_GOBLUPI, -1, 0, true, GOAL_SOUND, SOUND_DOOR, GOAL_GROUP, 2, @@ -2722,11 +2722,11 @@ static Sint16 table_goal_r_make6[] = GOAL_INTERRUPT, 0, // prioritaire GOAL_SOUND, SOUND_DOOR, GOAL_PUTOBJECT, -2, -1, CHOBJECT, 18, // ouvre la porte - GOAL_ACTION, ACTION_R_STOP, DIRECT_O, - GOAL_ACTION, ACTION_R_STOP, DIRECT_O, - GOAL_ACTION, ACTION_R_STOP, DIRECT_O, - GOAL_ACTION, ACTION_R_STOP, DIRECT_O, - GOAL_ACTION, ACTION_R_STOP, DIRECT_O, + GOAL_ACTION, ACTION_R_STOP, DIRECT_W, + GOAL_ACTION, ACTION_R_STOP, DIRECT_W, + GOAL_ACTION, ACTION_R_STOP, DIRECT_W, + GOAL_ACTION, ACTION_R_STOP, DIRECT_W, + GOAL_ACTION, ACTION_R_STOP, DIRECT_W, GOAL_GOBLUPI, -1, 0, true, GOAL_SOUND, SOUND_DOOR, GOAL_GROUP, 2, @@ -2940,7 +2940,7 @@ static Sint16 table_goal_drapeau3[] = GOAL_INTERRUPT, 0, // prioritaire GOAL_WORK, 0, -1, GOAL_BUILDOBJECT, 0, -1, CHOBJECT, 124, -1, -1, DIMOBJY / 10, 8, 10 * 100, - GOAL_ACTION, ACTION_PIOCHESOURD, DIRECT_O, + GOAL_ACTION, ACTION_PIOCHESOURD, DIRECT_W, GOAL_GOBLUPI, +1, -1, true, GOAL_ACTION, ACTION_PIOCHESOURD, DIRECT_E, GOAL_ADDDRAPEAU, -1, 0, @@ -2968,7 +2968,7 @@ static Sint16 table_goal_extrait[] = GOAL_ADDMOVES, -1, -1, 11, // secoue GOAL_CACHE, true, false, GOAL_ACTION, ACTION_STOP, DIRECT_E, - GOAL_ACTION, ACTION_STOP, DIRECT_O, + GOAL_ACTION, ACTION_STOP, DIRECT_W, GOAL_SOUND, SOUND_MINE, GOAL_ACTION, ACTION_LABO, DIRECT_E, GOAL_GROUP, 2, @@ -3015,7 +3015,7 @@ static Sint16 table_goal_fabjeep[] = GOAL_ADDMOVES, -1, -1, 12, // secoue GOAL_CACHE, true, false, GOAL_ACTION, ACTION_STOP, DIRECT_E, - GOAL_ACTION, ACTION_STOP, DIRECT_O, + GOAL_ACTION, ACTION_STOP, DIRECT_W, GOAL_SOUND, SOUND_USINE, GOAL_ACTION, ACTION_LABO, DIRECT_E, GOAL_GROUP, 2, @@ -3058,7 +3058,7 @@ static Sint16 table_goal_fabarmure[] = GOAL_ADDMOVES, -1, -1, 12, // secoue GOAL_CACHE, true, false, GOAL_ACTION, ACTION_STOP, DIRECT_E, - GOAL_ACTION, ACTION_STOP, DIRECT_O, + GOAL_ACTION, ACTION_STOP, DIRECT_W, GOAL_SOUND, SOUND_USINE, GOAL_ACTION, ACTION_LABO, DIRECT_E, GOAL_GROUP, 2, @@ -3101,7 +3101,7 @@ static Sint16 table_goal_fabmine[] = GOAL_ADDMOVES, -1, -1, 12, // secoue GOAL_CACHE, true, false, GOAL_ACTION, ACTION_STOP, DIRECT_E, - GOAL_ACTION, ACTION_STOP, DIRECT_O, + GOAL_ACTION, ACTION_STOP, DIRECT_W, GOAL_SOUND, SOUND_USINE, GOAL_ACTION, ACTION_LABO, DIRECT_E, GOAL_GROUP, 2, @@ -3150,7 +3150,7 @@ static Sint16 table_goal_fabdisc[] = GOAL_BUILDOBJECT, 0, -1, CHOBJECT, 119, -1, -1, DIMOBJY, 1, -1 * 100, GOAL_ADDMOVES, 0, -1, 12, // secoue GOAL_ACTION, ACTION_STOP, DIRECT_E, - GOAL_ACTION, ACTION_STOP, DIRECT_O, + GOAL_ACTION, ACTION_STOP, DIRECT_W, GOAL_SOUND, SOUND_USINE, GOAL_ACTION, ACTION_LABO, DIRECT_E, GOAL_GROUP, 2, diff --git a/src/decio.cxx b/src/decio.cxx index be1d4a0..7990a28 100644 --- a/src/decio.cxx +++ b/src/decio.cxx @@ -120,7 +120,10 @@ CDecor::Write (Sint32 rank, bool bUser, Sint32 world, Sint32 time, Sint32 total) AddUserPath (filename); } else - filename = string_format (GetBaseDir () + "data/world%.3d.blp", rank); + { + filename = string_format ("data/world%.3d.blp", rank); + AddUserPath (filename); + } file = fopen (filename.c_str (), "wb"); if (file == nullptr) @@ -207,6 +210,11 @@ CDecor::Read ( filename = string_format ("data/user%.3d.blp", rank); AddUserPath (filename); } + else if (rank >= 200) + { + filename = string_format ("data/world%.3d.blp", rank); + AddUserPath (filename); + } else filename = string_format (GetBaseDir () + "data/world%.3d.blp", rank); @@ -343,6 +351,11 @@ CDecor::FileExist ( filename = string_format ("data/user%.3d.blp", rank); AddUserPath (filename); } + else if (rank >= 200) + { + filename = string_format ("data/world%.3d.blp", rank); + AddUserPath (filename); + } else filename = string_format (GetBaseDir () + "data/world%.3d.blp", rank); diff --git a/src/decmap.cxx b/src/decmap.cxx index 28147a3..253e144 100644 --- a/src/decmap.cxx +++ b/src/decmap.cxx @@ -533,6 +533,16 @@ CDecor::GenerateMap () if (m_blupi[rank].bExist) { pos = ConvCelToMap (m_blupi[rank].cel); + + if (this->GetSkill () >= 1 && !m_bBuild) + { + auto fogCel = m_blupi[rank].cel; + fogCel.x = (fogCel.x / 4) * 4; + fogCel.y = (fogCel.y / 4) * 4; + if (m_decor[fogCel.x / 2][fogCel.y / 2].fog == FOGHIDE) // hidden? + continue; + } + if ( pos.x >= 0 && pos.x < DIMMAPX - 1 && pos.y >= 0 && pos.y < DIMMAPY - 1) { diff --git a/src/decor.cxx b/src/decor.cxx index 431ca5b..f6bf15c 100644 --- a/src/decor.cxx +++ b/src/decor.cxx @@ -90,14 +90,14 @@ GetVector (Sint32 direct) case DIRECT_S: vector.y = +1; break; - case DIRECT_SO: + case DIRECT_SW: vector.x = -1; vector.y = +1; break; - case DIRECT_O: + case DIRECT_W: vector.x = -1; break; - case DIRECT_NO: + case DIRECT_NW: vector.x = -1; vector.y = -1; break; @@ -684,7 +684,7 @@ CDecor::BuildMoveFloor (Sint32 x, Sint32 y, Point pos, Sint32 rank) m_move[rank].maskChannel, icon, m_move[rank].channel, m_move[rank].icon, 0); - m_pPixmap->DrawIcon (-1, m_move[rank].channel, 0, pos, true); + m_pPixmap->DrawIcon (-1, m_move[rank].channel, 0, pos); } else { diff --git a/src/decstat.cxx b/src/decstat.cxx index 5ed69da..057d916 100644 --- a/src/decstat.cxx +++ b/src/decstat.cxx @@ -472,9 +472,22 @@ CDecor::StatisticUpdate () } if (m_blupi[rank].perso == 8) // disciple ? table_statistic[STATDISCIPLE].nb++; + + // Hide enemies from the stat when hidden by the fog + bool hide = false; + if (this->GetSkill () >= 1) + { + auto fogCel = m_blupi[rank].cel; + fogCel.x = (fogCel.x / 4) * 4; + fogCel.y = (fogCel.y / 4) * 4; + if (m_decor[fogCel.x / 2][fogCel.y / 2].fog == FOGHIDE) // hidden? + hide = true; + } + if (m_blupi[rank].perso == 4) // robot ? { - table_statistic[STATROBOT].nb++; + if (!hide) + table_statistic[STATROBOT].nb++; m_nbStatRobots++; x = (m_blupi[rank].cel.x / 2) * 2; y = (m_blupi[rank].cel.y / 2) * 2; @@ -485,27 +498,32 @@ CDecor::StatisticUpdate () } if (m_blupi[rank].perso == 3) // tracks ? { - table_statistic[STATTRACKS].nb++; + if (!hide) + table_statistic[STATTRACKS].nb++; if (!m_term.bHachRobot) // pas robot sur hachures ? m_nbStatRobots++; } if (m_blupi[rank].perso == 1) // araignée ? { - table_statistic[STATARAIGNEE].nb++; + if (!hide) + table_statistic[STATARAIGNEE].nb++; if (!m_term.bHachRobot) // pas robot sur hachures ? m_nbStatRobots++; } if (m_blupi[rank].perso == 2) // virus ? - table_statistic[STATVIRUS].nb++; + if (!hide) + table_statistic[STATVIRUS].nb++; if (m_blupi[rank].perso == 5) // bombe ? { - table_statistic[STATBOMBE].nb++; + if (!hide) + table_statistic[STATBOMBE].nb++; if (!m_term.bHachRobot) // pas robot sur hachures ? m_nbStatRobots++; } if (m_blupi[rank].perso == 7) // électro ? { - table_statistic[STATELECTRO].nb++; + if (!hide) + table_statistic[STATELECTRO].nb++; if (!m_term.bHachRobot) // pas robot sur hachures ? m_nbStatRobots++; } @@ -675,7 +693,7 @@ CDecor::StatisticDraw () rect.top = pos.y; rect.bottom = pos.y + DIMSTATY; - m_pPixmap->DrawPart (-1, CHBACK, pos, rect, 1); // dessine le fond + m_pPixmap->DrawPart (-1, CHBACK, pos, rect); // dessine le fond if (rank == 0 && m_bStatUp) { @@ -750,7 +768,7 @@ CDecor::StatisticDraw () rect.right = pos.x + POSDRAWX; rect.top = pos.y; rect.bottom = pos.y + 16; - m_pPixmap->DrawPart (-1, CHBACK, pos, rect, 1); // dessine le fond + m_pPixmap->DrawPart (-1, CHBACK, pos, rect); // dessine le fond if (strlen (textRes)) { @@ -1009,6 +1027,14 @@ CDecor::StatisticDetect (Point pos) if (rank >= STATNB) return -1; + auto pStatistic = StatisticGet (rank); + if ( + this->GetSkill () >= 1 && pStatistic->perso >= 0 && + (pStatistic->perso != 0 && pStatistic->perso != 8)) + { + return -1; + } + return rank; } diff --git a/src/def.h b/src/def.h index f8d2440..0b8602a 100644 --- a/src/def.h +++ b/src/def.h @@ -23,50 +23,50 @@ #include // clang-format off -#define _INTRO true // true si images d'introduction +#define _INTRO true // true for init screen - -#define LXIMAGE 640 // dimensions de la fenêtre de jeu +#define SCRFACTOR 4 / 3 +#define LXIMAGE (480 * SCRFACTOR + (480 * SCRFACTOR) % 2) // window size #define LYIMAGE 480 -#define POSDRAWX 144 // surface de dessin +#define POSDRAWX 144 // draw surface #define POSDRAWY 15 -#define DIMDRAWX 480 +#define DIMDRAWX (LXIMAGE - (640 - 480)) #define DIMDRAWY 450 -#define POSMAPX 8 // surface pour la carte +#define POSMAPX 8 // map surface #define POSMAPY 15 #define DIMMAPX 128 #define DIMMAPY 128 -#define MAXCELX 200 // nb max de cellules d'un monde +#define MAXCELX 200 // max cells for a world #define MAXCELY 200 -#define DIMCELX 60 // dimensions d'une cellule (décor) +#define DIMCELX 60 // cell size (decor) #define DIMCELY 30 -#define DIMOBJX 120 // dimensions d'un objet +#define DIMOBJX 120 // object size #define DIMOBJY 120 -#define DIMBLUPIX 60 // dimensions de blupi +#define DIMBLUPIX 60 // Blupi size #define DIMBLUPIY 60 -#define SHIFTBLUPIY 5 // petit décalage vers le haut +#define SHIFTBLUPIY 5 // shift on top -#define DIMBUTTONX 40 // dimensions d'un button +#define DIMBUTTONX 40 // button size #define DIMBUTTONY 40 -#define DIMJAUGEX 124 // dimensions de la jauge +#define DIMJAUGEX 124 // progress size #define DIMJAUGEY 22 -#define POSSTATX 12 // statistiques +#define POSSTATX 12 // statistics #define POSSTATY 220 #define DIMSTATX 60 #define DIMSTATY 30 -#define DIMTEXTX 16 // dimensions max d'un caractère +#define DIMTEXTX 16 // max char size #define DIMTEXTY 16 -#define DIMLITTLEX 16 // dimensions max d'un petit caractère +#define DIMLITTLEX 16 // max small char size #define DIMLITTLEY 12 #define CHBACK 0 @@ -94,9 +94,9 @@ enum Directions { DIRECT_E = (0 * 16), // east DIRECT_SE = (1 * 16), // south-east DIRECT_S = (2 * 16), // south - DIRECT_SO = (3 * 16), // south-west - DIRECT_O = (4 * 16), // west - DIRECT_NO = (5 * 16), // north-west + DIRECT_SW = (3 * 16), // south-west + DIRECT_W = (4 * 16), // west + DIRECT_NW = (5 * 16), // north-west DIRECT_N = (6 * 16), // north DIRECT_NE = (7 * 16), // north-east }; diff --git a/src/event.cxx b/src/event.cxx index d6c5598..0d4231f 100644 --- a/src/event.cxx +++ b/src/event.cxx @@ -20,6 +20,7 @@ #include #include +#include #include #include #include @@ -1258,63 +1259,69 @@ static Phase table[] = { EV_BUTTON1, 0, {1, 40}, - 170 + 42 * 0, 30 + 42 * 0, + 170 + 42 * 1, 30 + 42 * 0, { translate ("No music") }, }, { EV_BUTTON2, 0, {1, 44}, - 170 + 42 * 0, 30 + 42 * 1, + 170 + 42 * 0, 30 + 42 * 0, { translate ("Music number 1") }, }, { EV_BUTTON3, 0, {1, 44}, - 170 + 42 * 0, 30 + 42 * 2, + 170 + 42 * 0, 30 + 42 * 1, { translate ("Music number 2") }, }, { EV_BUTTON4, 0, {1, 44}, - 170 + 42 * 0, 30 + 42 * 3, + 170 + 42 * 0, 30 + 42 * 2, { translate ("Music number 3") }, }, { EV_BUTTON5, 0, {1, 44}, - 170 + 42 * 0, 30 + 42 * 4, + 170 + 42 * 0, 30 + 42 * 3, { translate ("Music number 4") }, }, { EV_BUTTON6, 0, {1, 44}, - 170 + 42 * 0, 30 + 42 * 5, + 170 + 42 * 0, 30 + 42 * 4, { translate ("Music number 5") }, }, { EV_BUTTON7, 0, {1, 44}, - 170 + 42 * 0, 30 + 42 * 6, + 170 + 42 * 0, 30 + 42 * 5, { translate ("Music number 6") }, }, { EV_BUTTON8, 0, {1, 44}, - 170 + 42 * 0, 30 + 42 * 7, + 170 + 42 * 0, 30 + 42 * 6, { translate ("Music number 7") }, }, { EV_BUTTON9, 0, {1, 44}, - 170 + 42 * 0, 30 + 42 * 8, + 170 + 42 * 0, 30 + 42 * 7, { translate ("Music number 8") }, }, { EV_BUTTON10, 0, {1, 44}, - 170 + 42 * 0, 30 + 42 * 9, + 170 + 42 * 0, 30 + 42 * 8, { translate ("Music number 9") }, }, + { + EV_BUTTON11, + 0, {1, 44}, + 170 + 42 * 0, 30 + 42 * 9, + { translate ("Music number 10") }, + }, { EV_PHASE_BUILD, 0, {1, 50}, @@ -1518,7 +1525,7 @@ CEvent::CEvent () { Sint32 i; - m_bFullScreen = g_bFullScreen; + m_bFullScreen = false; m_WindowScale = 1; m_exercice = 0; m_mission = 0; @@ -1545,7 +1552,6 @@ CEvent::CEvent () m_bSpeed = false; m_bHelp = false; m_bAllMissions = false; - m_bChangeCheat = false; m_scrollSpeed = 1; m_bPause = false; m_bShift = false; @@ -1587,6 +1593,7 @@ CEvent::CEvent () m_Languages.push_back (Language::en_US); m_Languages.push_back (Language::fr); m_Languages.push_back (Language::de); + m_Languages.push_back (Language::it); m_Languages.push_back (Language::pl); this->m_LangStart = GetLocale (); @@ -1597,8 +1604,10 @@ CEvent::CEvent () m_Lang = m_Languages.begin () + 2; else if (this->m_LangStart == "de") m_Lang = m_Languages.begin () + 3; - else if (this->m_LangStart == "pl") + else if (this->m_LangStart == "it") m_Lang = m_Languages.begin () + 4; + else if (this->m_LangStart == "pl") + m_Lang = m_Languages.begin () + 5; else m_Lang = m_Languages.begin (); @@ -1650,6 +1659,7 @@ CEvent::SetFullScreen (bool bFullScreen) SDL_SetWindowPosition ( g_window, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED); + m_pPixmap->LoadCursors (m_WindowScale); m_pPixmap->ReloadTargetTextures (); /* Force this update before otherwise the coordinates retrieved with @@ -1663,6 +1673,33 @@ CEvent::SetFullScreen (bool bFullScreen) CEvent::PushUserEvent (EV_WARPMOUSE, coord); } +/** + * \brief Change the size of the window. + * + * We use an integer scale to be sure that the pixels are always well formed. + * + * \param[in] newScale - The new scale. + */ +void +CEvent::SetWindowSize (Uint8 newScale) +{ + if (newScale == m_WindowScale) + return; + + auto scale = m_WindowScale; + m_WindowScale = newScale; + switch (newScale) + { + case 1: + case 2: + SetWindowSize (scale, m_WindowScale); + break; + + default: + return; + } +} + /** * \brief Change the size of the window. * @@ -1681,6 +1718,7 @@ CEvent::SetWindowSize (Uint8 prevScale, Uint8 newScale) SDL_SetWindowPosition ( g_window, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED); + m_pPixmap->LoadCursors (newScale); m_pPixmap->ReloadTargetTextures (); /* Force this update before otherwise the coordinates retrieved with @@ -1932,12 +1970,10 @@ CEvent::DrawButtons () bool bEnable; if ( - (m_phase == EV_PHASE_PLAY && m_bChangeCheat) || + (m_phase == EV_PHASE_PLAY) || (m_phase != EV_PHASE_PLAY && m_phase != EV_PHASE_INSERT && m_phase != EV_PHASE_INTRO1 && m_phase != EV_PHASE_BYE)) { - m_bChangeCheat = false; - text[0] = 0; if (m_bAllMissions) AddCheatCode (text, cheat_code[3]); @@ -1949,14 +1985,17 @@ CEvent::DrawButtons () AddCheatCode (text, cheat_code[6]); if (m_pDecor->GetSuper ()) AddCheatCode (text, cheat_code[7]); - pos.x = 2; - pos.y = 2; - rect.left = pos.x; - rect.right = pos.x + 300; - rect.top = pos.y; - rect.bottom = pos.y + DIMLITTLEY; - m_pPixmap->DrawPart (-1, CHBACK, pos, rect, 1); // dessine le fond - DrawText (m_pPixmap, pos, text, FONTLITTLE); + + if (text[0]) + { + pos.x = 2; + pos.y = 2; + rect.left = pos.x; + rect.right = pos.x + 300; + rect.top = pos.y; + rect.bottom = pos.y + DIMLITTLEY; + DrawText (m_pPixmap, pos, text, FONTLITTLE); + } } if (m_phase == EV_PHASE_INIT) @@ -2112,7 +2151,7 @@ CEvent::DrawButtons () rect.right = pos.x + 20; rect.top = pos.y; rect.bottom = pos.y + 15; - m_pPixmap->DrawPart (-1, CHBACK, pos, rect, 1); // dessine le fond + m_pPixmap->DrawPart (-1, CHBACK, pos, rect); // dessine le fond if (m_speed > 1) { snprintf (res, sizeof (res), "x%d", m_speed); @@ -2130,7 +2169,7 @@ CEvent::DrawButtons () rect.right = POSDRAWX + DIMDRAWX; rect.top = 0; rect.bottom = lg; - m_pPixmap->DrawPart (-1, CHBACK, pos, rect, 1); + m_pPixmap->DrawPart (-1, CHBACK, pos, rect); pos.x = POSDRAWX; pos.y = lg; @@ -2138,7 +2177,7 @@ CEvent::DrawButtons () rect.right = POSDRAWX + DIMDRAWX; rect.top = 0; rect.bottom = POSDRAWY; - m_pPixmap->DrawPart (-1, CHBACK, pos, rect, 1); + m_pPixmap->DrawPart (-1, CHBACK, pos, rect); pos.x = POSDRAWX + 20; pos.y = POSDRAWY + 4; @@ -2504,8 +2543,10 @@ CEvent::DrawButtons () lang = "Français"; else if (locale == "de") lang = "Deutsch"; + else if (locale == "it") + lang = "Italiano"; else if (locale == "pl") - lang = "Polish"; + lang = "Polski"; lg = GetTextWidth (lang.c_str ()); pos.x = (54 + 40) - lg / 2; @@ -3036,7 +3077,10 @@ CEvent::ChangePhase (Uint32 phase) // FIXME: pause is better if the game is not stop but just interrupted if (m_phase == EV_PHASE_PLAY && m_phase != phase) - m_pSound->StopAllSounds (false); + { + static const std::set except = {SOUND_WIN, SOUND_LOST}; + m_pSound->StopAllSounds (false, &except); + } m_phase = phase; // change de phase m_index = index; @@ -3149,7 +3193,6 @@ CEvent::ChangePhase (Uint32 phase) m_pDecor->NextPhase (0); // refait la carte tout de suite m_pDecor->StatisticInit (); m_pDecor->TerminatedInit (); - m_bChangeCheat = true; // affiche les cheat-codes } if (m_phase == EV_PHASE_BUILD) @@ -3251,7 +3294,7 @@ CEvent::ChangePhase (Uint32 phase) { music = m_pDecor->GetMusic (); - for (i = 0; i < 10; i++) + for (i = 0; i < 11; i++) SetState (EV_BUTTON1 + i, music == i ? 1 : 0); } @@ -3342,15 +3385,16 @@ CEvent::TryInsert () // Fait démarrer un film si nécessaire. -void +bool CEvent::MovieToStart () { + bool movie = false; + if (m_movieToStart[0] != 0) // y a-t-il un film à démarrer ? { - HideMouse (true); // cache la souris - if (StartMovie (m_movieToStart)) { + movie = true; m_phase = m_phaseAfterMovie; // prochaine phase normale } else @@ -3358,6 +3402,8 @@ CEvent::MovieToStart () m_movieToStart[0] = 0; } + + return movie; } // Décale le décor. @@ -3650,6 +3696,8 @@ CEvent::GetStartLanguage () return Language::fr; if (this->m_LangStart == "de") return Language::de; + if (this->m_LangStart == "it") + return Language::it; if (this->m_LangStart == "pl") return Language::pl; return Language::en; @@ -3686,6 +3734,9 @@ CEvent::SetLanguage (Language lang) case Language::de: slang = "de"; break; + case Language::it: + slang = "it"; + break; case Language::pl: slang = "pl"; break; @@ -3702,31 +3753,6 @@ CEvent::SetLanguage (Language lang) SDL_SetWindowTitle (g_window, gettext ("Planet Blupi")); m_pSound->CacheAll (); - - Point totalDim, iconDim; - totalDim.x = DIMTEXTX * 16; - totalDim.y = DIMTEXTY * 8 * 3; - iconDim.x = DIMTEXTX; - iconDim.y = DIMTEXTY; - std::string text_filename = "image/text.png"; - if (GetLocale() == "pl") - text_filename = "image/text_pl.png"; - if (!m_pPixmap->Cache (CHTEXT, text_filename, totalDim, iconDim)) - { - printf ("Error (Cache text.png)"); - } - - totalDim.x = DIMLITTLEX * 16; - totalDim.y = DIMLITTLEY * 8; - iconDim.x = DIMLITTLEX; - iconDim.y = DIMLITTLEY; - std::string little_filename = "image/little.png"; - if (GetLocale() == "pl") - little_filename = "image/little_pl.png"; - if (!m_pPixmap->Cache (CHLITTLE, little_filename, totalDim, iconDim)) - { - printf ("Error (Cache little.png)"); - } } // Clic dans un bouton. @@ -4227,8 +4253,6 @@ CEvent::BuildMove (Point pos, Uint16 mod, const SDL_Event & event) bool CEvent::StartMovie (const std::string & pFilename) { - Rect rect; - if (!m_pMovie->GetEnable ()) return false; if (!m_bMovie) @@ -4237,15 +4261,12 @@ CEvent::StartMovie (const std::string & pFilename) if (!m_pMovie->IsExist (pFilename)) return false; - rect.left = 1; // mystère: plante avec 0,0,LXIMAGE,LYIMAGE !!! - rect.top = 1; - rect.right = LXIMAGE - 2; - rect.bottom = LYIMAGE - 2; - + HideMouse (true); m_pSound->StopMusic (); - if (!m_pMovie->Play (rect, pFilename)) + if (!m_pMovie->Play (pFilename)) return false; + m_bRunMovie = true; return true; } @@ -5097,42 +5118,36 @@ CEvent::TreatEventBase (const SDL_Event & event) { m_bAllMissions = !m_bAllMissions; bEnable = m_bAllMissions; - m_bChangeCheat = true; break; } case 4: // quick ? { m_bSpeed = !m_bSpeed; bEnable = m_bSpeed; - m_bChangeCheat = true; break; } case 5: // helpme ? { m_bHelp = !m_bHelp; bEnable = m_bHelp; - m_bChangeCheat = true; break; } case 6: // invincible ? { m_pDecor->SetInvincible (!m_pDecor->GetInvincible ()); bEnable = m_pDecor->GetInvincible (); - m_bChangeCheat = true; break; } case 7: // superblupi ? { m_pDecor->SetSuper (!m_pDecor->GetSuper ()); bEnable = m_pDecor->GetSuper (); - m_bChangeCheat = true; break; } case 8: // construire ? { m_bAccessBuild = !m_bAccessBuild; bEnable = m_bAccessBuild; - m_bChangeCheat = true; break; } } @@ -5196,6 +5211,9 @@ CEvent::TreatEventBase (const SDL_Event & event) return true; case EV_PHASE_STOP: + ChangePhase (EV_PHASE_PLAY); + return true; + case EV_PHASE_LOST: case EV_PHASE_BUILD: ChangePhase (EV_PHASE_INFO); @@ -5301,6 +5319,9 @@ CEvent::TreatEventBase (const SDL_Event & event) m_pDecor->FlipOutline (); return true; case SDLK_PAUSE: + if (this->m_pDecor->GetSkill () >= 1) + return true; + m_bPause = !m_bPause; if (m_phase == EV_PHASE_PLAY) { diff --git a/src/event.h b/src/event.h index 4ee4ef6..95aa53a 100644 --- a/src/event.h +++ b/src/event.h @@ -81,7 +81,9 @@ enum class Language { en_US = 1, fr = 2, de = 3, - pl = 4, + it = 4, + // Left some space for Korean and Hebrew as I think original translations should be first, see issue #23 + pl = 7, }; class CEvent @@ -99,7 +101,7 @@ public: Sint32 GetImageWorld (); bool IsHelpHide (); bool ChangePhase (Uint32 phase); - void MovieToStart (); + bool MovieToStart (); Uint32 GetPhase (); void TryInsert (); @@ -141,6 +143,7 @@ public: void IntroStep (); Uint8 GetWindowScale (); + void SetWindowSize (Uint8 newScale); void SetUpdateVersion (const std::string & version); static void PushUserEvent (Sint32 code, void * data = nullptr); @@ -237,7 +240,6 @@ protected: bool m_bSpeed; bool m_bHelp; bool m_bAllMissions; - bool m_bChangeCheat; Sint32 m_scrollSpeed; bool m_bPause; bool m_bShift; diff --git a/src/fix.cxx b/src/fix.cxx index 69b8613..3230941 100644 --- a/src/fix.cxx +++ b/src/fix.cxx @@ -628,76 +628,77 @@ CDecor::ArrangeObject (Point cel) } } - // Arrange les rayons entre les tours. if ( - m_decor[cel.x / 2][cel.y / 2].objectIcon == 27 || // tour ? - m_decor[cel.x / 2][cel.y / 2].objectIcon == -1) // rien ? + g_restoreBugs && + (m_decor[cel.x / 2][cel.y / 2].objectIcon != 27 && // not a tower? + m_decor[cel.x / 2][cel.y / 2].objectIcon != -1)) + return; + + // Arrange les rayons entre les tours. + for (i = 0; i < 4; i++) { - for (i = 0; i < 4; i++) + vector = GetVector (i * 2 * 16); + test = cel; + + bTour = false; + j = 0; + while (true) { - vector = GetVector (i * 2 * 16); - test = cel; + test.x += vector.x * 2; + test.y += vector.y * 2; + if (m_decor[test.x / 2][test.y / 2].objectIcon == 27) // tour ? + { + bTour = true; + break; + } + + if ( + m_decor[test.x / 2][test.y / 2].objectIcon != -1 && + m_decor[test.x / 2][test.y / 2].objectIcon != 10001 - i % 2) + break; + + j++; + if (j >= 2 + 1) + break; + } + + if (m_decor[cel.x / 2][cel.y / 2].objectIcon != 27) // pas tour ? bTour = false; - j = 0; - while (true) - { - test.x += vector.x * 2; - test.y += vector.y * 2; - if (m_decor[test.x / 2][test.y / 2].objectIcon == 27) // tour ? + test = cel; + for (k = 0; k < j; k++) + { + test.x += vector.x * 2; + test.y += vector.y * 2; + + if (bTour) + { + channel = CHOBJECT; + icon = 10001 - i % 2; // rayon e-o (10001) ou n-s (10000) + } + else + { + channel = -1; + icon = -1; + } + m_decor[test.x / 2][test.y / 2].objectChannel = channel; + m_decor[test.x / 2][test.y / 2].objectIcon = icon; + + if (!m_bBuild && bTour) + { + if (MoveCreate ( + test, -1, false, CHOBJECT, -1, -1, -1, 9999, 1, 0, true)) { - bTour = true; - break; + MoveAddIcons (test, 5 - i % 2, true); // éclairs } - if ( - m_decor[test.x / 2][test.y / 2].objectIcon != -1 && - m_decor[test.x / 2][test.y / 2].objectIcon != 10001 - i % 2) - break; - - j++; - if (j >= 2 + 1) - break; + pos = ConvCelToPos (test); + m_pSound->PlayImage (SOUND_RAYON1, pos); } - if (m_decor[cel.x / 2][cel.y / 2].objectIcon != 27) // pas tour ? - bTour = false; - - test = cel; - for (k = 0; k < j; k++) - { - test.x += vector.x * 2; - test.y += vector.y * 2; - - if (bTour) - { - channel = CHOBJECT; - icon = 10001 - i % 2; // rayon e-o (10001) ou n-s (10000) - } - else - { - channel = -1; - icon = -1; - } - m_decor[test.x / 2][test.y / 2].objectChannel = channel; - m_decor[test.x / 2][test.y / 2].objectIcon = icon; - - if (!m_bBuild && bTour) - { - if (MoveCreate ( - test, -1, false, CHOBJECT, -1, -1, -1, 9999, 1, 0, true)) - { - MoveAddIcons (test, 5 - i % 2, true); // éclairs - } - - pos = ConvCelToPos (test); - m_pSound->PlayImage (SOUND_RAYON1, pos); - } - - if (!m_bBuild && !bTour) - MoveFinish (test); - } + if (!m_bBuild && !bTour) + MoveFinish (test); } } } diff --git a/src/movie.cxx b/src/movie.cxx index d4c7feb..a7172bf 100644 --- a/src/movie.cxx +++ b/src/movie.cxx @@ -90,7 +90,7 @@ CMovie::fileCloseMovie () // Sets on success. bool -CMovie::fileOpenMovie (Rect rect, const std::string & pFilename) +CMovie::fileOpenMovie (const std::string & pFilename) { const auto path = GetBaseDir () + pFilename; @@ -108,21 +108,22 @@ CMovie::fileOpenMovie (Rect rect, const std::string & pFilename) if (m_player == nullptr) return false; - pinfo = new Kit_PlayerInfo; - Kit_GetPlayerInfo (m_player, pinfo); + Kit_PlayerInfo info; + Kit_GetPlayerInfo (m_player, &info); SDL_AudioSpec wanted_spec, audio_spec; SDL_memset (&wanted_spec, 0, sizeof (wanted_spec)); - wanted_spec.freq = pinfo->audio.samplerate; - wanted_spec.format = pinfo->audio.format; - wanted_spec.channels = pinfo->audio.channels; + wanted_spec.freq = info.audio.samplerate; + wanted_spec.format = info.audio.format; + wanted_spec.channels = info.audio.channels; m_audioDev = SDL_OpenAudioDevice (nullptr, 0, &wanted_spec, &audio_spec, 0); SDL_PauseAudioDevice (m_audioDev, 0); m_videoTex = SDL_CreateTexture ( - g_renderer, pinfo->video.format, SDL_TEXTUREACCESS_STATIC, - pinfo->video.width, pinfo->video.height); + g_renderer, info.video.format, SDL_TEXTUREACCESS_TARGET, info.video.width, + info.video.height); + if (m_videoTex == nullptr) return false; @@ -145,7 +146,10 @@ CMovie::playMovie () // play/pause the AVI movie if (m_fPlaying) + { + this->starting = true; Kit_PlayerPlay (m_player); + } else Kit_PlayerPause (m_player); } @@ -159,7 +163,6 @@ CMovie::CMovie () m_movie = nullptr; m_player = nullptr; m_videoTex = nullptr; - pinfo = nullptr; memset (m_audiobuf, 0, sizeof (m_audiobuf)); @@ -207,11 +210,12 @@ CMovie::IsExist (const std::string & pFilename) // Montre un film avi. bool -CMovie::Play (Rect rect, const std::string & pFilename) +CMovie::Play (const std::string & pFilename) { if (!m_bEnable) return false; - if (!fileOpenMovie (rect, pFilename)) + + if (!fileOpenMovie (pFilename)) return false; playMovie (); @@ -289,6 +293,15 @@ CMovie::Render () SDL_SetRenderDrawColor (g_renderer, 0, 0, 0, 255); SDL_RenderClear (g_renderer); + if (this->starting) + { + SDL_SetRenderTarget (g_renderer, m_videoTex); + SDL_SetRenderDrawColor (g_renderer, 0, 0, 0, 255); + SDL_RenderClear (g_renderer); + SDL_SetRenderTarget (g_renderer, nullptr); + this->starting = false; + } + // Refresh videotexture and render it Kit_GetVideoData (m_player, m_videoTex); SDL_RenderCopy (g_renderer, m_videoTex, nullptr, nullptr); diff --git a/src/movie.h b/src/movie.h index d10b410..bd9098f 100644 --- a/src/movie.h +++ b/src/movie.h @@ -38,7 +38,7 @@ public: bool Create (); bool GetEnable (); bool IsExist (const std::string & pFilename); - bool Play (Rect rect, const std::string & pFilename); + bool Play (const std::string & pFilename); void Stop (); void Pause (); void Resume (); @@ -46,13 +46,12 @@ public: protected: void playMovie (); - bool fileOpenMovie (Rect rect, const std::string & pFilename); + bool fileOpenMovie (const std::string & pFilename); void fileCloseMovie (); void termAVI (); bool initAVI (); protected: - Kit_PlayerInfo * pinfo; Kit_Source * m_movie; Kit_Player * m_player; SDL_Texture * m_videoTex; @@ -61,6 +60,7 @@ protected: char m_audiobuf[AUDIOBUFFER_SIZE]; bool m_bEnable; + bool starting; bool m_fPlaying; // Play flag: true == playing, false == paused bool m_fMovieOpen; // Open flag: true == movie open, false = none }; diff --git a/src/obstacle.cxx b/src/obstacle.cxx index 5ac5f3c..15ad199 100644 --- a/src/obstacle.cxx +++ b/src/obstacle.cxx @@ -2228,17 +2228,17 @@ CDecor::DirectSearch (Point cel, Point goal) { if (dir.y > 0) { - direct = DIRECT_SO; + direct = DIRECT_SW; if (tan < 41) - direct = DIRECT_O; + direct = DIRECT_W; if (tan > 241) direct = DIRECT_S; } else { - direct = DIRECT_NO; + direct = DIRECT_NW; if (tan < 41) - direct = DIRECT_O; + direct = DIRECT_W; if (tan > 241) direct = DIRECT_N; } @@ -3724,7 +3724,7 @@ CDecor::IsBuildBateau (Point cel, Sint32 & direct) fChannel == CHFLOOR && fIcon == 4 && // rivage ? oChannel == -1 && oIcon == -1) { - direct = DIRECT_O; + direct = DIRECT_W; return true; } diff --git a/src/pixmap.cxx b/src/pixmap.cxx index 23c6c1c..52b8a5e 100644 --- a/src/pixmap.cxx +++ b/src/pixmap.cxx @@ -373,8 +373,7 @@ CPixmap::IsIconPixel (size_t channel, Sint32 rank, Point pos) // Les modes sont 0=transparent, 1=opaque. bool -CPixmap::DrawIcon ( - Sint32 chDst, size_t channel, Sint32 rank, Point pos, bool bMask) +CPixmap::DrawIcon (Sint32 chDst, size_t channel, Sint32 rank, Point pos) { Sint32 nbx, nby; Rect rect; @@ -411,8 +410,7 @@ CPixmap::DrawIcon ( // 33,48 35,49 bool -CPixmap::DrawIconDemi ( - Sint32 chDst, size_t channel, Sint32 rank, Point pos, bool bMask) +CPixmap::DrawIconDemi (Sint32 chDst, size_t channel, Sint32 rank, Point pos) { Sint32 nbx, nby; Rect rect; @@ -445,7 +443,7 @@ CPixmap::DrawIconDemi ( bool CPixmap::DrawIconPart ( Sint32 chDst, size_t channel, Sint32 rank, Point pos, Sint32 startY, - Sint32 endY, bool bMask) + Sint32 endY) { Sint32 nbx, nby; Rect rect; @@ -477,8 +475,7 @@ CPixmap::DrawIconPart ( // Dessine une partie d'image n'importe o�. bool -CPixmap::DrawPart ( - Sint32 chDst, size_t channel, Point dest, Rect rect, bool bMask) +CPixmap::DrawPart (Sint32 chDst, size_t channel, Point dest, Rect rect) { if (m_SDLTextureInfo.find (channel) == m_SDLTextureInfo.end ()) return false; @@ -770,7 +767,7 @@ CPixmap::GetCursorRect (MouseSprites sprite) } void -CPixmap::LoadCursors () +CPixmap::LoadCursors (Uint8 scale) { Uint32 rmask, gmask, bmask, amask; @@ -791,16 +788,20 @@ on the endianness (byte order) of the machine */ for (int i = SPRITE_BEGIN; i <= SPRITE_END; ++i) { MouseSprites sprite = static_cast (i); + + if (m_lpSDLCursors[sprite - 1]) + SDL_FreeCursor (m_lpSDLCursors[sprite - 1]); + SDL_Point hotspot = this->GetCursorHotSpot (sprite); SDL_Rect rect = this->GetCursorRect (sprite); - SDL_Surface * surface = - SDL_CreateRGBSurface (0, rect.w, rect.h, 32, rmask, gmask, bmask, amask); - SDL_BlitSurface (m_lpSDLBlupi, &rect, surface, nullptr); + SDL_Surface * surface = SDL_CreateRGBSurface ( + 0, rect.w * scale, rect.h * scale, 32, rmask, gmask, bmask, amask); + SDL_BlitScaled (m_lpSDLBlupi, &rect, surface, nullptr); // FIXME: change cursor first value to 0 m_lpSDLCursors[sprite - 1] = - SDL_CreateColorCursor (surface, hotspot.x, hotspot.y); + SDL_CreateColorCursor (surface, hotspot.x * scale, hotspot.y * scale); SDL_FreeSurface (surface); } } diff --git a/src/pixmap.h b/src/pixmap.h index 0777281..4f0950b 100644 --- a/src/pixmap.h +++ b/src/pixmap.h @@ -66,15 +66,12 @@ public: bool IsIconPixel (size_t channel, Sint32 rank, Point pos); - bool DrawIcon ( - Sint32 chDst, size_t channel, Sint32 rank, Point pos, bool bMask = false); - bool DrawIconDemi ( - Sint32 chDst, size_t channel, Sint32 rank, Point pos, bool bMask = false); + bool DrawIcon (Sint32 chDst, size_t channel, Sint32 rank, Point pos); + bool DrawIconDemi (Sint32 chDst, size_t channel, Sint32 rank, Point pos); bool DrawIconPart ( Sint32 chDst, size_t channel, Sint32 rank, Point pos, Sint32 startY, - Sint32 endY, bool bMask = false); - bool DrawPart ( - Sint32 chDst, size_t channel, Point dest, Rect rect, bool bMask = false); + Sint32 endY); + bool DrawPart (Sint32 chDst, size_t channel, Point dest, Rect rect); bool DrawImage (Sint32 chDst, size_t channel, Rect rect); bool BuildIconMask ( @@ -85,7 +82,7 @@ public: void SetMouseSprite (MouseSprites sprite); void MouseShow (bool bShow); - void LoadCursors (); + void LoadCursors (Uint8 scale); void ChangeSprite (MouseSprites sprite); protected: diff --git a/src/progress.cxx b/src/progress.cxx index b464b7d..6b131aa 100644 --- a/src/progress.cxx +++ b/src/progress.cxx @@ -72,7 +72,7 @@ CJauge::Draw () rect.right = m_pos.x + m_dim.x; rect.top = m_pos.y; rect.bottom = m_pos.y + m_dim.y; - m_pPixmap->DrawPart (-1, CHBACK, m_pos, rect, 1); // dessine le fond + m_pPixmap->DrawPart (-1, CHBACK, m_pos, rect); // dessine le fond return; } diff --git a/src/sound.cxx b/src/sound.cxx index 676545e..7040dee 100644 --- a/src/sound.cxx +++ b/src/sound.cxx @@ -28,13 +28,16 @@ // Stops all sounds. bool -CSound::StopAllSounds (bool immediat) +CSound::StopAllSounds (bool immediat, const std::set * except) { for (Sint32 i = 0; i < MAXSOUND; i++) { if (!m_lpSDL[i]) continue; + if (except && except->find (i) != except->end ()) + continue; + if (Mix_Playing (i + 1) == SDL_TRUE) { if (immediat) diff --git a/src/sound.h b/src/sound.h index e238b2a..1237c37 100644 --- a/src/sound.h +++ b/src/sound.h @@ -20,11 +20,13 @@ #pragma once -#include +#include #include #include #include +#include + #include "blupi.h" #define MAXSOUND 100 @@ -63,7 +65,7 @@ public: bool IsStoppedOnDemand (); void AdaptVolumeMusic (); void SetSuspendSkip (Sint32 nb); - bool StopAllSounds (bool immediat); + bool StopAllSounds (bool immediat, const std::set * except = nullptr); protected: bool m_bState; @@ -78,5 +80,3 @@ protected: Sint32 m_lastMidiVolume; Sint32 m_nbSuspendSkip; }; - -///////////////////////////////////////////////////////////////////////////// diff --git a/src/text.cxx b/src/text.cxx index 6b1d1f4..f51d95f 100644 --- a/src/text.cxx +++ b/src/text.cxx @@ -35,22 +35,25 @@ static Sint32 GetOffset (const char *& c) { + /* clang-format off */ static const unsigned char table_accents[] = { - /* ü à â é è ë ê ï */ - /* 0xFC, 0xE0, 0xE2, 0xE9, 0xE8, 0xEB, 0xEA, 0xEF, // CP1252 */ - 0xBC, 0xA0, 0xA2, 0xA9, 0xA8, 0xAB, 0xAA, 0xAF, // UTF-8 - /* î ô ù û ä ö ç */ - /* 0xEE, 0xF4, 0xF9, 0xFB, 0xE4, 0xF6, 0xE7, // CP1252 */ - 0xAE, 0xB4, 0xB9, 0xBB, 0xA4, 0xB6, 0xA7, // UTF-8 + /* ü à â é è ë ê ï */ + 0xBC, 0xA0, 0xA2, 0xA9, 0xA8, 0xAB, 0xAA, 0xAF, /* UTF-8 */ + /* î ô ù û ä ö ç */ + 0xAE, 0xB4, 0xB9, 0xBB, 0xA4, 0xB6, 0xA7, /* UTF-8 */ }; - static const unsigned char table_accents_pl[] = { - /* Polish */ - /* ń * ó ę * ć * * */ - 0x84, 0xFF, 0xB3, 0x99, 0xFF, 0x87, 0xFF, 0xFF, // UTF-8 - /* ź ż * * ą ł ś */ - 0xBA, 0xBC, 0xFF, 0xFF, 0x85, 0x82, 0x9B, // UTF-8 + static const unsigned char table_extended[] = { + /* Italian */ + /* ò ì */ + 0xB2, 0xAC, /* UTF-8 */ + /* Polish */ + /* ń ó ę ć ź ż */ + 0x84, 0xB3, 0x99, 0x87, 0xBA, 0xBC, /* UTF-8 */ + /* ą ł ś */ + 0x85, 0x82, 0x9B, /* UTF-8 */ }; + /* clang-format on */ if (static_cast (*c) == 0xC3) c++; @@ -59,21 +62,20 @@ GetOffset (const char *& c) if (static_cast (*c) == 0xC5) c++; - if(GetLocale() == "pl") { - for (unsigned int i = 0; i < countof (table_accents_pl); ++i) - { - if ((unsigned char) *c == table_accents_pl[i]) - return 15 + i; - } - } - else + if (GetLocale() != "pl") { + // Do not use the 'standard' accents table with Polish locale + // This is required because we check only last byte of UTF-8 and some characters overlap + // TODO: In the future, this ugly hack should be replaced with proper UTF-8 parsing for (unsigned int i = 0; i < countof (table_accents); ++i) - { if ((unsigned char) *c == table_accents[i]) return 15 + i; - } } + + for (unsigned int i = 0; i < countof (table_extended); ++i) + if ((unsigned char) *c == table_extended[i]) + return 127 + i; + if (*c < 0) return 1; // square @@ -100,7 +102,8 @@ GetCharWidth (const char *& c, Sint32 font) 12, 8, 9, 9, 9, 8, 8, 8, 9, 4, 8, 9, 8, 10, 9, 9, 8, 9, 8, 9, 10, 8, 9, 11, 9, 8, 10, 7, 10, 7, 13, 13, 9, 9, 8, 8, 8, 8, 6, 8, 8, 4, 6, 8, 4, 12, 8, 8, - 8, 8, 7, 6, 7, 8, 8, 10, 8, 8, 7, 6, 6, 6, 10, 0, + 8, 8, 7, 6, 7, 8, 8, 10, 8, 8, 7, 6, 6, 6, 10, 8, + 5, 8, 8, 8, 8, 8, 7, 9, 6, 7 }; static const unsigned char table_width_little[] = @@ -112,7 +115,8 @@ GetCharWidth (const char *& c, Sint32 font) 9, 8, 6, 7, 7, 5, 5, 8, 7, 2, 4, 7, 5, 10, 7, 8, 6, 8, 7, 6, 6, 6, 8, 12, 7, 6, 6, 3, 5, 3, 6, 8, 4, 6, 6, 6, 6, 6, 4, 6, 6, 2, 3, 5, 2, 10, 6, 6, - 6, 6, 3, 5, 3, 6, 6, 8, 6, 6, 5, 4, 6, 4, 7, 0, + 6, 6, 3, 5, 3, 6, 6, 8, 6, 6, 5, 4, 6, 4, 7, 6, + 3, 5, 5, 5, 5, 4, 4, 6, 3, 4 }; // clang-format on @@ -141,7 +145,7 @@ DrawText (CPixmap * pPixmap, Point pos, const char * pText, Sint32 font) if (font != FONTLITTLE) { - rank += 128 * font; + rank += (128 + 16) * font; pPixmap->DrawIcon (-1, CHTEXT, rank, pos); } else @@ -165,7 +169,7 @@ DrawTextPente ( while (*pText != 0) { rank = GetOffset (pText); - rank += 128 * font; + rank += (128 + 16) * font; pPixmap->DrawIcon (-1, CHTEXT, rank, pos); lg = GetCharWidth (pText, font);