From e8c753c50afec1cef535f60f9b55edc5d5445bec Mon Sep 17 00:00:00 2001 From: "p.kosyh" Date: Wed, 26 Aug 2009 05:25:53 +0000 Subject: [PATCH] 0.8.5 version --- Makefile | 3 +- Makefile.windows | 18 + Rules.make | 2 +- Rules.make.standalone | 16 +- Rules.make.system | 16 +- Rules.windows | 30 + configure.bat | 1 + debian/README.Debian | 6 + debian/changelog | 99 ++ debian/changelog.txt | 21 + debian/compat | 1 + debian/control | 14 + debian/copyright | 24 + debian/cron.d.ex | 4 + debian/docs | 2 + debian/rules | 100 ++ desktop/Makefile | 14 + desktop/Makefile.windows | 3 + desktop/instead.desktop.in | 13 + doc/Makefile | 7 + doc/Makefile.windows | 8 + doc/index.html | 7 +- doc/writing_games.txt | 964 +++++++++++++++++++ games/Makefile | 2 +- games/Makefile.windows | 11 + games/cat/ep1.lua | 24 +- games/cat/ep2.lua | 46 +- games/cat/ep3.lua | 42 +- games/cat/main.lua | 3 +- games/tutorial/main.lua | 35 +- games/tutorial/ramparts.mod | Bin 0 -> 22664 bytes games/tutorial/stead.png | Bin 0 -> 14611 bytes icon/Makefile | 7 + icon/Makefile.windows | 5 + icon/book16x16.ico | Bin 0 -> 1150 bytes icon/sdl_instead.ico | Bin 0 -> 2462 bytes icon/sdl_instead.png | Bin 0 -> 21505 bytes readme.txt | 35 +- src/instead/Makefile | 2 +- src/instead/copying | 340 +++++++ src/instead/rline.c | 8 +- src/instead/tutorial/main.lua | 3 +- src/sdl-instead/Makefile | 19 +- src/sdl-instead/SDL_rotozoom.c | 1355 ++++++++++++++++++++++++++ src/sdl-instead/SDL_rotozoom.h | 117 +++ src/sdl-instead/copying | 340 +++++++ src/sdl-instead/game.c | 1620 ++++++++++++++++++++++++-------- src/sdl-instead/game.h | 43 +- src/sdl-instead/graphics.c | 567 ++++------- src/sdl-instead/graphics.h | 6 +- src/sdl-instead/gui.h | 9 +- src/sdl-instead/input.c | 56 +- src/sdl-instead/input.h | 6 + src/sdl-instead/instead.c | 109 ++- src/sdl-instead/instead.h | 1 + src/sdl-instead/main.c | 55 +- src/sdl-instead/menu-en.h | 103 ++ src/sdl-instead/menu.h | 105 +++ src/sdl-instead/resources.rc | 1 + src/sdl-instead/sound.c | 130 ++- src/sdl-instead/sound.h | 8 +- src/sdl-instead/unix.c | 91 ++ src/sdl-instead/windows.c | 89 ++ stead/Makefile.windows | 6 + stead/copying | 340 +++++++ stead/stead.lua | 618 ++++++++---- themes/Makefile | 2 +- themes/Makefile.windows | 7 + themes/book/book.png | Bin 0 -> 504420 bytes themes/book/theme.ini | 33 + themes/default-large/theme.ini | 8 + themes/default/click.ogg | Bin 0 -> 5637 bytes themes/default/click.wav | Bin 0 -> 14136 bytes themes/default/theme.ini | 31 +- themes/original/theme.ini | 7 + 75 files changed, 6674 insertions(+), 1144 deletions(-) create mode 100644 Makefile.windows create mode 100644 Rules.windows create mode 100644 configure.bat create mode 100644 debian/README.Debian create mode 100644 debian/changelog create mode 100644 debian/changelog.txt create mode 100644 debian/compat create mode 100644 debian/control create mode 100644 debian/copyright create mode 100644 debian/cron.d.ex create mode 100644 debian/docs create mode 100755 debian/rules create mode 100644 desktop/Makefile create mode 100644 desktop/Makefile.windows create mode 100644 desktop/instead.desktop.in create mode 100644 doc/Makefile create mode 100644 doc/Makefile.windows create mode 100644 doc/writing_games.txt create mode 100644 games/Makefile.windows create mode 100644 games/tutorial/ramparts.mod create mode 100644 games/tutorial/stead.png create mode 100644 icon/Makefile create mode 100644 icon/Makefile.windows create mode 100644 icon/book16x16.ico create mode 100644 icon/sdl_instead.ico create mode 100644 icon/sdl_instead.png create mode 100644 src/instead/copying create mode 100644 src/sdl-instead/SDL_rotozoom.c create mode 100644 src/sdl-instead/SDL_rotozoom.h create mode 100644 src/sdl-instead/copying create mode 100644 src/sdl-instead/menu-en.h create mode 100644 src/sdl-instead/menu.h create mode 100644 src/sdl-instead/resources.rc create mode 100644 src/sdl-instead/unix.c create mode 100644 src/sdl-instead/windows.c create mode 100644 stead/Makefile.windows create mode 100644 stead/copying create mode 100644 themes/Makefile.windows create mode 100644 themes/book/book.png create mode 100644 themes/book/theme.ini create mode 100644 themes/default-large/theme.ini create mode 100644 themes/default/click.ogg create mode 100644 themes/default/click.wav create mode 100644 themes/original/theme.ini diff --git a/Makefile b/Makefile index d464203..d56dd76 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,5 @@ -SUBDIRS = src/instead src/sdl-instead stead games themes +#SUBDIRS = src/sdl-instead stead games themes icon desktop doc +SUBDIRS = src/sdl-instead stead games themes icon desktop doc all: @for dir in $(SUBDIRS); do \ diff --git a/Makefile.windows b/Makefile.windows new file mode 100644 index 0000000..26ff06e --- /dev/null +++ b/Makefile.windows @@ -0,0 +1,18 @@ +MAKE=mingw32-make + +all: + $(MAKE) -C src\sdl-instead all + $(MAKE) -C themes -f Makefile.windows all +clean: + $(MAKE) -C src\sdl-instead clean + +install: all + if not exist bin mkdir bin + copy src\sdl-instead\sdl-instead.exe bin + $(MAKE) -C themes -f Makefile.windows install + $(MAKE) -C games -f Makefile.windows install + $(MAKE) -C stead -f Makefile.windows install + $(MAKE) -C icon -f Makefile.windows install + $(MAKE) -C doc -f Makefile.windows install + + diff --git a/Rules.make b/Rules.make index ea604df..d0f4e26 120000 --- a/Rules.make +++ b/Rules.make @@ -1 +1 @@ -Rules.make.system \ No newline at end of file +Rules.make.standalone \ No newline at end of file diff --git a/Rules.make.standalone b/Rules.make.standalone index b79aef5..2da57e7 100644 --- a/Rules.make.standalone +++ b/Rules.make.standalone @@ -1,23 +1,29 @@ -VERSION := \"0.7\" +VERSION := \"0.8.5\" DESTDIR= BIN= STEADPATH=./stead THEMESPATH=./themes GAMESPATH=./games +ICONPATH=./icon LUA_CFLAGS=$(shell pkg-config --cflags lua5.1) LUA_LFLAGS=$(shell pkg-config --libs lua5.1) -# for arch linux use this +# for arch linux (may be others) use this # -#LUA_CFLAGS=$(shell pkg-config --cflags lua) -#LUA_LFLAGS=$(shell pkg-config --libs lua) +# LUA_CFLAGS=$(shell pkg-config --cflags lua) +# LUA_LFLAGS=$(shell pkg-config --libs lua) # SDL_CFLAGS=$(shell sdl-config --cflags) SDL_LFLAGS=$(shell sdl-config --libs) -lSDL_ttf -lSDL_mixer -lSDL_image -CFLAGS += -g -Wall -DHAVE_ICONV -DRUSSIAN +CFLAGS += -g -Wall -D_HAVE_ICONV -DRUSSIAN +INSTALLD=echo +INSTALL=echo +EXE= +PLATFORM=unix.c +RESOURCES= diff --git a/Rules.make.system b/Rules.make.system index 3f991cf..5f7ff96 100644 --- a/Rules.make.system +++ b/Rules.make.system @@ -1,10 +1,11 @@ -VERSION := \"0.7.4\" +VERSION := \"0.8.5\" DESTDIR=/usr/local -BIN=$(DESTDIR)/bin +BIN=$(DESTDIR)/bin/ STEADPATH=$(DESTDIR)/share/stead -THEMESPATH=$(DESTDIR)/share/stead/themes -GAMESPATH=$(DESTDIR)/share/stead/games +THEMESPATH=$(STEADPATH)/themes +GAMESPATH=$(STEADPATH)/games +ICONPATH=$(DESTDIR)/share/pixmaps LUA_CFLAGS=$(shell pkg-config --cflags lua5.1) LUA_LFLAGS=$(shell pkg-config --libs lua5.1) @@ -18,6 +19,11 @@ LUA_LFLAGS=$(shell pkg-config --libs lua5.1) SDL_CFLAGS=$(shell sdl-config --cflags) SDL_LFLAGS=$(shell sdl-config --libs) -lSDL_ttf -lSDL_mixer -lSDL_image -CFLAGS += -Wall -DHAVE_ICONV -DRUSSIAN +CFLAGS += -Wall -D_HAVE_ICONV -DRUSSIAN +INSTALLD=install -d -m 0775 +INSTALL=install -m 0775 +EXE= +PLATFORM=unix.c +RESOURCES= diff --git a/Rules.windows b/Rules.windows new file mode 100644 index 0000000..578359b --- /dev/null +++ b/Rules.windows @@ -0,0 +1,30 @@ +VERSION := \"0.8.5\" + +DESTDIR= +BIN=..\..\bin\\ + +STEADPATH=./stead +THEMESPATH=./themes/ +GAMESPATH=./games +ICONPATH=./icon + +LUA_CFLAGS= +LUA_LFLAGS=-llua5.1 + +SDL_CFLAGS=-IC:\MinGW\include\SDL +SDL_LFLAGS=-lSDL -lSDLmain -lSDL_ttf -lSDL_mixer -lSDL_image + +CFLAGS += -Wall -DRUSSIAN -mwindows -D_HAVE_ICONV +LDFLAGS += -liconv + +CC=gcc +RM=del +EXE=.exe + +INSTALLD=echo mkdir +INSTALL=copy +PLATFORM=windows.c +RESOURCES=resources.o + +resources.o: resources.rc + windres -i resources.rc -o resources.o diff --git a/configure.bat b/configure.bat new file mode 100644 index 0000000..672502a --- /dev/null +++ b/configure.bat @@ -0,0 +1 @@ +copy Rules.windows Rules.make diff --git a/debian/README.Debian b/debian/README.Debian new file mode 100644 index 0000000..3b9b9c5 --- /dev/null +++ b/debian/README.Debian @@ -0,0 +1,6 @@ +instead for Debian +------------------ + + + + -- Peter Kosyh Thu, 21 May 2009 11:40:29 +0400 diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..9f8492a --- /dev/null +++ b/debian/changelog @@ -0,0 +1,99 @@ +instead (0.8.5) unstable; urgency=low + + * possible segfaults in timer functions. + * ways, objs, drop, take - extra parameters + * put - function + * set_music fixes + + -- Peter Kosyh Thu, 24 Aug 2009 08:32:00 +0400 + +instead (0.8.4) unstable; urgency=low + + * bug in savevar + * bug in long strings + + -- Peter Kosyh Thu, 20 Aug 2009 14:09:14 +0400 + +instead (0.8.3) unstable; urgency=low + + * sge forgotten + * set_music with loop argument bug + + -- Peter Kosyh Wed, 19 Aug 2009 14:09:14 +0400 + +instead (0.8.2) unstable; urgency=low + + * gfx_load_img + + -- Peter Kosyh Sat, 15 Aug 2009 14:09:14 +0400 + +instead (0.8) unstable; urgency=low + + * key_name attribute!!!! + * do_ini + * version in stead.lua + * opairs!!! + * vroom fix + * typos + * backtrace + * list_set + + -- Peter Kosyh Fri, 07 Aug 2009 14:09:14 +0400 + +instead (0.7.7-4) unstable; urgency=low + + * Fixes :) + + -- Peter Kosyh Wed, 05 Aug 2009 17:26:55 +0400 + +instead (0.7.7) unstable; urgency=low + + * typos in games + * local games now can be placed in ~/.instead/games + * console version disabled by default + * -- $Name: tag -- full name of games, not only dirname + * fix of link color for title/ways + * bug in text layout logic (last period in line) + * embedded mode (picture and ways inside text!!!) + * float mode (for books) + * faster text renderer (x2-x5 times) + * free motion mode of scrolling + * click sound support in themes (in default theme too) + * new options (click sound, music) + * default theme changes + * fullscreen with Alt-Enter + * options -alsa, -fullscreen, -window + * now italic font used for events + * 48000Hz added in sound preferences + * now scroll position is saved in embedded mode + * themes support, one new theme added + * vway and vroom added + * updated tutorial + * set_music now take an loop parameter + * autosave is now default + * now vars saved if they begins from uppercase letter (undescore too); + * save slots !!! + * a lot of bugs fixed (memory leaks, SDL cavities.. ) + + -- Peter Kosyh Thu, 30 Jul 2009 18:12:19 +0400 + +instead (0.7.6-1) unstable; urgency=low + + * debian file fixes + + -- Peter Kosyh Fri, 29 May 2009 14:17:01 +0400 + +instead (0.7.6) unstable; urgency=low + + * Keyboard scrolling + * Font scaling + * inv.horiz option + + -- Peter Kosyh Mon, 25 May 2009 10:58:29 +0400 + +instead (0.7.5) unstable; urgency=low + + * Initial release + + -- Peter Kosyh Thu, 21 May 2009 11:40:29 +0400 + diff --git a/debian/changelog.txt b/debian/changelog.txt new file mode 100644 index 0000000..3e2e87b --- /dev/null +++ b/debian/changelog.txt @@ -0,0 +1,21 @@ + * опечатки + * 3 режима размещения картинки (в том числе и встроенный в текст) + * механизм выбора тем представлен в меню и настройках + * режим свободного скроллинга (таскание мышкой) + * ускорение отрисовки текста (x4-x5 раз) + * слоты для загрузки/сохранения игр + * звук на реакцию движка + * выделение наклонным шрифтом событий сцены + * изменена тема по умолчанию (картинка теперь не мешает тексту, так как скроллируется с ним), + * добавлена тема 'Книга' -- оптимальная для книг-игр с вертикальными картинками + * позиция скроллирования не сбрасывается при реакции движка + * фильтр событий мыши (случайные двойные клики и т.д.) + * полноэкранный режим по Alt-Enter + * другие улучшения интерфейса + + * обновлена документация (новые объекты, расширения движка) + * игры и темы кроме системного каталога ищутся также в ~/.instead/games ~/.instead/themes (unix версия) + * консольная версия не входит в поставку по умолчанию + * параметры командной строки: -alsa, -fullscreen, -window + * исправлено множество ошибок + diff --git a/debian/compat b/debian/compat new file mode 100644 index 0000000..7f8f011 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +7 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..28dda17 --- /dev/null +++ b/debian/control @@ -0,0 +1,14 @@ +Source: instead +Section: games +Priority: optional +Maintainer: Peter Kosyh +Build-Depends: debhelper (>= 7), pkg-config, liblua5.1-dev, libsdl1.2-dev, libsdl-ttf2.0-dev, libsdl-image1.2-dev, libsdl-mixer1.2-dev, libreadline5-dev +Standards-Version: 3.7.3 +Homepage: http://instead.googlecode.com + +Package: instead +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: instead, simply text adventures/visual novels engine and game. + Visual novell/text quest-like game in russian with engine. + diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..101a5e7 --- /dev/null +++ b/debian/copyright @@ -0,0 +1,24 @@ +This package was debianized by Peter Kosyh on +Thu, 21 May 2009 11:40:29 +0400. + +It was downloaded from + +Upstream Author(s): + + + + +Copyright: + + + + +License: + + + +The Debian packaging is (C) 2009, Peter Kosyh and +is licensed under the GPL, see `/usr/share/common-licenses/GPL'. + +# Please also look if there are files or directories which have a +# different copyright/license attached and list them here. diff --git a/debian/cron.d.ex b/debian/cron.d.ex new file mode 100644 index 0000000..c3bc3de --- /dev/null +++ b/debian/cron.d.ex @@ -0,0 +1,4 @@ +# +# Regular cron jobs for the instead package +# +0 4 * * * root [ -x /usr/bin/instead_maintenance ] && /usr/bin/instead_maintenance diff --git a/debian/docs b/debian/docs new file mode 100644 index 0000000..f3d4ef2 --- /dev/null +++ b/debian/docs @@ -0,0 +1,2 @@ +readme.txt +readme.txt diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..b1f4b47 --- /dev/null +++ b/debian/rules @@ -0,0 +1,100 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# Sample debian/rules that uses debhelper. +# This file was originally written by Joey Hess and Craig Small. +# As a special exception, when this file is copied by dh-make into a +# dh-make output file, you may use that output file without restriction. +# This special exception was added by Craig Small in version 0.37 of dh-make. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + + + + + +configure: configure-stamp +configure-stamp: + dh_testdir + # Add here commands to configure the package. + + touch configure-stamp + + +build: build-stamp + +build-stamp: configure-stamp + dh_testdir + + # Add here commands to compile the package. + rm -rf Rules.make + ln -s Rules.make.system Rules.make + $(MAKE) DESTDIR=/usr BIN=/usr/games STEADPATH=/usr/share/games/stead + rm -rf Rules.make + #docbook-to-man debian/instead.sgml > instead.1 + touch $@ + +clean: + dh_testdir + dh_testroot + rm -f build-stamp configure-stamp + + # Add here commands to clean up after the build process. + rm -rf Rules.make + ln -s Rules.make.system Rules.make + $(MAKE) clean + rm -rf Rules.make + ln -s Rules.make.standalone Rules.make + + dh_clean + +install: build + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + + # Add here commands to install the package into debian/instead. + rm -rf Rules.make + ln -s Rules.make.system Rules.make + $(MAKE) install DESTDIR=$(CURDIR)/debian/instead/usr STEADPATH=$(CURDIR)/debian/instead/usr/share/games/stead BIN=$(CURDIR)/debian/instead/usr/games ICONPATH=$(CURDIR)/debian/instead/usr/share/pixmaps + rm -rf Rules.make + + +# Build architecture-independent files here. +binary-indep: build install +# We have nothing to do by default. + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot + dh_installchangelogs + dh_installdocs + dh_installexamples +# dh_install +# dh_installmenu +# dh_installdebconf +# dh_installlogrotate +# dh_installemacsen +# dh_installpam +# dh_installmime +# dh_python +# dh_installinit +# dh_installcron +# dh_installinfo + dh_installman + dh_link + dh_strip + dh_compress + dh_fixperms +# dh_perl +# dh_makeshlibs + dh_installdeb + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install configure diff --git a/desktop/Makefile b/desktop/Makefile new file mode 100644 index 0000000..454c754 --- /dev/null +++ b/desktop/Makefile @@ -0,0 +1,14 @@ +include ../Rules.make +clean: + rm -rf instead.desktop + +all: instead.desktop + +instead.desktop: instead.desktop.in + cat instead.desktop.in | sed -e "s|@BIN|$(BIN)|g" > instead.desktop + +install: + install -d -m 0755 $(DESTDIR)/share/applications + install -m 0644 instead.desktop $(DESTDIR)/share/applications/instead.desktop + install -m 0644 instead.desktop $(DESTDIR)/share/applications/instead.desktop + diff --git a/desktop/Makefile.windows b/desktop/Makefile.windows new file mode 100644 index 0000000..263836e --- /dev/null +++ b/desktop/Makefile.windows @@ -0,0 +1,3 @@ +clean: +all: +install: diff --git a/desktop/instead.desktop.in b/desktop/instead.desktop.in new file mode 100644 index 0000000..482ce9c --- /dev/null +++ b/desktop/instead.desktop.in @@ -0,0 +1,13 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=0.8.5 +Type=Application +Name=INSTEAD +Name[ru]=INSTEAD +Comment=Siple Text Adventures Interpretor +Comment[ru]=Интерпретатор простых приключений +Exec=@BIN/sdl-instead +Icon=sdl_instead.png +Terminal=false +Categories=Game;LogicGame; + diff --git a/doc/Makefile b/doc/Makefile new file mode 100644 index 0000000..5725b45 --- /dev/null +++ b/doc/Makefile @@ -0,0 +1,7 @@ +include ../Rules.make +clean: +all: +install: + install -d -m0755 $(DESTDIR)/share/doc/instead + install -m0644 *.jpg *.html *.txt $(DESTDIR)/share/doc/instead + diff --git a/doc/Makefile.windows b/doc/Makefile.windows new file mode 100644 index 0000000..5838a1a --- /dev/null +++ b/doc/Makefile.windows @@ -0,0 +1,8 @@ +clean: +all: +install: + if not exist ..\bin\doc mkdir ..\bin\doc + copy /Y *.txt ..\bin\doc + copy /Y *.png ..\bin\doc + copy /Y *.html ..\bin\doc + copy /Y *.jpg ..\bin\doc diff --git a/doc/index.html b/doc/index.html index 4b5e1a1..e25e6b3 100644 --- a/doc/index.html +++ b/doc/index.html @@ -4,7 +4,7 @@
[ Что это такое? ] [ Скриншоты ] [ Скачать ]

-

INSTEAD 0.7 -- интерпретатор простых текстовых приключений для Unix

+

INSTEAD 0.8 -- интерпретатор простых текстовых приключений для Unix

Что это такое?

Интерпретатор STEAD (Simply Text Adventure) позволяет проигрывать игры, которые по жанру являются смесью визуальной новеллы, текстового квеста и классических квестов 90-х. Особенности STEAD игры:

@@ -15,8 +15,7 @@
  • поддержка тем для графического интерпретатора -- конкретная игра может менять вид интерфейса;
  • переносимость (изначально написана для Linux, зависит от SDL и lua). -

    На данный момент автором STEAD написана одна игра: 'Возвращение Квантового Кота', которая входит в состав архива с исходным кодом. -Игра содержит около 70 сцен, графику и oldschool треки.

    +

    В архив с интерпретатором входит игра: 'Возвращение Квантового Кота'. Игра содержит около 70 сцен, графику и oldschool треки.

    Скриншоты

    Работа графического интерпретатора.

    @@ -31,7 +30,7 @@

    Скачать

    -Скачать текущую версию можно здесь: http://sites.google.com/site/sdlinstead/ +Скачать текущую версию и другие игры для INSTEAD можно здесь: http://instead.googlecode.com/
    [ Что это такое? ] [ Скриншоты ] [ Скачать ]
    diff --git a/doc/writing_games.txt b/doc/writing_games.txt new file mode 100644 index 0000000..fcffce1 --- /dev/null +++ b/doc/writing_games.txt @@ -0,0 +1,964 @@ +== 0. Общие сведения == + +Код игр для STEAD пишется на lua (5.1), поэтому, знание этого языка полезно, хотя и не необходимо. Код движка на lua занимает всего ~900 строк и лучшей документацией, конечно, является изучение его кода. + +Главное окно игры содержит информацию о статической и динамической части сцены, активные события и картинку сцены с возможными переходами в другие сцены (в графическом интерпретаторе). + +Динамическая часть сцены составлена из описаний объектов сцены, она отображается всегда. + +Статическая часть сцены отображается только один раз, при показе сцены, или при повторении команды look (в графическом интерпретаторе -- клик на названии сцены). + +Игроку доступны объекты доступные на любой сцене -- инвентарь. Игрок может взаимодействовать с объектами инвентаря и действовать объектами инвентаря на другие объекты сцены или инвентаря. + +Следует отметить, что понятие инвентаря является условным. Например, в "инвентаре" могут находиться такие объекты как "открыть", "осмотреть", "использовать" и т.д. + +Действиями игрока могут быть: + + * осмотр сцены; + * действие на объект сцены; + * действие на объект инвентаря; + * действие объектом инвентаря на объект сцены; + * действие объектом инвентаря на объект инвентаря; + * переход в другую сцену; + +Игра представляет из себя каталог, в котором должен находиться скрипт main.lua. Другие ресурсы игры (скрипты на lua, графика и музыка) должны находиться в рамках этого каталога. Все ссылки на ресурсы делаются относительно текущего каталога -- каталога игры. + +В начале файла main.lua может быть определен заголовок, состоящий из тегов. Теги должны начинаться с символов '--': комментарий с точки зрения lua. На данный момент существует один тег: $Name:, который должен содержать название игры в кодировке UTF8. Пример использования тега: +{{{ +-- $Name: Самая интересная игра!$ +}}} + +Графический интерпретатор ищет доступные игры в каталоге games. Unix версия интерпретатора кроме этого каталога просматривает также игры в каталоге ~/.instead/games. + +== 1. Сцена == + +Сцена -- это единица игры, в рамках которой игрок может изучать все объекты сцены и взаимодействовать с ними. В игре должна быть хотя бы одна сцена с именем main. +{{{ +main = room { + nam = 'главная комната', + dsc = 'Вы в большой комнате.', +}; +}}} +Запись означает создание объекта main типа room. У каждого объекта игры есть атрибуты и обработчики. Например, атрибут nam (имя) является необходимым для любого объекта. + +Атрибут nam для сцены это то, что будет заголовком сцены при ее отображении. Имя сцены также используется для ее идентификации при переходах. + +Атрибут dsc это описание статической части сцены, которое выводится один раз при входе в сцену или явном выполнении команды look. + +Внимание!!! Если для вашего творческого замысла необходимо, чтобы описание статической части сцены выводилось каждый раз, вы можете определить для своей игры параметр forcedsc (в начале игры). +{{{ +game.forcedsc = true; +}}} +Или, аналогично, задать атрибут forcedsc для конкретных сцен. + +Для длинных описаний удобно использовать запись вида: + +{{{dsc = [[ Очень длинное описание... ]],}}} + +При этом переводы строк игнорируются. Если вы хотите, чтобы в выводе описания сцены присутствовали абзацы -- используйте символ ^. + +{{{ +dsc = [[ Первый абзац. ^^ +Второй Абзац.^^ + +Третий абзац.^ +На новой строке.]], +}}} +== 2. Объекты == + +Объекты -- это единицы сцены, с которыми взаимодействует игрок. +{{{ +tabl = obj { + nam = 'стол', + dsc = 'В комнате стоит {стол}.', + act = 'Гм... Просто стол...', +}; +}}} +Имя объекта nam используется при попадании его в инвентарь а также в текстовом интерпретаторе для адресации объекта. + +dsc -- описатель объекта. Он будет выведен в динамической части сцены. Фигурными скобками отображается фрагмент текста, который будет являться ссылкой в графическом интерпретаторе. + +act -- это обработчик, который вызывается при действии пользователя (действие на объект сцены). Его задача -- возвращение строки текста, которая станет частью событий сцены. + +ВНИМАНИЕ: в пространстве имен lua уже существуют некоторые объекты (таблицы), например: table, io, string... Будьте внимательны, при создании объекта. Например, в приведенном примере используется tabl, а не table. + +== 3. Добавляем объекты в сцену == + +Ссылкой на объект называется текстовая строка, содержащая имя объекта при его создании. Например: 'tabl' -- ссылка на объект tabl. + +Для того, чтобы поместить в сцену объекты, нужно определить массив obj, состоящий из ссылок на объекты: +{{{ +main = room { + nam = 'главная комната', + dsc = 'Вы в большой комнате.', + obj = { 'tabl' }, +}; +}}} +Теперь, при отображении сцены мы увидим объект стол в динамической части. + +== 4. Объекты связанные с объектами == + +Объекты тоже могут содержать атрибут obj. При этом, список будет последовательно разворачиваться. Например, поместим на стол яблоко. +{{{ +apple = obj { + nam = 'яблоко', + dsc = 'На столе лежит {яблоко}.', + act = 'Взять что-ли?', +}; + +tabl = obj { + nam = 'стол', + dsc = 'В комнате стоит {стол}.', + act = 'Гм... Просто стол...', + obj = { 'apple' }, +}; +}}} +При этом, в описании сцены мы увидим описание объектов стол и яблоко, так как apple -- связанный с tabl объект. + + +== 5. Атрибуты и обработчики как функции == + +Большинство атрибутов и обработчиков могут быть также функциями. Так, например: +{{{ +nam = function() + return 'яблоко'; +end, +}}} +Это синоним записи: nam = 'яблоко'; + +Функции сильно расширяют возможности STEAD, например: +{{{ +apple = obj { + nam = 'яблоко', + dsc = function(s) + if not s._seen then + return 'На столе {что-то} лежит.'; + else + return 'На столе лежит {яблоко}.'; + end + end, + act = function(s) + if s._seen then + return 'Это яблоко!'; + else + s._seen = true; + return 'Гм... Это же яблоко!'; + end + end, +}; +}}} +Если атрибут или обработчик оформлен как функция, то обычно первый аргумент функции (s) сам объект. В данном примере, при показе сцены будет в динамической части сцены будет текст: 'На столе что-то лежит'. При взаимодействии с 'что-то', переменная `_seen` объекта apple будет установлена в true и мы увидим, что это было яблоко. + +Зная lua, можно упростить запись: +{{{ +function sw(v, a, b) + if v then + return a; + end + return b +end + +apple = obj { + nam = function(s) + return sw(not s._seen, 'нечто','яблоко'); + end, + dsc = function(s) + return sw(not s._seen,'На столе {что-то} лежит.', 'На столе лежит {яблоко}.'); + end, + act = function(s) + if s._seen then + return 'Это яблоко!'; + else + s._seen = true; + return 'Гм... Это же яблоко!'; + end + end, +}; +}}} +И в дальнейшем всегда использовать функцию sw (или какую-либо другую, вспомогательную функцию). + +Запись `s._seen` означает, что переменная `_seen` размещена в объекте s (то-есть apple). Подчеркивание означает, что эта переменная попадет в файл сохранения игры. Начиная с версии интерпретатора 0.7.7 в файл сохранения игры попадают также переменные, название которых начинается с большой буквы. + +Внимание!!! Переменные в любом случае не записываются в файл сохранения, если они не размещены в одном из перечисленных типов объектов: комната, объект, игра, игрок. + +== 6. Инвентарь == + +Простейший вариант сделать объект, который можно брать -- определить обработчик tak. + +Например: +{{{ +apple = obj { + nam = 'яблоко', + dsc = 'На столе лежит {яблоко}.', + inv = function() + inv():del('apple'); + return 'Я съел яблоко.'; + end, + tak = 'Вы взяли яблоко.', +}; +}}} +При этом, при действии игрока на объект яблоко -- яблоко будет убрано из сцены и добавлено в инвентарь. При действии игрока на инвентарь -- вызывается обработчик inv. + +В нашем примере -- при действии игроком на яблоко в инвентаре - яблоко будет съедено. + +== 7. Переходы между сценами == + +Для перехода между сценами используется атрибут сцены -- список way. +{{{ +room2 = room { + nam = 'зал', + dsc = 'Вы в огромном зале.', + way = { 'main' }, +}; + + +main = room { + nam = 'главная комната', + dsc = 'Вы в большой комнате.', + obj = { 'tabl' }, + way = { 'room2' }, +}; +}}} +При этом, вы сможете переходить между сценами main и room2. Как вы помните, nam может быть функцией, и вы можете генерировать имена сцен на лету, например, если вы хотите, чтобы игрок не знал название сцены, пока не попал на нее. + +При переходе между сценами движок вызывает обработчик exit из текущей сцены и enter в той сцены, куда идет игрок. Например: +{{{ +room2 = room { + enter = 'Вы заходите в зал.', + nam = 'зал', + dsc = 'Вы в огромном зале.', + way = { 'main' }, + exit = 'Вы выходите из зала.', +}; +}}} + +exit и enter могут быть функциями. Тогда первый параметр это (как всегда) сам объект, а второй это ссылка на комнату куда игрок хочет идти (для exit) или из которой уходит (для enter). Например: +{{{ +room2 = room { + enter = function(s, f) + if f == 'main' then + return 'Вы пришли из комнаты.'; + end + end, + nam = 'зал', + dsc = 'Вы в огромном зале.', + way = { 'main' }, + exit = function(s, t) + if t == 'main' then + return 'Я не хочу назад!', false + end + end, +}; +}}} +Как видим, обработчики могут возвращать два значения: строку и статус. В нашем примере функция exit вернет false, если игрок попытается уйти из зала в main комнату. false означает, что переход не будет выполнен. Такая же логика работает и для enter. Кроме того, она работает и для обработчика tak. + +== 8. Действие объектов друг на друга == + +Игрок может действовать объектом инвентаря на другие объекты. При этом вызывается обработчик use у объекта которым действуют и used -- на которого действуют. + +Например: +{{{ +knife = obj { + nam = 'нож', + dsc = 'На столе лежит {нож}', + inv = 'Острый!', + tak = 'Я взял нож!', + use = 'Вы пытаетесь использовать нож.', +}; + +tabl = obj { + nam = 'стол', + dsc = 'В комнате стоит {стол}.', + act = 'Гм... Просто стол...', + obj = { 'apple', 'knife' }, + used = 'Вы пытаетесь сделать что-то со столом...', +}; +}}} +Если игрок возьмет нож и использует его на стол -- то увидит текст обработчиков use и used. use и used могут быть функциями. Тогда первый параметр это сам объект, +а второй -- ссылка на объект на который направлено действие в случае use и объект, которым действие осуществляется в случае used. + +use может вернуть статус false, в этом случае обработчик used не вызовется (если он вообще был). Статус обработчика used -- игнорируется. + +Пример: +{{{ +knife = obj { + nam = 'нож', + dsc = 'На столе лежит {нож}', + inv = 'Острый!', + tak = 'Я взял нож!', + use = function(s, w) + if w ~= 'tabl' + return 'Не хочу это резать.', false + else + return 'Вы вырезаете на столе свои инициалы.'; + end +}; +}}} +Нож можно использовать только на стол. + +== 9. Объект игрок == + +Игрок в STEAD представлен объектом pl. Тип объекта -- player. В движке объект создается следующим образом: +{{{ +pl = player { + nam = "Incognito", + where = 'main', + obj = { } +}; +}}} +Атрибут obj представляет собой инвентарь игрока. + +== 10. Объект game == + +Игра также представлена объектом game с типом game. В движке он определяется следующим образом: +{{{ +game = game { + nam = "INSTEAD -- Simple Text Adventure interpreter v"..version.." '2009 by Peter Kosyh", + dsc = [[ +Commands:^ + look(or just enter), act (or just what), use [on what], go ,^ + back, inv, way, obj, quit, save , load .]], + pl ='pl', + showlast = true, +}; +}}} +Как видим, объект хранит в себе указатель на текущего игрока ('pl') и некоторые параметры. Например, вы можете указать в начале своей игры кодировку текста следующим образом: +{{{ game.codepage="UTF-8"; }}} + +Поддержка произвольных кодировок изначально присутствует в UNIX версии интерпретатора, в windows версии -- начиная с 0.7.7. + +Кроме того, объект game может содержать обработчики по умолчанию act, inv, use, которые будут вызваны, если в результате действий пользователя не будут найдены никакие другие обработчики. Например, вы можете написать в начале игры: +{{{ +game.act = 'Не получается.'; +game.inv = 'Гм.. Странная штука..'; +game.use = 'Не сработает...'; +}}} + +== 11. Атрибуты - списки == + +Атрибуты списки (такие как way или obj) позволяют работать с собой, таким образом позволяя реализовать динамически определяемые переходы между сценами, живые объекты и т.д. + +Методы списков: add, del, look, srch. Из них наиболее часто используемые: add и del. + +add - добавляет в список. del -- удаляет из него. srch -- выполняет поиск объекта. Следует отметить, что параметром del и srch может быть не только сам объект или идентификатор объекта, но и имя объекта. + +Начиная с версии 0.8 параметром add может быть сам объект. Кроме того, с этой версии добавляется необязательный второй параметр -- позиция в списке. Начиная с версии 0.8 вы можете также выполнять модификацию списка по индексу с помощью метода set. Например: +{{{ +objs():set('knife',1); +}}} + +Выше, вы уже видели пример со съеденным яблоком, там использовалась конструкция inv():del('apple'); + +inv() -- это функция, которая возвращает список инвентаря. del после ':'-- метод, удаляющий элемент инвентаря. + +Аналогично, собственная реализация tak может быть такой: +{{{ +knife = obj { + nam = 'нож', + dsc = 'На столе лежит {нож}', + inv = 'Острый!', + act = function(s) + objs():del('knife'); + inv():add('knife'); + end, +}; +}}} + +Кроме добавления, удаления объектов из списков вы можете использовать выключение/включение объектов с помощью методов enable() и disable(). Например: knife:disable(). При этом объект knife пропадает из описания сцены, но в последствии может быть опять быть включен, с помощью knife:enable(). + +== 12. Функции, которые возвращают объекты == + +В STEAD определены некоторые функции, которые возвращают наиболее часто используемые объекты. Например: + * inv() возвращает список инвентаря; + * objs() возвращает список объектов текущей сцены; (начиная с 0.8.5 -- необязательный параметр -- сцена, для которой возвращается список); + * ways() возвращает список возможных переходов из текущей сцены; (начиная с 0.8.5 -- необязательный параметр -- сцена, для которой возвращается список); + * me() возвращает объект-игрок; + * here() возвращает объект текущую сцену; (начиная с 0.8.5 -- еще одна функция where() -- возвращает текущую сцену как строку-имя объекта, а не сам объект) + * from() возвращает объект прошлой сцены; + +Комбинируя эти функции с методами add, del можно динамически менять сцену, например: +{{{ +ways:add('nexroom'); -- добавить переход на новую сцену; +}}} +{{{ +objs():add('chair'); -- добавить объект в текущую сцену; +}}} + +Еще одна функция, которая получает объект по ссылке: +ref(). + +Например, мы можем добавить объект в локацию 'home' следующим образом: +{{{ +ref('home').obj:add('chair'); +}}} + +Впрочем, следующая более простая запись тоже является корректной: +{{{ +home.obj:add('chair'); +}}} + +Или, для версии >=0.8.5: +{{{ +objs('home'):add('chair'); +}}} +или, наконец: +{{{ +put('chair', 'home'); +}}} + +Начиная с 0.8.5 -- deref(o), возвращает ссылку-строку для объекта; + +== 13. Некоторые вспомогательные функци. == + +В STEAD определены некоторые высокоуровневые функции, которые могут оказаться полезными при написании игры. + +have() -- проверяет, есть ли объект в инвентаре. По имени объекта или по атрибуту nam объекта. Например: +{{{ +... +act = function(s) + if have('knfie') then + return 'Но у меня же есть нож!'; + end +end +... +}}} +move(o, w) -- переносит объект из текущей сцены в другую: + +{{{ move('mycat','inmycar');}}} + +Если вы хотите перенести объект из произвольной сцены, вам придется удалить его из старой сцены с помощью метода del. Для создания сложно перемещающихся объектов, вам придется написать свой метод, который будет сохранять текущую позицию объекта в самом объекте и делать удаление объекта из старой сцены. Вы можете указать исходную позицию (комнату) объекта в качестве третьего параметра move. + +{{{ move('mycat','inmycar', 'forest'); }}} + +Начиная с версии 0.8 присутствует также функция movef, аналогичная move, но добавляющая объект в начало списка. + +seen(o) -- если объект присутствует в текущей сцене: +{{{ + if seen('mycat') then + move('mycat','inmycar'); + end +}}} +drop(o) -- положить объект из инвентаря на сцену: + + drop('knife'); + +Начиная с версии 0.8 присутствует также функция dropf, аналогичная drop, но добавляющая объект в начало списка. Начиная с версии 0.8.5 второй необязательный параметр -- комната, куда помещается предмет. Кроме того, для версий >=0.8.5 доступна функция put, которая не удаляет предмет из инвентаря. + + +take(o) -- взять объект. + + take('knife'); + +Начиная с версии 0.8.5 второй необязательный параметр -- комната, с которой берется предмет. + +taken(o) -- если объект взят -- вернет true (взят с помощью tak или take()); + +rnd(m) -- случайное значение от 1 до m. + +goto(w) -- перейти в сцену w, при этом обработчику нужно вернуть возвращаемое значение goto, так как goto вернет описание новой сцены или сообщенмие о том, что переход невозможен, например: + +change_pl(p) -- переключиться на другого игрока (со своим инвентарем и позицией). При этом функция возвращает описание сцены нового игрока и это возвращаемое значение должно быть передано из обработчика (см. goto()). + +{{{ +mycar = obj { + nam = 'моя машина', + dsc = 'Перед хижиной стоит мой старенький {пикап} Toyota.', + act = function(s) + return goto('inmycar'); + end +}; +}}} + +back() -- goto в предыдущую сцену. + +time() -- возвращает текущее время игры. Время игры считается в активных действиях. + +cat(...) -- возвращает строку -- склейку строк-аргументов. Если первый аргумент nil, то функция возвращает nil. + +par(...) -- возвращает строку -- склейку строк-аргументов, разбитых строкой-первым параметром. + +== 14. Диалоги == + +Диалоги это сцены, содержащие объекты -- фразы. Например, простейший диалог может выглядеть следующим образом. +{{{ +povardlg = dlg { + nam = 'на кухне', + dsc = 'Передо мной полное лицо женщины - повара в белом колпаке и усталым взглядом...', + obj = { + [1] = phr('Мне вот-этих зелененьких... Ага -- и бобов!', 'На здоровье!'), + [2] = phr('Картошку с салом, пожалуйста!', 'Приятного аппетита!'), + [3] = phr('Две порции чесночного супа!!!', 'Прекрасный выбор!'), + [4] = phr('Мне что-нибудь легонькое, у меня язва...', 'Овсянка!'), + }, +}; +}}} +phr -- создание фразы. Фраза содержит вопрос, ответ и реакцию (реакция в данном примере отсутствует). Когда игрок выбирает одну из фраз, фраза отключается. Когда все фразы отключатся диалог заканчивается. Реакция -- это строка кода на lua который выполнится после отключения фразы. Например: +{{{ +food = obj { + nam = 'еда', + inv = function (s) + inv():del('food'); + return 'Я ем.'; + end +}; + +gotfood = function(w) + inv():add('food'); + food._num = w; + return back(); +end + +povardlg = dlg { + nam = 'на кухне', + dsc = 'Передо мной полное лицо женщины - повара в белом колпаке и усталым взглядом...', + obj = { + [1] = phr('Мне вот-этих зелененьких... Ага -- и бобов!', 'На здоровье!', [[pon(1); return gotfood(1);]]), + [2] = phr('Картошку с салом, пожалуйста!', 'Приятного аппетита!', [[pon(2); return gotfood(2);]]), + [3] = phr('Две порции чесночного супа!!!', 'Прекрасный выбор!', [[pon(3);return gotfood(3);]]), + [4] = phr('Мне что-нибудь легонькое, у меня язва...', 'Овсянка!', [[pon(4); return gotfood(4);]]), + }, +}; +}}} +В данном примере, игрок выбирает еду. Получае ее (запомнив выбор в переменной food._num) и возвращается обратно (в ту сцену откуда попал в диалог). + +В реакции может быть любой lua код, но в STEAD определены наиболее часто используемые функции: + +pon(n..) -- включить фразы диалога с номерами n... (в нашем примере -- чтобы игрок мог повторно взять еду того-же вида). +poff(n...) -- выключить фразы диалога с номерами n... +prem(n...) -- удалить (заблокировать) фразы диалога с номерами n... (удаление означает невозможность включения фраз. pon(n..) не приведет к включению фраз). + +Переход в диалог осуществляется как переход на сцену: +{{{ +povar = obj { + nam = 'повар', + dsc = 'Я вижу {повара}.', + act = function() + return goto('povardlg'); + end, +}; +}}} +Вы можете переходить из одного диалога в другой диалог -- организовывая иерархические диалоги. + +Также, вы можете прятать некоторые фразы при инициализации диалога и показывать их при некоторых условиях. +{{{ +facectrl = dlg { + nam = 'фэйсконтроль', + dsc = 'Я вижу перед собой неприятное лицо полного охранника.', + obj = { + [1] = phr('Я пришел послушать лекцию Белина...', + '-- Я не знаю кто вы -- ухмыляется охранник -- но мне велели пускать сюда только приличных людей.', + [[pon(2);]]), + [2] = _phr('У меня есть приглашение!', + '-- А мне плевать! Посмотри на себя в зеркало!!! Ты пришел слушать самого Белина -- правую руку самого... -- охранник почтительно помолчал -- Так что пошел вон..', [[pon(3,4)]]), + [3] = _phr('Сейчас я дам тебе по роже!', '-- Ну все... Мощные руки выталкивают меня в коридор...', + [[poff(4)]]), + [4] = _phr('Ты, кабан! Я же тебе сказал -- у меня есть приглашение!', + '-- Чтоооооо? Глаза охранника наливаются кровью... Мощный пинок отправляет меня в коридор...', + [[poff(3)]]), + }, + exit = function(s,w) + s:pon(1); + end, +}; +}}} + +`_phr` -- создает выключенную фразу, которую можно включить. Данный пример показывает также возможность использования методов pon, poff, prem для диалога (см. exit). + +Вы можете включать/выключать фразы не только текущего, но и произвольного диалога, с помощью методов объекта диалог pon/poff. Например: shopman:pon(5); + +== 15. Облегченные объекты == + +Иногда, сцену нудно наполнить декорациями, которые обладают ограниченной функциональностью, но делают игру разнообразней. Для этого можно использовать облегченный объект. Например: +{{{ +sside = room { + nam = 'южная сторона', + dsc = [[Я нахожусь у южной стены здания института. ]], + act = function(s, w) + if w == 1 then + ways():add('stolcorridor'); + return "Я подошел к подъезду. На двери подъезда надпись -- 'Столовая'. Хм -- зайти внутрь?"; + end + if w == 2 then + return 'Те, кто выходят, выглядят более довольными...'; + end + end, + obj = { vobj(1, "подъезд", "У восточного угла находится небольшой {подъезд}."), + vobj(2, "люди", "Время от времени дверь подъезда хлопает впуская и выпуская {людей}.")}, +}; +}}} +Как видим, vobj позволяет сделать легкую версию статического объекта, с которым тем не менее можно взаимодействовать (за счет определения обработчика act в сцене и анализа ключа объекта). vobj также вызывает метод used, при этом в качестве третьего параметра передается объект, воздействующий на виртуальный объект. + +Синтаксис vobj: vobj(ключ, имя, описатель); где ключ -- это цифра, которая будет передана обработчикам act/used сцены как второй параметр. + +Существует модификация объекта vobj -- vway. vway реализует ссылку. +Синтаксис vway: vway(имя, описатель, сцена назначения); например: + +{{{ + obj = { vway("дальше", "Нажмите {здесь}.", 'nextroom') } +}}} + +Вы можете динамически заполнять сцену объектами vobj или vway с помощью методов add и del. Например: + +{{{ + home.objs:add(vway("next", "{Дальше}.", 'next_room'); +-- some code here + home.objs:del("next"); +}}} + +Определена также упрощенная сцена vroom. +Синтаксис: vroom(имя перехода, сцена назначения). Например: + +{{{ + home.objs:add(vroom("идти на запад", 'mountains'); +}}} + +== 16. Динамические события == + +Вы можете определять обработчики, которые выполняются каждый раз, когда время игры увеличивается на 1. Например: +{{{ +mycat = obj { + nam = 'Барсик', + lf = { + [1] = 'Барсик шевелится у меня за пазухой.', + [2] = 'Барсик выглядывает из за пазухи.', + [3] = 'Барсик мурлычит у меня за пазухой.', + [4] = 'Барсик дрожит у меня за пазухой.', + [5] = 'Я чувствую тепло Барсика у себя за пазухой.', + [6] = 'Барсик высовывает голову из за пазухи и осматривает местность.', + }, + life = function(s) + local r = rnd(6); + if r > 2 then + return; + end + r = rnd(6); + return s.lf[r]; + end, +.... + +profdlg2 = dlg { + nam = 'Белин', + dsc = 'Белин бледен. Он смотрит на дробовик рассеянным взглядом.', + obj = { + [1] = phr('Я пришел за своим котом.', + 'Я выхватываю Барсика из руки Белина и засовываю себе за пазуху.', + [[inv():add('mycat'); lifeon('mycat')]]), +.... +}}} +Любой объект или сцена могут иметь свой обработчик life, который вызывается каждый раз при смене текущего времени игры, если объект или сцена были добавлены в список живых объектов с помощью lifeon. Не забывайте удалять живые объекты из списка с помощью lifeoff, когда они больше не нужны. Это можно сделать, например, в обработчике exit, или любым другим способом. + +== 17. Графика и музыка == + +Графический интерпретатор анализирует атрибут сцены pic, и воспринимает его как путь к картинке, например: + +{{{ +home = room { + pic = 'gfx/home.png', + nam = 'дома', + dsc = 'Я у себя дома', +}; +}}} + +Конечно, pic может быть функцией, расширяя возможности разработчика. +Если в текущей сцене не определен атрибут pic, то берется атрибут game.pic. Если не определен и он, то картинка не отображается. + +Интерпретатор проигрывает в цикле текущую музыку, которая задается с помощью функции: +set_music(имя музыкального файла). + +Например: +{{{ +street = room { + pic = 'gfx/street.png', + enter = function() + set_music('mus/rain.ogg'); + end, + nam = 'на улице', + dsc = 'На улице идет дождь.', +}; +}}} + +get_music() возвращает текущее имя трека. + +Начиная с версии 0.7.7 в функцию set_music() можно передавать второй параметр -- количество проигрываний. Получить текущий счетчик можно с помощью get_music_loop. 0 - означает вечный цикл. 1..n -- количество проигрываний. -1 -- проигрывание текущего трека закончено. + +== 18. Полезные советы == +=== Статус игрока === +Код движка расположен в файле stead.lua. В своей игре вы можете переопределять любую функцию или объект lua, добиваясь того, что нужно для вашего творческого замысла. Кроме того, полезно знать особенности работы движка. Например, ниже представлена реализация статуса игрока в виде текста, который появляется в инвентаре, но не может быть выбран. + +{{{ +pl.Life = 10; +pl.Power = 10; + +status = obj { + nam = 'Жизнь: '..pl.Life..',Сила: '..pl.Power, +}; +inv():add('status'); +status.object_type = nil +}}} + +=== goto из обработчика exit == + +Если вы выполните goto из обработчика exit, то получите переполнение стека, так как goto снова и снова будет вызывать метод exit. Вы можете избавиться от этого, если вставите проверку, разрушающую рекурсию. Например: +{{{ +exit = function(s, t) + if t == 'dialog' then return; end + return goto('dialog'); +}}} + +Вы можете также делать goto из обработчиков enter. + +=== Динамически создаваемые ссылки. == +Динамически создаваемые ссылки могут быть реализованы разным способом. Ниже приводится пример, основанный на использовании объектов vway. Для добавления ссылки можно использовать запись: +{{{ +home.obj:add(vway('Дорога', 'Я заметил {дорогу}, ведущую в лес...', 'forest')); +}}} +Для удаления ссылки можно использовать метод del. +{{{ +home.obj:del('Дорога'); +}}} +Для определения наличия ссылки в сцене -- метод srch. +{{{ +if not home.obj:srch('Дорога') then + home.obj:add(vway('Дорога', 'Я заметил {дорогу}, ведущую в лес...', 'forest')); +end +}}} +Динамические ссылки удобно создавать в обработчике enter, или по мере необходимости в любом месте кода игры. Если ссылки создаются в текущей сцене, то последний пример можно упростить: +{{{ +if not seen('Дорога') then + objs():add(vway('Дорога', 'Я заметил {дорогу}, ведущую в лес...', 'forest')); +end +}}} +Кроме того, вы можете просто включать и выключать ссылки с помощью enable(), disable(), например: +{{{ + objs()[1]:disable(); +}}} + +Вы можете создавать выключенные vobj и vway следующим образом: +{{{ + obj = {vway('Дорога', 'Я заметил {дорогу}, ведущую в лес...', 'forest'):disable()}, +}}} +И затем включать их по индексу в массиве obj: +{{{ + objs()[1]:enable(); +}}} + +=== Компиляция игр === +Если вы не хотите показывать исходный код своих игр, вы можете откомпилировать исходный код компилятором luac. Правда, при этом главный файл main.lua желательно оставлять текстовым, так его заголовок сканируется интерпретатором при выборе игры. Таким образом схема выглядит следующим образом (game.lua -- скомпилированный lua код): + +main.lua +{{{ +-- $Name: Моя закрытая игра!$ +dofile("game.lua"); +}}} + +Кроме того, компиляция игр может быть использована для поиска ошибок в коде. + +=== Переключение между игроками === +Вы можете создать игру с несколькими персонажами и время от времени переключаться между ними (см. switch_pl). Но вы можете также использовать этот трюк для того, что бы иметь возможность переключаться между разными типами инвентаря. + +=== Использование первого параметра обработчика === +Пример кода. +{{{ +knife = obj { + nam = 'камень', + dsc = 'На краю лежит {камень}.', + act = function() + objs():del('knife'); + return 'Я толкнул камень, он сорвался и улетел вниз...'; + end +}}} + +Обработчик act мог бы выглядеть проще: +{{{ + act = function(s) + objs():del(s); + return 'Я толкнул камень, он сорвался и улетел вниз...'; + end +}}} +=== Использование set_music === +Вы можете использовать set_music для проигрывания звуков, задавая второй параметр -- счетчик циклов проигрывания звукового файла. + +Вы можете написать для игры свой проигрыватель музыки, создав его на основе живого объекта, например: +{{{ +-- играет треки в случайном порядке, начиная со 2-го +tracks = {"mus/astro2.mod", "mus/aws_chas.xm", "mus/dmageofd.xm", "mus/doomsday.s3m"} +mplayer = obj { + nam = 'плеер', + life = function(s) + local n = get_music(); + local v = get_music_loop(); + if not n or not v then + set_music(tracks[2], 1); + elseif v == -1 then + local n = get_music(); + while get_music() == n do + n = tracks[rnd(4)] + end + set_music(n, 1); + end + end, +}; +lifeon('mplayer'); +}}} + +Вы можете использовать функции get_music_loop и get_music, для того, чтобы запоминать прошлую мелодию, и потом восстанавливать ее, например: + +{{{ +function save_music(s) + s.OldMusic = get_music(); + s.OldMusicLoop = get_music_loop(); +end + +function restore_music(s) + set_music(s.OldMusic, s.OldMusicLoop); +end + +-- .... +enter = function(s) + save_music(s); +end, +exit = function(s) + restore_music(s); +end, +-- .... + +}}} + +Начиная с версии 0.8.5 функции save_music и restore_music уже присутствуют в библиотеке. + +=== Живые объекты === +Если вашему герою нужен друг, одним из способов может стать метод life этого персонажа, который всегда переносит объект в локацию игрока: +{{{ +horse = obj { + nam = 'лощадь', + dsc = 'Рядом со мной стоит {лошадь}.', + life = function(s) + if not seen('horse') then + move('horse', here(), s.__where); + s.__where = pl.where; + end + end, +}; +lifeon('horse'); +}}} + +=== Отладка === +Для того, чтобы во время ошибки увидеть стек вызовов функций lua, вы можете запустить sdl-instead с параметром -debug. При этом в windows версии интерпретатора будет создана консоль отладки. + +Вы можете отлаживать свою игру вообще без instead. Например, вы можете создать следующий файл game.lua: +{{{ +dofile("/usr/share/games/stead/stead.lua"); -- путь к stead.lua +dofile("main.lua"); -- ваша игра +game:ini(); +iface:shell(); +}}} +И запустите игру в lua: lua game.lua. +При этом игра будет работать в примитивном shell окружении. Полезные команды: ls, go, act, use.... + +== 19. Темы для sdl-instead == + +Графический интерпретатор поддерживает механизм тем. Тема представляет из себя каталог, с файлом theme.ini внутри. + +Тема, которая является минимально необходимой -- это тема default. Эта тема всегда загружается первой. Все остальные темы наследуются от нее и могут частично или полностью заменять ее параметры. Выбор темы осуществляется пользователем через меню настроек, однако конкретная игра может содержать собственную тему и таким образом влиять на свой внешний вид. В этом случае в каталоге с игрой должен находиться свой файл theme.ini. Тем не-менее пользователь свободен отключить данный механизм, при этом интерпретатор будет предупреждать о нарушении творческого замысла автора игры. + +Синтаксис theme.ini очень прост. + +<параметр> = <значение> + +или + +; комментарий + +Значения могут быть следующих типов: строка, цвет, число. + +Цвет задается в форме #rgb, где r g и b компоненты цвета в шестнадцатеричном виде. Кроме того некоторые основные цвета распознаются по своим именам. Например: yellowgreen, или violet. + +Параметры могут принимать значения: + +scr.w = ширина игрового пространства в пикселях (число) + +scr.h = высота игрового пространства в пикселях (число) + +scr.col.bg = цвет фона + +scr.gfx.bg = путь к картинке фонового изображения (строка) + +scr.gfx.use = путь к картинке-индикатору режима использования (строка) + +scr.gfx.pad = размер отступов к скролл-барам и краям меню (число) + +scr.gfx.x, scr.gfx.y, scr.gfx.w, scr.gfx.h = координаты, ширина и высота окна изображений. Области в которой располагается картинка сцены. Интерпретация зависит от режима расположения (числа) + +win.gfx.h - синоним scr.gfx.h (для совместимости) + +scr.gfx.mode = режим расположения (строка fixed, embedded или float). Задает режим изображения. embedded -- картинка является частью содержимого главного окна, параметры win.x, win.y, win.w игнорируются. float -- картинка расположена по указанным координатам (win.x, win.y) и масштабируется к размеру win.w x win.h если превышает его. fixed -- картинка является частью сцены как в режиме embedded, но не скроллируется вместе с текстом а расположена непосредственно над ним. + +win.x, win.y, win.w, win.h = координаты, ширина и высота главного окна. Области в которой располагается описание сцены (числа) + +win.fnt.name = путь к файлу-шрифту (строка) + +win.fnt.size = размер шрифта главного окна (размер) + +win.gfx.up, win.gfx.down = пути к файлам-изображениям скорллеров вверх/вниз для главного окна (строка) + +win.col.fg = цвет текста главного окна (цвет) + +win.col.link = цвет ссылок главного окна (цвет) + +win.col.alink = цвет активных ссылок главного окна (цвет) + +inv.x, inv.y, inv.w, inv.h = координаты, высота и ширина области инвентаря. (числа) + +inv.mode = строка режима инвентаря (horizontal или vertical). В горизонтальном режиме инвентаря в одной строке могут быть несколько предметов. В вертикальном режиме, в каждой строке инвентаря содержится только один предмет. (число) + +inv.col.fg = цвет текста инвентаря (цвет) + +inv.col.link = цвет ссылок инвентаря (цвет) + +inv.col.alink = цвет активных ссылок инвентаря (цвет) + +inv.fnt.name = путь к файлу-шрифту инвентаря (строка) + +inv.fnt.size = размер шрифта инвентаря (размер) + +inv.gfx.up, inv.gfx.down = пути к файлам-изображениям скорллеров вверх/вниз для инвентаря (строка) + +menu.col.bg = фон меню (цвет) + +menu.col.fg = цвет текста меню (цвет) + +menu.col.link = цвет ссылок меню (цвет) + +menu.col.alink = цвет активных ссылок меню (цвет) + +menu.col.alpha = прозрачность меню 0-255 (число) + +menu.col.border = цвет бордюра меню (цвет) + +menu.bw = толщина бордюра меню (число) + +menu.fnt.name = путь к файлу-шрифту меню (строка) + +menu.fnt.size = размер шрифта меню (размер) + +menu.gfx.button = путь к файлу изображению значка меню (строка) + +menu.button.x, menu.button.y = координаты кнопки меню (числа) + +snd.click = путь к звуковому файлу щелчка (строка) + +include = имя темы (последний компонент в пути каталога) (строка) + +Кроме того, заголовок темы может включать в себя комментарии с тегами. На данный момент существует только один тег: $Name:, содержащий UTF-8 строку с именем темы. Например: +{{{ +; $Name:Новая тема$ +; модификация темы book +include = book +scr.gfx.h = 500 +}}} + +Интерпретатор выполняет поиск тем в каталоге themes. Unix версия кроме этого каталога, просматривает также каталог ~/.instead/themes/ + + +TODO +Полный список объектов и методов. diff --git a/games/Makefile b/games/Makefile index 3a7e598..28b1e40 100644 --- a/games/Makefile +++ b/games/Makefile @@ -5,6 +5,6 @@ install: for f in *; do \ if [ ! -d $$f ]; then continue; fi;\ install -d -m0755 $(GAMESPATH)/$$f;\ - tar -c -C $$f . | tar -x -C $(GAMESPATH)/$$f;\ + tar --exclude=".svn" -c -C $$f . | tar -x -C $(GAMESPATH)/$$f;\ done clean: diff --git a/games/Makefile.windows b/games/Makefile.windows new file mode 100644 index 0000000..5fa58a5 --- /dev/null +++ b/games/Makefile.windows @@ -0,0 +1,11 @@ +all: +install: + if not exist ..\bin\games\cat mkdir ..\bin\games\cat + copy cat ..\bin\games\cat + if not exist ..\bin\games\cat\gfx mkdir ..\bin\games\cat\gfx + copy cat\gfx ..\bin\games\cat\gfx + if not exist ..\bin\games\cat\mus mkdir ..\bin\games\cat\mus + copy cat\mus ..\bin\games\cat\mus + if not exist ..\bin\games\tutorial mkdir ..\bin\games\tutorial + copy tutorial ..\bin\games\tutorial +clean: diff --git a/games/cat/ep1.lua b/games/cat/ep1.lua index bb1b2b6..f85ca7b 100644 --- a/games/cat/ep1.lua +++ b/games/cat/ep1.lua @@ -2,11 +2,11 @@ mywear = obj { nam = 'ватник', dsc = function(s) if here() == stolcorridor then - local st=''; + local st='.'; if not have('gun') then - st = 'Под которым спрятан дробовик.'; + st = ', под которым спрятан дробовик.'; end - return 'А еще на вешалке висит мой {ватник}.'..st; + return 'А еще на вешалке висит мой {ватник}'..st; else return 'На гвоздике, вбитом в сосновую дверь, висит {ватник}.'; end @@ -109,7 +109,7 @@ gun = obj { return 'Я попытался спрятать дробовик в одежду, но он слишком длинный.' else s._hidden = true; - return 'Теперь я могу спрятать обрез в одежде!.'; + return 'Теперь я могу спрятать обрез в одежде!'; end end end @@ -374,7 +374,7 @@ home = room { if seen(mycat) then move('mycat','forest'); return [[ -Когда я выходил из хижины Барсик внезапно проснулся и бросился мне под ноги. +Когда я выходил из хижины, Барсик внезапно проснулся и бросился мне под ноги. Я погладил его за ушами -- Значит едем вместе? ]] end @@ -562,7 +562,7 @@ shop = room { village.obj:del('truck'); village.obj:del('mycat'); return [[ -Когда я заходил в магазин я чуть не с толкнулся с неприятным типом в сером пальто и +Когда я заходил в магазин, я чуть не с толкнулся с неприятным типом в сером пальто и шляпе с длинными полями... Он извинился каким-то шипящим голосом и сделал вид, что приподнимает шляпу... Из под ее полей блеснули белые зубы... Дойдя до прилавка я услышал звук запускающегося двигателя.]]; end @@ -730,8 +730,8 @@ guarddlg = dlg { [2] = phr('Я забыл свой пропуск -- можно мне зайти?','-- Нет...', 'poff(1); pon(3);'), [3] = _phr('Вы знаете Белина? У него мой кот -- мне нужно его забрать...', '-- Нет пропуска?', 'pon(4)'), [4] = _phr('Я просто пришел забрать своего кота! Дайте телефон Белина.', -[[Глаза охранника меняют свой цвет. Уголки губ поднимаются наверх -- вот что, господин хороший -- я так понял, -пропуска у вас нет, идите-ка отсюда пока можете...]], 'pon(5, 6)'), +[[Глаза охранника меняют свой цвет. Уголки губ поднимаются наверх -- вот что, господин хороший, -- я так понял, +пропуска у вас нет, идите-ка отсюда, пока можете...]], 'pon(5, 6)'), [5] = _phr('Ну все, щас я дам по твоей роже...', 'Рука охранника тянется к автомату. ', 'poff(6); return guardreact();'), [6] = _phr('Ладно, я пошел...', '-- Не спеши - охранник уже не скрывает свою ухмылку - ты мне не нравишься...','poff(5); return guardreact()'), [7] = _phr('Щас я вас всех перестреляю из своего дробовика...', 'На этот раз охранник даже не отвечает. Его налитые кровью глаза красноречивей всяких слов.','return guardreact()'), @@ -740,7 +740,7 @@ guarddlg = dlg { guard = obj { nam = 'охрана', dsc = [[ -В будке сидит {охрана}. Кажется она вооружена автоматами калашникова. +В будке сидит {охрана}. Кажется, она вооружена автоматами калашникова. ]], act = function(s) return goto('guarddlg'); @@ -762,13 +762,13 @@ inst = room { учреждение. Позади территории института находятся железнодорожные пути. ]], act = function(s, w) if w == 1 then - return 'Высота стены около 5 метров. Но этого мало -- сверху проходит колючая проволока -- думаю она под напряжением...'; + return 'Высота стены около 5 метров. Но этого мало -- сверху проходит колючая проволока -- думаю, она под напряжением...'; end if w == 2 then return 'Нет, Владимир был прав... Это какой-то военный штаб...'; end if w == 3 then - return 'Да -- это похоже тот самый фургон, в котором человек в сером пальто увез моего Барсика.'; + return 'Да -- это, похоже, тот самый фургон, в котором человек в сером пальто увез моего Барсика.'; end end, used = function(s, w, b) @@ -889,7 +889,7 @@ backwall = room { if f == 'inmycar' then return 'Отлично... Кажется удалось добраться незамеченным...'..' '..st; end - return 'Плутая по снежному полю я добрался до задней стены.'..' '..st; + return 'Плутая по снежному полю, я добрался до задней стены.'..' '..st; end, nam = 'восточная стена института', dsc = 'Я нахожусь у задней стороны института.', diff --git a/games/cat/ep2.lua b/games/cat/ep2.lua index 5c74461..0e20683 100644 --- a/games/cat/ep2.lua +++ b/games/cat/ep2.lua @@ -76,8 +76,8 @@ alienwear = obj { 'Холодновато, но стильно!', 'Очень красиво смотрится на фоне снега!', 'Длиннополое пальто -- это ретро!', - 'Я терминатор!', - 'Я пацифист!', + 'Я -- терминатор!', + 'Я -- пацифист!', 'Пиджачок сидит на мне как влитой!', 'Рокн рол мертв, а я еше нет!', 'Когда-то я занимался альпинизмом!', @@ -88,7 +88,7 @@ alienwear = obj { inv = function(s) if s._num == 7 and not have('card') then inv():add('card'); - return 'Немного покопавшись в карманах косухи я нашел карточку.'; + return 'Немного покопавшись в карманах косухи, я нашел карточку.'; end return s.xinv[s._num]; end, @@ -99,7 +99,7 @@ garderob = obj { dsc = 'На правой стороне коридора висят {вешалки} с одеждой.', act = function(s, w) if have('mywear') or have('alienwear') then - return 'Здесь много людей, я не думаю что я смогу сделать это незаметно.'; + return 'Здесь много людей, я не думаю, что я смогу сделать это незаметно.'; elseif tonumber(w) and tonumber(w) > 0 and tonumber(w) <= 8 then if not me()._walked then return 'Это будет слишком заметно...'; @@ -143,7 +143,7 @@ garderob = obj { portrait = obj { nam = 'портреты', dsc = 'По стенам развешены большие {портреты} в деревянных рамах.', - act = 'Гм... На портретах одно и тоже лицо! Улыбающееся холодной улыбкой лицо человека лет сорока с холодным взглядом.', + act = 'Гм... На портретах одно и тоже лицо! Улыбающееся холодной улыбкой лицо человека, лет сорока, с пустым, ничего не выражающим взглядом.', }; salo = obj { @@ -286,15 +286,15 @@ kitchendlg = dlg { [3] = _phr('Хм... Из отдела искривления пространства...', '-- Старье!', [[pon(6);poff(4,5)]]), [4] = _phr('Ааа... Отдел квантовых скачков..', '-- Хм? Не слышал о таком.', [[pon(6);poff(3,5)]]), - [5] = _phr('ЭЭэ... Отдел изучения квазипространства!', '-- Ого! Прикольно!', [[pon(6);poff(3,4)]]), + [5] = _phr('Эээ... Отдел изучения квазипространства!', '-- Ого! Прикольно!', [[pon(6);poff(3,4)]]), [6] = _phr('Хм... ', '-- А у тебя какой уровень секретности?', [[pon(7,8)]]), [7] = _phr('Супер секретно!', '-- Ух ты! ... ', [[poff(8); pon(9)]]), [8] = _phr('Анонимный.', '-- Да? Не слышал о таком, наверное это более секретный уровень, чем мой...', [[poff(7); pon(9)]]), [9] = _phr('Мэээ...', '-- Меня зовут Илья... Просто Илья -- тянет худую руку парень -- а тебя как?', [[pon(10, 11, 12)]]), [10] = _phr('Пп.. Пк... Пупкин... Василий Пупкин.', '-- Редкая фамилия!', [[poff(11,12); pon(13)]]), - [11] = _phr('Сережка.', '-- Дай пятерню братан!', [[poff(10,12); pon(13)]]), - [12] = _phr('Гоша...', '-- Ну, будем знакомы Гошка!', [[poff(10,11); pon(13)]]), + [11] = _phr('Сережка.', '-- Дай пятерню, братан!', [[poff(10,12); pon(13)]]), + [12] = _phr('Гоша...', '-- Ну, будем знакомы, Гошка!', [[poff(10,11); pon(13)]]), [13] = _phr('Кхмм...', [[-- Какой ты странный... Но это не важно. Мы все здесь -- Илья сделал выразительное лицо -... Мне тут поручили распространить приглашения на закрытую лекцию Белина... Только для друзей... Ты мне нравишься, да и по уровню @@ -405,7 +405,7 @@ sside = room { end, way = {'eside','wside'}, obj = { vobj(1, "подъезд", "У восточного угла находится небольшой {подъезд}."), - vobj(2, "люди", "Время от времени дверь подъезда хлопает впуская и выпуская {людей}.")}, + vobj(2, "люди", "Время от времени дверь подъезда хлопает, впуская и выпуская {людей}.")}, exit = function(s, t) if t == 'eside' then return 'Если я пойду туда, я попаду в зону видимости пулеметных вышек.', false @@ -420,7 +420,7 @@ nside = room { way = {'eside','wside' }, act = function(s, w) if w == 1 then - return 'Да -- водосточная труба... Довольно крепкая. Но вряд-ли я смогу взобраться по ней наверх.'; + return 'Да -- водосточная труба... Довольно крепкая. Но вряд ли я смогу взобраться по ней наверх.'; end end, obj = { vobj(1, 'труба', 'Водосточная {труба} проходит по восточному углу здания.')}, @@ -434,7 +434,7 @@ wside = room { way = {'entrance', 'nside','sside' }, act = function(s, w) if w == 1 then - return 'Тот самый фургон с которого все началось...'; + return 'Тот самый фургон, с которого все началось...'; end if w == 5 then return 'Она начинается слишком высоко, к тому-же снизу она закрыта на замок. Возможно, это будет кому-то полезно при пожаре, хотя я лично сомневаюсь...' @@ -535,7 +535,7 @@ entrance = room { way = { 'wside' }, enter = function(s, f) if have('gun') and f == 'wside' and not gun._hidden then - return 'Мне кажется там внутри возникнет множество вопросов по-поводу моего дробовика... Я должен его как-то спрятать.', false + return 'Мне кажется, там внутри возникнет множество вопросов по-поводу моего дробовика... Я должен его как-то спрятать.', false end end, exit = function(s, t) @@ -744,7 +744,7 @@ stol = obj { if w == 'vent' or w == 'resh' then inv():del('stol'); stoly._moved = true; - return 'Напрягая свои силы я сдвигаю один из столов в центр комнаты.'; + return 'Напрягая свои силы, я сдвигаю один из столов в центр комнаты.'; end end }; @@ -782,7 +782,7 @@ eroom = room { dsc = [[Я нахожусь в небольшой комнате с бежевыми стенами.]], enter = function(s, f) if f == 'cor3' then - return [[Открыв дверь я заглядываю внутрь комнаты. Ухх... Пусто! Можно осмотреться...]]; + return [[Открыв дверь, я заглядываю внутрь комнаты. Ухх... Пусто! Можно осмотреться...]]; end if f == 'toilet' then return 'Ну что же... Я поднимаю железную решетку в полу туалета и лезу в темноту... Через несколько минут я уже спрыгиваю из вентиляционного отверстия на стол, и спускаюсь на пол.'; @@ -872,7 +872,7 @@ switch = obj { if not cor3._locked then return [[Я перевожу выключатель в позицию <<выключено>> и иду вдоль стен, когда одна из дверей за мной вдруг открывается и старческий голос звучит на весь коридор -- Безобразие!!! Включите обратно!!! -- -мне приходиться вернуться к выключателю и перевести его в позицию <<включено>>.]]; +мне приходится вернуться к выключателю и перевести его в позицию <<включено>>.]]; end vent._off = true; return 'Выключаю!'; @@ -890,7 +890,7 @@ cor3 = room { dsc = 'Длинный коридор идет до самой стены здания. На потолке тускло горят лампы дневного света. На полу постелена зеленая ковровая дорожка.', act = function(s, w) if w == 1 then - return 'Я подхожу к одной из дверей и заглядываю в окошко-иллюминатор... Люди в белых костюмах, словно пчелы снуют у причудливых аппаратов. -- Наверное это лаборатории -- догадываюсь я.'; + return 'Я подхожу к одной из дверей и заглядываю в окошко-иллюминатор... Люди в белых костюмах, словно пчелы, снуют у причудливых аппаратов. -- Наверное, это лаборатории -- догадываюсь я.'; end if not tonumber(w) then return nil, false @@ -906,7 +906,7 @@ cor3 = room { return goto('room3x'); end if w == 7 then - return 'Окно выходит на южную сторону... Темно -- ничего не видно кроме снежинок, ударяющихся о стекло...'; + return 'Окно выходит на южную сторону... Темно -- ничего не видно, кроме снежинок, ударяющихся о стекло...'; end if w == 8 then return 'Зайти?'; @@ -967,7 +967,7 @@ umyvalnik = obj { me()._mylo = false; return 'Я смываю мыло со своего лица...'; end - return 'Я пью хлорированную воду жадными глотками... Да -- это не та вода из ручья которую я пью в лесу...'; + return 'Я пью хлорированную воду жадными глотками... Да -- это не та вода из ручья, которую я пью в лесу...'; end, used = function(s, w) if w == 'mylo' then @@ -1016,7 +1016,7 @@ floor3 = room { end if w == 2 then if not s._unlocked then - return 'Металл обитый кожей. Дверь снабжена считывателем электронных карт. Надпись на двери: <<Уровень:3 Категория:Прикладная физика>>'; + return 'Металл обитый кожей. Дверь снабжена считывателем электронных карт. Надпись на двери: <<Уровень:3 Категория: Прикладная физика>>'; end return goto('cor3'); end @@ -1369,13 +1369,13 @@ hall41 = room { pic = 'gfx/hall1.png', act = function(s, w) if w == 1 then - return 'Глядя в ночную темноту я с тоской вспоминаю Барсика...'; + return 'Глядя в ночную темноту, я с тоской вспоминаю Барсика...'; end if w == 2 then return 'Примерно такие были у нас в институте, когда я... Ладно...'; end if w == 3 then - return 'Все, что я мог бы вспомнить я благополучно забыл.'; + return 'Все, что я мог бы вспомнить, я благополучно забыл.'; end end, obj = { @@ -1404,7 +1404,7 @@ cor4 = room { return 'Я тоскливо гляжу в ночную тьму... Я понимаю -- что очень устал... Но я должен идти...'; end if w == 12 then - return 'Эта дверь, как и многие здесь, снабжена считывателем смарткарт. На нем горит красная лампочка.'; + return 'Эта дверь, как и многие здесь, снабжена считывателем смарт-карт. На нем горит красная лампочка.'; end if tonumber(w) >=5 and tonumber(w) <=9 then room4x._num = w - 4; @@ -1517,7 +1517,7 @@ floor5 = room { vobj(4, 'информация', 'Я вижу две двери, ведущие в южный и северный коридоры. На южной {двери} написано: <<уровень 5, категория: информация>>.'), vobj(5, 'красная дверь', 'На северной {двери} нет надписей. Это массивная дверь, обитая красной кожей.'), - vobj(6, 'охранник', 'Между проходами в коридоры установлен стол, за котором сидит {охранник},'); + vobj(6, 'охранник', 'Между проходами в коридоры установлен стол, за которым сидит {охранник},'); }, way = { 'lift' }, }; diff --git a/games/cat/ep3.lua b/games/cat/ep3.lua index 4a01b11..ffe7855 100644 --- a/games/cat/ep3.lua +++ b/games/cat/ep3.lua @@ -17,7 +17,7 @@ lection = room { Согласно квантовой механике, если над ядром не производится наблюдения, то его состояние описывается суперпозицией (смешением) двух состояний — распавшегося ядра и нераспавшегося ядра, следовательно, кот, сидящий в ящике, и жив, и мёртв одновременно. -- Белин повышает голос. -- можно сказать, что это просто игры разума, отвлеченная лирика, но я покажу и докажу, что это не совсем так... ^^ --- Итак, если ящик открыть, то экспериментатор обязан увидеть только какое-нибудь одно конкретное состояние — <<ядро распалось, кот мёртв>> или <<ядро не распалось, кот жив>>. Сам Шредингер думал, что его парадокс доказывает несостоятельность квантовой механики, но мы то с вами знаем, что квантовая механика и есть истинное представление о нашем мире -- снова повышает тон голоса Белин -- и вот независимо друг от друга, что доказывает отчасти истинность предположения -- Ганс Моравек в 1987 и Бруно Маршал в 1988 рассмотрели ситуацию с точки зрения самого кота!^^ +-- Итак, если ящик открыть, то экспериментатор обязан увидеть только какое-нибудь одно конкретное состояние — <<ядро распалось, кот мёртв>> или <<ядро не распалось, кот жив>>. Сам Шредингер думал, что его парадокс доказывает несостоятельность квантовой механики, но мы то с вами знаем, что квантовая механика и есть истинное представление о нашем мире -- снова повышает тон голоса Белин -- и вот, независимо друг от друга, что доказывает отчасти истинность предположения -- Ганс Моравек в 1987 и Бруно Маршал в 1988 рассмотрели ситуацию с точки зрения самого кота!^^ -- Если верна многомировая интерпретация Эверетта, то в результате каждого проведенного эксперимента с котом вселенная расщепляется на две вселенных, в одной из которых кот остается жив, а в другой погибает. В мирах, где кот умирает, он перестает существовать. Напротив, с точки зрения неумершего кота, эксперимент будет продолжаться, не приводя к исчезновению кота. Это происходит потому, что в любом ответвлении кот способен наблюдать результат эксперимента лишь в том мире, в котором он выживает. И если многомировая интерпретация верна, то кот может заметить, что он никогда не погибнет в ходе эксперимента... -- Белин замолкает и осматривает зал... ^^ @@ -27,7 +27,7 @@ lection = room { Мы все с вами тяжело работали этот год, под четким руководством... -- тут Белин бросил взгляд в сторону портретов -- и должен вам сказать, что информации в нашем информационном центре -- Белин посмотрел в потолок -- достаточно, чтобы доказать, я повторяю, научно доказать теоретически и экспериментально истинность многомировой интерпретации... -- Но что это значит для нас? -- Вы не можете этого видеть, но -- Белин смотрит на часы -- уже через несколько минут состав с ураном прибывает к задним воротам института... Урана хватит для того, чтобы обеспечить каждого из вас ядерной бомбой. Так как вы скоро убедитесь в том, что квантовое бессмертие это реальность, то каждый из нас сможет стать непобедимым террористом!!! Вселенная расщепится на множество миров, в каждом из который Вы -- палец Белина указывает в зал -- будете его диктатором и господином!!! -- Белин почти кричал...^^ -Зал не выдержал и взревел. Люди вставали и хлопали... Их глаза горели каким-то бешеным огнем... О Боже, подумал я -- это какое-то наваждение... Мои ноги не слушались меня -- я сидел на своем месте и не мог пошевелиться...^^ +Зал не выдержал и взревел. Люди вставали и хлопали... Их глаза горели каким-то бешеным огнем... О Боже, -- подумал я -- это какое-то наваждение... Мои ноги не слушались меня -- я сидел на своем месте и не мог пошевелиться...^^ Но я отвлекся -- говорит Белин -- продолжим наш опыт. С этими словами он достал из под стола живой комочек... Это был мой Барсик... -- Сейчас я помещу эту кошку в ящик и мы с вами... -- красная пелена застилает мои глаза... ]], @@ -65,14 +65,14 @@ lection = room { end end, obj = { - vobj(1, 'дальше', '{Дальше}'), + vobj(1, 'дальше', '{Дальше}.'), }; }; profdlg = dlg { nam = '!!!', pic = 'gfx/me.png', - dsc = 'Я собираюсь с силами встаю и во всю глотку кричу...', + dsc = 'Я собираюсь с силами, встаю и во всю глотку кричу...', obj = { [1] = phr('Это кот, а не кошка!', '-- Рука Белина останавливается -- его взгляд фокусируется на мне -- он узнает меня!! -- Охрана -- в зале посторонний!!! Убе... Уберите его!!! -- кричит он..', @@ -105,7 +105,7 @@ gdlg1 = dlg { [1] = phr('Положи свое ружье прикладом вперед на стол и толкни его сюда..', 'Охранник неуверенно смотрит на меня..', [[pon(2)]]), - [2] = _phr('Я сказал на стол ружье!!! -- я посильнее надавливаю стволами на Белина -- он близок к обмороку.', 'Охранник оторожно кладет помповое ружье на стол и толкает его ко мне... -- я быстро забираю ружье. Теперь в левой руке у меня обрез, в правом -- помповое ружье.', + [2] = _phr('Я сказал на стол ружье!!! -- я посильнее надавливаю стволами на Белина -- он близок к обмороку.', 'Охранник осторожно кладет помповое ружье на стол и толкает его ко мне... -- я быстро забираю ружье. Теперь в левой руке у меня обрез, в правом -- помповое ружье.', [[pon(3); inv():add('shotgun')]]), [3] = phr('Не нравилось тебе мое лицо да?? Дааа???', 'Охранник молчит, на его лбу выступает пот...', @@ -177,7 +177,7 @@ professor = obj { s._gun = true; objs():add('guardian'); gun._hidden = false; - return 'Я достаю обрез из-под одежды и, перепрыгивая через стол, бросаюсь к Белину.'; + return 'Я достаю обрез из-под одежды и, перепрыгивая через стол, бросаюсь к Белину.'; end end, }; @@ -316,7 +316,7 @@ lest = obj { s._seen = true; return 'Это же пожарная лестница!!!'; end - return 'Прыгать лили нет? Вот в чем вопрос...'; + return 'Прыгать или нет? Вот в чем вопрос...'; end, }; @@ -328,7 +328,7 @@ window = room { return 'в окно'; end, pic = 'gfx/fromwin1.png', - enter = "Это безумие, но все-же я бросаюсь к окну... За спиной я слышу рев толпы..."; + enter = "Это безумие, но все же я бросаюсь к окну... За спиной я слышу рев толпы..."; dsc = 'Я стою на подоконнике и всматриваюсь в ночную пустоту.', obj = { 'lest', @@ -378,7 +378,7 @@ up = room { s._num = s._num + 1; if s._num == 2 then lifeon('ladder'); - return 'Внезапно ночную тьму разрезает луч прожектора и тишину нарушает вой сирены... Похоже, внизу меня заметили...', false; + return 'Внезапно, ночную тьму разрезает луч прожектора и тишину нарушает вой сирены... Похоже, внизу меня заметили...', false; end if s._num > 4 then ladder.way:del('up'); @@ -489,7 +489,7 @@ fire = obj { return 'Я кидаю бумажку на горящий ковер...'; end kover._fire = true; - return 'Я кладу бумагу на ковер... Волоски ковра вспыхивают... Похоже начинается пожар..'; + return 'Я кладу бумагу на ковер... Волоски ковра вспыхивают... Похоже, начинается пожар..'; end }; @@ -701,7 +701,7 @@ escape2 = room { enter = function(s, f) if f == 'room5' then lifeon('escape2'); - return 'В бессилии я бью прикладом в ненавистную дверь. И вдруг, через несколько секунд слышу, как кто-то подходит к двери с внешней стороны... Это охранник!!! Писк срабатывания считывателя и вот дверь открывается. Охранник пятится -- ему в грудь упирается ствол помпового ружья. Мы выходим на площадку пятого этажа.'; + return 'В бессилии я бью прикладом в ненавистную дверь. И вдруг, через несколько секунд слышу, как кто-то подходит к двери с внешней стороны... Это охранник!!! Писк срабатывания считывателя -- и вот, дверь открывается. Охранник пятится -- ему в грудь упирается ствол помпового ружья. Мы выходим на площадку пятого этажа.'; end if f == 'krysha' then lifeon('escape2'); @@ -710,7 +710,7 @@ escape2 = room { life = function(s) s._timer = s._timer + 1; if s._timer == 3 then - return 'Внезапно на этаже раздается звук сирены. -- Внимание!!! На пятом этаже лицо с нулевым уровнем допуска. Повторяю... -- льется голос из невидимых динамиков.'; + return 'Внезапно, на этаже раздается звук сирены. -- Внимание!!! На пятом этаже лицо с нулевым уровнем допуска. Повторяю... -- льется голос из невидимых динамиков.'; end if s._timer > 3 then return '-- На пятом этаже лицо с нулевым уровнем доступа!!! -- от воя сирены меня начинает мутить.'; @@ -756,7 +756,7 @@ escape2 = room { return 'Там пламя!', false end if t == 'lift' then - return 'Я вижу что лампочки вызова всех лифтов горят. Скорее всего это означает, что сюда поднимается охрана... Надо спешить!', false; + return 'Я вижу, что лампочки вызова всех лифтов горят. Скорее всего это означает, что сюда поднимается охрана... Надо спешить!', false; end if t == 'krysha' then lifeoff('escape2'); @@ -809,7 +809,7 @@ hall5 = room { return 'Я провожу ладонью по скользкой поверхности одной из колонн... Мрамор!'; end if w == 3 then - return 'Но уж эта то люстра точно из горного хрусталя.'; + return 'Но уж эта-то люстра точно из горного хрусталя.'; end if w == 4 then return 'Темно... Хотя... Что это? Мне кажется, что у задней стороны института стоит поезд.'; @@ -845,7 +845,7 @@ hall5 = room { vobj(5,'западные окна', 'Разбитое {окно} находится слева от меня.'), vobj(6,'небольшая дверь', 'В конце зала, в его северной части, я вижу небольшую деревянную {дверь}.'), vobj(7,'входная дверь', 'За моей спиной входная {дверь}.'), - vobj(8,'картины', 'По стенам развешены {картины} в красивых рамах.'), + vobj(8,'картины', 'По стенам развешаны {картины} в красивых рамах.'), vobj(9,'диваны', 'У стен расставлены мягкие {диваны}.'), }, way = { 'krysha' }, @@ -893,9 +893,9 @@ gudlg = dlg { enter = function(s) lifeoff('mycat'); inv():del('shotgun'); - return [[Странно... Дверь не закрыта... Я осторожно открываю дверь и вхожу в комнату.^^Внезапно я обнаруживаю, что на меня смотрит дуло револьвера. -- Браво, браво, браво -- говорит мне человек в кресле, владелец револьвера. -- Я уже заждался. Тот самый лесник? Ну что же, подождем охрану. А пока -- брось ружье на пол. Мне ничего не остается, как сделать то - что он сказал.]]; + return [[Странно... Дверь не закрыта... Я осторожно открываю дверь и вхожу в комнату.^^Внезапно я обнаруживаю, что на меня смотрит дуло револьвера. -- Браво, браво, браво -- говорит мне человек в кресле, владелец револьвера. -- Я уже заждался. Тот самый лесник? Ну что же, подождем охрану. А пока -- брось ружье на пол. Мне ничего не остается, как сделать то, что он сказал.]]; end, - dsc = [[Передо мной то самое лицо. Лицо с портретов, которые увешивают почти все комнаты этого здания. Лицо спокойное, ничего не выражающее. Слабая улыбка на губах. Надо тянуть время... И я спрашиваю у него:]], + dsc = [[Передо мной то самое лицо. Лицо с портретов, которыми увешаны почти все комнаты этого здания. Лицо спокойное, ничего не выражающее. Слабая улыбка на губах. Надо тянуть время... И я спрашиваю у него:]], obj = { [1] = phr('Может, поговорим?', 'Гм... Ну о чем нам говорить? О чем мне говорить с лесником?', [[pon(2)]]), @@ -909,10 +909,10 @@ gudlg = dlg { [5] = _phr('Ложь!', 'А что если? Представь, что если?... Ты же хакер да? Любишь продумывать все заранее...', [[pon(6);poff(9)]]), - [6] = _phr('Нет! Это не может быть правдой! Если это правда -- рано или поздно мир будет обречен! Тоггда...', + [6] = _phr('Нет! Это не может быть правдой! Если это правда -- рано или поздно мир будет обречен! Тогда...', '-- Да, ты правильно понял... Тогда есть только ТЫ!!! Послушай себя -- кто дал тебе этот ответ? Не его ли ты жаждешь? Не его ли жаждет твое Я? -- Я проваливаюсь в его бездонный взгляд.', [[pon(7)]]), [7] = _phr('Если... Если... То зачем?', - '-- Правильно... Правильно -- вкрадчиво говорит мне человек с портрета... Новая волна страха оглушает меня я падаю на колени... Сердце бешено стучит и вылетает из груди...', + '-- Правильно... Правильно -- вкрадчиво говорит мне человек с портрета... Новая волна страха оглушает меня, я падаю на колени... Сердце бешено стучит и вылетает из груди...', [[pon(8)]]), [8] = _phr('Не могу... Нет...', '-- И если все так, то тебе нечего бояться -- мурлычет он. -- Сердце бьется еще сильнее. И наконец, моя грудь взрывается, мягкий комочек шерсти отталкивается от нее лапами и летит в лицо человеку с портрета. Раздается выстрел, резкая боль в левом плече отрезвляет меня, я вскакиваю на ноги и бросаюсь вперед...',[[return goto('escape3')]]), @@ -1056,7 +1056,7 @@ escape3 = room { dsc = [[Я нахожусь в небольшой, но уютной комнате. Посреди стоит стол. Рядом опрокинуто кресло. Из небольшой люстры равномерно льется свет. Два небольших книжных шкафа стоят у стен.]], obj = { vobj(1, 'человек', 'На полу, прислонившись к столу, сидит {человек} с портретов. Струйка крови стекает с его губ -- он стонет.'), - vobj(2, 'картины', 'По стенам развешены {картины}.'), + vobj(2, 'картины', 'По стенам развешаны {картины}.'), vobj(3, 'дверь', 'За моей спиной {дверь}.'), 'revol', 'shkaf', @@ -1095,7 +1095,7 @@ nwall = room { way = {'eside2','wside' }, act = function(s, w) if w == 1 then - return 'Да -- водосточная труба... Довольно крепкая. Но вряд-ли я смогу взобраться по ней наверх.'; + return 'Да -- водосточная труба... Довольно крепкая. Но вряд ли я смогу взобраться по ней наверх.'; end end, enter = function(s, f) diff --git a/games/cat/main.lua b/games/cat/main.lua index 3007888..9c07b63 100644 --- a/games/cat/main.lua +++ b/games/cat/main.lua @@ -1,3 +1,4 @@ +-- $Name:Возвращение квантового кота$ game.codepage="UTF-8"; game.act = 'Не получается.'; game.inv = 'Гм.. Странная штука..'; @@ -30,7 +31,7 @@ main = room { начать все по-порядку...^^ В тот холодный февральский день я как всегда собрался ехать в поселок...]], -obj = { vobj(1,'Дальше','{Дальше}') }, +obj = { vobj(1,'Дальше','{Дальше}.') }, act = function() return goto('home'); end, diff --git a/games/tutorial/main.lua b/games/tutorial/main.lua index 6a3c8d5..aa9052f 100644 --- a/games/tutorial/main.lua +++ b/games/tutorial/main.lua @@ -1,10 +1,17 @@ +-- $Name:Обучение game.codepage="UTF-8" +game.act = 'Не получается.'; +game.inv = 'Гм.. Не то..'; +game.use = 'Не сработает...'; game.dsc = [[Команды:^ look(или просто ввод), act <на что> (или просто на что), use <что> [на что], go <куда>,^ back, inv, way, obj, quit, save , load . Работает автодополнение по табуляции.^^]]; +game.pic = 'stead.png'; + +set_music('ramparts.mod'); main = room { - nam = 'туториал', + nam = 'Обучение', act = function() return goto('r1'); end, @@ -12,7 +19,7 @@ main = room { Каждая сцена игры представляет собой описание статической и динамической части.^^ Динамическая часть сцены состоит из объектов, персонажей и т.д. С динамической частью -игрок может взаимодействовать с помощью мыши, с помощью нажатий на подсвеченные ссылки.^^ +игрок может взаимодействовать с помощью мыши, нажимая на подсвеченные ссылки.^^ В данной сцене единственным объектом является объект "Дальше" -- который вы видите внизу текста. Итак, для продолжения обучения вы можете нажать на "Дальше". @@ -69,7 +76,7 @@ r1 = room { }; r2 = room { - nam = 'урок 2', + nam = 'Урок 2', enter = function() lifeon('r2'); end, @@ -112,7 +119,7 @@ vasa = obj { } r3 = room { - nam = 'урок 3', + nam = 'Урок 3', enter = function() lifeon('r3'); end, @@ -131,7 +138,7 @@ r3 = room { }; r4 = room { - nam = 'урок 4', + nam = 'Урок 4', enter = function() apple._knife = false; lifeon('r4'); @@ -148,7 +155,7 @@ r4 = room { }; r5 = room { - nam = 'урок 5', + nam = 'Урок 5', dsc = [[Хорошо. Изучаем переходы. Идите на урок 6. Для этого нажмите мышью на соответствующую ссылку.]], exit = function(s, t) if t ~= 'r6' then @@ -159,7 +166,7 @@ r5 = room { }; r6 = room { - nam = 'урок 6', + nam = 'Урок 6', dsc = [[Идите на последний урок.]], exit = function(s, t) if t ~= 'theend' then @@ -170,9 +177,19 @@ r6 = room { }; theend = room { - nam = 'последний урок', + nam = 'Последний урок', dsc = [[Вы можете сохранять игру, выбрать другую игру или выполнять иные действия с помощью меню. Для вызова меню нажмите клавишу esc или нажмите мышью на символ меню (справа снизу). -Теперь вы готовы к игре. Удачи!!!]], +Теперь вы готовы к игре. Удачи!!!^^ +В обучении использован трек:^Ramparts by Scorpion]], + obj = { vway('клавиши', 'Посмотреть {список клавиш}.', 'help')}, }; +help = room { + nam = 'Список клавиш', + dsc = [[ +esc - меню^ +alt-q - выход^ +alt-enter - полный экран/окно^ +Вверх/Вниз, Пробел/Backspace, PgUp/PgDn - прокрутка главного окна.]], +}; diff --git a/games/tutorial/ramparts.mod b/games/tutorial/ramparts.mod new file mode 100644 index 0000000000000000000000000000000000000000..623dc7a3d175ed0fe5b19865acf15565a91981fa GIT binary patch literal 22664 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 M-n{)T6!znP0u&>+*#H0l literal 0 HcmV?d00001 diff --git a/games/tutorial/stead.png b/games/tutorial/stead.png new file mode 100644 index 0000000000000000000000000000000000000000..526195aff32fef17ff408f290d9ab3f132a052e3 GIT binary patch literal 14611 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 dZ9nh=kDMqXM)s$9Y}^nU??xZwZ* literal 0 HcmV?d00001 diff --git a/icon/Makefile b/icon/Makefile new file mode 100644 index 0000000..dcdf8b7 --- /dev/null +++ b/icon/Makefile @@ -0,0 +1,7 @@ +include ../Rules.make +clean: +all: +install: + install -d -m0755 $(ICONPATH) + install -m0644 sdl_instead.png $(ICONPATH) + diff --git a/icon/Makefile.windows b/icon/Makefile.windows new file mode 100644 index 0000000..8d27c9c --- /dev/null +++ b/icon/Makefile.windows @@ -0,0 +1,5 @@ +clean: +all: +install: + if not exist ..\bin\icon mkdir ..\bin\icon + copy sdl_instead.png ..\bin\icon diff --git a/icon/book16x16.ico b/icon/book16x16.ico new file mode 100644 index 0000000000000000000000000000000000000000..ccde08f7fdcd2bd7bc5de4c94584c51da8b125bb GIT binary patch literal 1150 zcmZ{j3rtgI6vsb`F~&zgf?M`*!x=Y?8$-6Z1avBqi4SyI6=iB*ozTt|u<{T#sMwBI zfsu%?QCx{IDA{bmqA41IN-YJ-#8*|Sh|+D~oXD7IZE62IH`|gWhI8|~-?{&D{<)9u zT*iFp@b_nQ4r0P-jJ?1ZTTGBd%0D_SQ-u!|W)K0ytHh!?vuCV0UYvHRNGj3?&YhD$ z+D>9Sv5{Cw1QQF1mk7qDA3MO9D2lTAOJ1A1$=I%baKq`vok?JD@Ml-5aBDl&X%~(X} zd=+{5L^#2=@xM`LNR3FyFT_}PA#kM#?#l`|EO~JC9tF&qxZaWmnYs$n&K{h(YeQwF z+)CCE&c8KRUR_~(4L`q=pzj2~z|Ht1d>Qh@ zs|U&I%lRp|{o5WNALEv_T!X^=1o@Z7@P(=kJ3bYXFBuEoO~=0C8YI?tA@X3MoBEFs zvj}egUrCf5YpTEbr>mgZ@|eUD!P+2eYR;FCwpg)ZQygM5@{oPb=6EM6MxWC);awgh zK2JVwW_;K3V}(t({`f7qsOq$C81BS^D$|-+(NAeLt-qIB9(g3+pYv``%Jrl-nx9g? zS!x*Zei)yjr+hjwO_(h&Yx~9Np?qnH#?YzIb`BJ`^bRR|?ZZ4CFIw3@=6QSNNB3l{ zx5pLcM{bF_`)Y*X@E+>tg11Y2xXAQy(nWcM^1|hN>thAY+Y%48$r{dIBrUAo_6*C{ z@oQ)K2L$g-FN}#6AC2UU|HT{ch3{w`g-21Vxqa0Im)1Hmthc+I<@!Fm|GXE~&2~(N ztXjwY1KhWIEp|RiY&<>1yvrjac={k^@GG1O5_P$W5 zyK~C!ao6|QMjB1lhlWv)M|ScwH)o5cH2$yPG8v&FeHCLSVo1u^GcfiyK5oFv literal 0 HcmV?d00001 diff --git a/icon/sdl_instead.ico b/icon/sdl_instead.ico new file mode 100644 index 0000000000000000000000000000000000000000..22265463e42c7dad02f79efd7c47ddeb8e2c1ca8 GIT binary patch literal 2462 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 literal 0 HcmV?d00001 diff --git a/readme.txt b/readme.txt index 88d9920..73a87a4 100644 --- a/readme.txt +++ b/readme.txt @@ -1,19 +1,28 @@ Deps: -sdl, sdl-mixer, sdl-image, sdl-ttf, lua5.1 - -On debian systems: -apt-get install liblua5.1-dev libreadline-dev libsdl1.2-dev libsdl-ttf2.0-dev libsdl-image1.2-dev libsdl-mixer1.2-dev libreadline5-dev - -make -make install -sdl-instead + sdl, sdl-mixer, sdl-image, sdl-ttf, lua5.1 To run just from build dir use: -rm Rules.make -ln -s Rules.make.standalone Rules.make -make clean -make -./sdl-instead + rm -f Rules.make + ln -s Rules.make.standalone Rules.make + make clean + make + ./sdl-instead + +To install into system: + + # as root + rm -f Rules.make + ln -s Rules.make.system Rules.make + make clean + make install + sdl-instead + +On debian systems: + apt-get install liblua5.1-dev libreadline-dev libsdl1.2-dev libsdl-ttf2.0-dev libsdl-image1.2-dev libsdl-mixer1.2-dev libreadline5-dev + +building deb package: + build-essential + debuild diff --git a/src/instead/Makefile b/src/instead/Makefile index 3a8edc4..ddce230 100644 --- a/src/instead/Makefile +++ b/src/instead/Makefile @@ -2,7 +2,7 @@ include ../../Rules.make all: instead instead: instead.c rline.c - $(CC) $(CFLAGS) -DSTEAD_PATH=\"${STEADPATH}/\" instead.c $(LUA_CFLAGS) rline.c $(LUA_LFLAGS) -lreadline -o instead + $(CC) $(CFLAGS) -DSTEAD_PATH=\"${STEADPATH}/\" instead.c $(LUA_CFLAGS) rline.c $(LUA_LFLAGS) -lncurses -lreadline -o instead clean: rm -rf *.o instead install: diff --git a/src/instead/copying b/src/instead/copying new file mode 100644 index 0000000..d60c31a --- /dev/null +++ b/src/instead/copying @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/src/instead/rline.c b/src/instead/rline.c index a8de73c..dba1caf 100644 --- a/src/instead/rline.c +++ b/src/instead/rline.c @@ -12,7 +12,7 @@ #include #include #include -#ifdef HAVE_ICONV +#ifdef _HAVE_ICONV #include #include #endif @@ -241,7 +241,7 @@ char **tquest_completion(char *text, int start, int end) /* Tell the GNU Readline library how to complete. We want to try to complete on command names if this is the first word in the line, or on filenames if not. */ -#ifdef HAVE_ICONV +#ifdef _HAVE_ICONV static char curcp[64]; static char *fromcp; #endif @@ -257,7 +257,7 @@ void initialize_readline(void) rl_parse_and_bind(strdup("Control-g: 'go '")); /* Tell the completer that we want a crack first. */ rl_attempted_completion_function = (CPPFunction *) tquest_completion; -#ifdef HAVE_ICONV +#ifdef _HAVE_ICONV strncpy(curcp, nl_langinfo(CODESET), sizeof(curcp)); fromcp = getstring("return game.codepage;"); #endif @@ -292,7 +292,7 @@ char *string_fromwc(const wchar_t *str) pstr[ wcstombs(pstr, str, mbs_size) ] = 0; return pstr; } -#ifdef HAVE_ICONV +#ifdef _HAVE_ICONV #define CHAR_MAX_LEN 4 static char *decode(iconv_t hiconv, const char *s) { diff --git a/src/instead/tutorial/main.lua b/src/instead/tutorial/main.lua index 74b99f2..41b2d85 100644 --- a/src/instead/tutorial/main.lua +++ b/src/instead/tutorial/main.lua @@ -1,10 +1,11 @@ game.codepage="UTF-8" +game.err = "Ошибка!" game.dsc = [[Команды:^ look(или просто ввод), act <на что> (или просто на что), use <что> [на что], go <куда>,^ back, inv, way, obj, quit, save , load . Работает автодополнение по табуляции.^^]]; main = room { - nam = 'туториал', + nam = 'Обучение', act = function() return goto('r1'); end, diff --git a/src/sdl-instead/Makefile b/src/sdl-instead/Makefile index 8fdb52b..d756552 100644 --- a/src/sdl-instead/Makefile +++ b/src/sdl-instead/Makefile @@ -1,27 +1,24 @@ include ../../Rules.make -CFLAGS += $(SDL_CFLAGS) $(LUA_CFLAGS) -DSTEAD_PATH=\"${STEADPATH}/\" -DGAMES_PATH=\"${GAMESPATH}/\" -DTHEMES_PATH=\"${THEMESPATH}/\" -DVERSION=$(VERSION) +CFLAGS += $(SDL_CFLAGS) $(LUA_CFLAGS) -DSTEAD_PATH=\"${STEADPATH}/\" -DGAMES_PATH=\"${GAMESPATH}/\" -DTHEMES_PATH=\"${THEMESPATH}/\" -DVERSION=$(VERSION) -DICON_PATH=\"${ICONPATH}/\" LDFLAGS += $(SDL_LFLAGS) $(LUA_LFLAGS) -SRC := graphics.c input.c game.c main.c instead.c sound.c +SRC := graphics.c input.c game.c main.c instead.c sound.c SDL_rotozoom.c $(PLATFORM) OBJ := $(patsubst %.c, %.o, $(SRC)) -all: sdl-instead -PREFIX:=/usr/local +all: sdl-instead$(EXE) -$(OBJ): %.o : %.c gui.h +$(OBJ): %.o : %.c gui.h menu.h menu-en.h $(CC) -c $(<) $(I) $(CFLAGS) -sdl-instead: $(OBJ) +sdl-instead$(EXE): $(OBJ) $(RESOURCES) $(CC) $(CFLAGS) $(^) $(LDFLAGS) -o $(@) -# strip sdl-instead install: - install -d -m 0755 $(BIN) - install -m 0755 sdl-instead $(BIN)/sdl-instead + $(INSTALLD) $(BIN) + $(INSTALL) sdl-instead$(EXE) $(BIN)/sdl-instead$(EXE) clean: - rm -f *.o sdl-instead - + $(RM) -f *.o sdl-instead$(EXE) diff --git a/src/sdl-instead/SDL_rotozoom.c b/src/sdl-instead/SDL_rotozoom.c new file mode 100644 index 0000000..d82265c --- /dev/null +++ b/src/sdl-instead/SDL_rotozoom.c @@ -0,0 +1,1355 @@ +/* + + SDL_rotozoom.c - rotozoomer for 32bit or 8bit surfaces + + LGPL (c) A. Schiffler + +*/ + +#ifdef WIN32 +#include +#endif + +#include +#include + +#include "SDL_rotozoom.h" + +#define MAX(a,b) (((a) > (b)) ? (a) : (b)) + + +/* + + 32bit integer-factor averaging Shrinker + + Shrinks 32bit RGBA/ABGR 'src' surface to 'dst' surface. + +*/ + +int shrinkSurfaceRGBA(SDL_Surface * src, SDL_Surface * dst, int factorx, int factory) +{ + int x, y, dx, dy, sgap, dgap, ra, ga, ba, aa; + int n_average; + tColorRGBA *sp, *osp, *oosp; + tColorRGBA *dp; + + /* + * Averaging integer shrink + */ + + /* Precalculate division factor */ + n_average = factorx*factory; + + /* + * Scan destination + */ + sp = (tColorRGBA *) src->pixels; + sgap = src->pitch - src->w * 4; + + dp = (tColorRGBA *) dst->pixels; + dgap = dst->pitch - dst->w * 4; + + for (y = 0; y < dst->h; y++) { + + osp=sp; + for (x = 0; x < dst->w; x++) { + + /* Trace out source box and accumulate */ + oosp=sp; + ra=ga=ba=aa=0; + for (dy=0; dy < factory; dy++) { + for (dx=0; dx < factorx; dx++) { + ra += sp->r; + ga += sp->g; + ba += sp->b; + aa += sp->a; + + sp++; + } + /* src dx loop */ + sp = (tColorRGBA *)((Uint8*)sp + (src->pitch - 4*factorx)); // next y + } + /* src dy loop */ + + /* next box-x */ + sp = (tColorRGBA *)((Uint8*)oosp + 4*factorx); + + /* Store result in destination */ + dp->r = ra/n_average; + dp->g = ga/n_average; + dp->b = ba/n_average; + dp->a = aa/n_average; + + /* + * Advance destination pointer + */ + dp++; + } + /* dst x loop */ + + /* next box-y */ + sp = (tColorRGBA *)((Uint8*)osp + src->pitch*factory); + + /* + * Advance destination pointers + */ + dp = (tColorRGBA *) ((Uint8 *) dp + dgap); + } + /* dst y loop */ + + return (0); +} + +/* + + 8bit integer-factor averaging Shrinker + + Shrinks 8bit Y 'src' surface to 'dst' surface. + +*/ + +int shrinkSurfaceY(SDL_Surface * src, SDL_Surface * dst, int factorx, int factory) +{ + int x, y, dx, dy, sgap, dgap, a; + int n_average; + Uint8 *sp, *osp, *oosp; + Uint8 *dp; + + /* + * Averaging integer shrink + */ + + /* Precalculate division factor */ + n_average = factorx*factory; + + /* + * Scan destination + */ + sp = (Uint8 *) src->pixels; + sgap = src->pitch - src->w; + + dp = (Uint8 *) dst->pixels; + dgap = dst->pitch - dst->w; + + for (y = 0; y < dst->h; y++) { + + osp=sp; + for (x = 0; x < dst->w; x++) { + + /* Trace out source box and accumulate */ + oosp=sp; + a=0; + for (dy=0; dy < factory; dy++) { + for (dx=0; dx < factorx; dx++) { + a += (*sp); + /* next x */ + sp++; + } + /* end src dx loop */ + /* next y */ + sp = (Uint8 *)((Uint8*)sp + (src->pitch - factorx)); + } + /* end src dy loop */ + + /* next box-x */ + sp = (Uint8 *)((Uint8*)oosp + factorx); + + /* Store result in destination */ + *dp = a/n_average; + + /* + * Advance destination pointer + */ + dp++; + } + /* end dst x loop */ + + /* next box-y */ + sp = (Uint8 *)((Uint8*)osp + src->pitch*factory); + + /* + * Advance destination pointers + */ + dp = (Uint8 *)((Uint8 *)dp + dgap); + } + /* end dst y loop */ + + return (0); +} + +/* + + 32bit Zoomer with optional anti-aliasing by bilinear interpolation. + + Zoomes 32bit RGBA/ABGR 'src' surface to 'dst' surface. + +*/ + +int zoomSurfaceRGBA(SDL_Surface * src, SDL_Surface * dst, int flipx, int flipy, int smooth) +{ + int x, y, sx, sy, *sax, *say, *csax, *csay, csx, csy, ex, ey, t1, t2, sstep, lx, ly; + tColorRGBA *c00, *c01, *c10, *c11, *cswap; + tColorRGBA *sp, *csp, *dp; + int dgap; + + /* + * Variable setup + */ + if (smooth) { + /* + * For interpolation: assume source dimension is one pixel + */ + /* + * smaller to avoid overflow on right and bottom edge. + */ + sx = (int) (65536.0 * (float) (src->w - 1) / (float) dst->w); + sy = (int) (65536.0 * (float) (src->h - 1) / (float) dst->h); + } else { + sx = (int) (65536.0 * (float) src->w / (float) dst->w); + sy = (int) (65536.0 * (float) src->h / (float) dst->h); + } + + /* + * Allocate memory for row increments + */ + if ((sax = (int *) malloc((dst->w + 1) * sizeof(Uint32))) == NULL) { + return (-1); + } + if ((say = (int *) malloc((dst->h + 1) * sizeof(Uint32))) == NULL) { + free(sax); + return (-1); + } + + /* + * Precalculate row increments + */ + sp = csp = (tColorRGBA *) src->pixels; + dp = (tColorRGBA *) dst->pixels; + + if (flipx) csp += (src->w-1); + if (flipy) csp += (src->pitch*(src->h-1)); + + csx = 0; + csax = sax; + for (x = 0; x <= dst->w; x++) { + *csax = csx; + csax++; + csx &= 0xffff; + csx += sx; + } + csy = 0; + csay = say; + for (y = 0; y <= dst->h; y++) { + *csay = csy; + csay++; + csy &= 0xffff; + csy += sy; + } + + dgap = dst->pitch - dst->w * 4; + + /* + * Switch between interpolating and non-interpolating code + */ + if (smooth) { + + /* + * Interpolating Zoom + */ + + /* + * Scan destination + */ + ly = 0; + csay = say; + for (y = 0; y < dst->h; y++) { + /* + * Setup color source pointers + */ + c00 = csp; + c01 = csp; + c01++; + c10 = (tColorRGBA *) ((Uint8 *) csp + src->pitch); + c11 = c10; + c11++; + csax = sax; + if (flipx) { + cswap = c00; c00=c01; c01=cswap; + cswap = c10; c10=c11; c11=cswap; + } + if (flipy) { + cswap = c00; c00=c10; c10=cswap; + cswap = c01; c01=c11; c11=cswap; + } + lx = 0; + for (x = 0; x < dst->w; x++) { + /* + * Interpolate colors + */ + ex = (*csax & 0xffff); + ey = (*csay & 0xffff); + t1 = ((((c01->r - c00->r) * ex) >> 16) + c00->r) & 0xff; + t2 = ((((c11->r - c10->r) * ex) >> 16) + c10->r) & 0xff; + dp->r = (((t2 - t1) * ey) >> 16) + t1; + t1 = ((((c01->g - c00->g) * ex) >> 16) + c00->g) & 0xff; + t2 = ((((c11->g - c10->g) * ex) >> 16) + c10->g) & 0xff; + dp->g = (((t2 - t1) * ey) >> 16) + t1; + t1 = ((((c01->b - c00->b) * ex) >> 16) + c00->b) & 0xff; + t2 = ((((c11->b - c10->b) * ex) >> 16) + c10->b) & 0xff; + dp->b = (((t2 - t1) * ey) >> 16) + t1; + t1 = ((((c01->a - c00->a) * ex) >> 16) + c00->a) & 0xff; + t2 = ((((c11->a - c10->a) * ex) >> 16) + c10->a) & 0xff; + dp->a = (((t2 - t1) * ey) >> 16) + t1; + + /* + * Advance source pointers + */ + csax++; + sstep = (*csax >> 16); + lx += sstep; + if (lx >= src->w) sstep = 0; + if (flipx) sstep = -sstep; + c00 += sstep; + c01 += sstep; + c10 += sstep; + c11 += sstep; + /* + * Advance destination pointer + */ + dp++; + } + /* + * Advance source pointer + */ + csay++; + sstep = (*csay >> 16); + ly += sstep; + if (ly >= src->h) sstep = 0; + sstep *= src->pitch; + if (flipy) sstep = -sstep; + csp = (tColorRGBA *) ((Uint8 *) csp + sstep); + + /* + * Advance destination pointers + */ + dp = (tColorRGBA *) ((Uint8 *) dp + dgap); + } + } else { + + /* + * Non-Interpolating Zoom + */ + + csay = say; + for (y = 0; y < dst->h; y++) { + sp = csp; + csax = sax; + for (x = 0; x < dst->w; x++) { + /* + * Draw + */ + *dp = *sp; + /* + * Advance source pointers + */ + csax++; + sstep = (*csax >> 16); + if (flipx) sstep = -sstep; + sp += sstep; + /* + * Advance destination pointer + */ + dp++; + } + /* + * Advance source pointer + */ + csay++; + sstep = (*csay >> 16) * src->pitch; + if (flipy) sstep = -sstep; + csp = (tColorRGBA *) ((Uint8 *) csp + sstep); + + /* + * Advance destination pointers + */ + dp = (tColorRGBA *) ((Uint8 *) dp + dgap); + } + } + + /* + * Remove temp arrays + */ + free(sax); + free(say); + + return (0); +} + +/* + + 8bit Zoomer without smoothing. + + Zoomes 8bit palette/Y 'src' surface to 'dst' surface. + +*/ + +int zoomSurfaceY(SDL_Surface * src, SDL_Surface * dst, int flipx, int flipy) +{ + Uint32 x, y, sx, sy, *sax, *say, *csax, *csay, csx, csy, sstep; + Uint8 *sp, *dp, *csp; + int dgap; + + /* + * Variable setup + */ + sx = (Uint32) (65536.0 * (float) src->w / (float) dst->w); + sy = (Uint32) (65536.0 * (float) src->h / (float) dst->h); + + + /* + * Allocate memory for row increments + */ + if ((sax = (Uint32 *) malloc((dst->w + 1) * sizeof(Uint32))) == NULL) { + return (-1); + } + if ((say = (Uint32 *) malloc((dst->h + 1) * sizeof(Uint32))) == NULL) { + free(sax); + return (-1); + } + + /* + * Pointer setup + */ + sp = csp = (Uint8 *) src->pixels; + dp = (Uint8 *) dst->pixels; + dgap = dst->pitch - dst->w; + + if (flipx) csp += (src->w-1); + if (flipy) csp = ( (Uint8*)csp + src->pitch*(src->h-1) ); + + /* + * Precalculate row increments + */ + csx = 0; + csax = sax; + for (x = 0; x <= dst->w; x++) { + *csax = csx; + csax++; + csx &= 0xffff; + csx += sx; + } + csy = 0; + csay = say; + for (y = 0; y <= dst->h; y++) { + *csay = csy; + csay++; + csy &= 0xffff; + csy += sy; + } + + + /* + * Draw + */ + csay = say; + for (y = 0; y < dst->h; y++) { + csax = sax; + sp = csp; + for (x = 0; x < dst->w; x++) { + /* + * Draw + */ + *dp = *sp; + /* + * Advance source pointers + */ + csax++; + sstep = (*csax >> 16); + if (flipx) sstep = -sstep; + sp += sstep; + /* + * Advance destination pointer + */ + dp++; + } + /* + * Advance source pointer (for row) + */ + csay++; + sstep = (*csay >> 16) * src->pitch; + if (flipy) sstep = -sstep; + csp = ((Uint8 *) csp + sstep); + + /* + * Advance destination pointers + */ + dp += dgap; + } + + /* + * Remove temp arrays + */ + free(sax); + free(say); + + return (0); +} + +/* + + 32bit Rotozoomer with optional anti-aliasing by bilinear interpolation. + + Rotates and zoomes 32bit RGBA/ABGR 'src' surface to 'dst' surface. + +*/ + +void transformSurfaceRGBA(SDL_Surface * src, SDL_Surface * dst, int cx, int cy, int isin, int icos, int flipx, int flipy, int smooth) +{ + int x, y, t1, t2, dx, dy, xd, yd, sdx, sdy, ax, ay, ex, ey, sw, sh; + tColorRGBA c00, c01, c10, c11, cswap; + tColorRGBA *pc, *sp; + int gap; + + /* + * Variable setup + */ + xd = ((src->w - dst->w) << 15); + yd = ((src->h - dst->h) << 15); + ax = (cx << 16) - (icos * cx); + ay = (cy << 16) - (isin * cx); + sw = src->w - 1; + sh = src->h - 1; + pc = dst->pixels; + gap = dst->pitch - dst->w * 4; + + /* + * Switch between interpolating and non-interpolating code + */ + if (smooth) { + for (y = 0; y < dst->h; y++) { + dy = cy - y; + sdx = (ax + (isin * dy)) + xd; + sdy = (ay - (icos * dy)) + yd; + for (x = 0; x < dst->w; x++) { + dx = (sdx >> 16); + dy = (sdy >> 16); + if ((dx > -1) && (dy > -1) && (dx < src->w) && (dy < src->h)) { + if (flipx) dx = sw - dx; + if (flipy) dy = sh - dy; + sp = (tColorRGBA *) ((Uint8 *) src->pixels + src->pitch * dy); + sp += dx; + c00 = *sp; + sp += 1; + c01 = *sp; + sp = (tColorRGBA *) ((Uint8 *) sp + src->pitch); + c11 = *sp; + sp -= 1; + c10 = *sp; + if (flipx) { + cswap = c00; c00=c01; c01=cswap; + cswap = c10; c10=c11; c11=cswap; + } + if (flipy) { + cswap = c00; c00=c10; c10=cswap; + cswap = c01; c01=c11; c11=cswap; + } + /* + * Interpolate colors + */ + ex = (sdx & 0xffff); + ey = (sdy & 0xffff); + t1 = ((((c01.r - c00.r) * ex) >> 16) + c00.r) & 0xff; + t2 = ((((c11.r - c10.r) * ex) >> 16) + c10.r) & 0xff; + pc->r = (((t2 - t1) * ey) >> 16) + t1; + t1 = ((((c01.g - c00.g) * ex) >> 16) + c00.g) & 0xff; + t2 = ((((c11.g - c10.g) * ex) >> 16) + c10.g) & 0xff; + pc->g = (((t2 - t1) * ey) >> 16) + t1; + t1 = ((((c01.b - c00.b) * ex) >> 16) + c00.b) & 0xff; + t2 = ((((c11.b - c10.b) * ex) >> 16) + c10.b) & 0xff; + pc->b = (((t2 - t1) * ey) >> 16) + t1; + t1 = ((((c01.a - c00.a) * ex) >> 16) + c00.a) & 0xff; + t2 = ((((c11.a - c10.a) * ex) >> 16) + c10.a) & 0xff; + pc->a = (((t2 - t1) * ey) >> 16) + t1; + } + sdx += icos; + sdy += isin; + pc++; + } + pc = (tColorRGBA *) ((Uint8 *) pc + gap); + } + } else { + for (y = 0; y < dst->h; y++) { + dy = cy - y; + sdx = (ax + (isin * dy)) + xd; + sdy = (ay - (icos * dy)) + yd; + for (x = 0; x < dst->w; x++) { + dx = (short) (sdx >> 16); + dy = (short) (sdy >> 16); + if (flipx) dx = (src->w-1)-dx; + if (flipy) dy = (src->h-1)-dy; + if ((dx >= 0) && (dy >= 0) && (dx < src->w) && (dy < src->h)) { + sp = (tColorRGBA *) ((Uint8 *) src->pixels + src->pitch * dy); + sp += dx; + *pc = *sp; + } + sdx += icos; + sdy += isin; + pc++; + } + pc = (tColorRGBA *) ((Uint8 *) pc + gap); + } + } +} + +/* + + 8bit Rotozoomer without smoothing + + Rotates and zoomes 8bit palette/Y 'src' surface to 'dst' surface. + +*/ + +void transformSurfaceY(SDL_Surface * src, SDL_Surface * dst, int cx, int cy, int isin, int icos, int flipx, int flipy) +{ + int x, y, dx, dy, xd, yd, sdx, sdy, ax, ay, sw, sh; + tColorY *pc, *sp; + int gap; + + /* + * Variable setup + */ + xd = ((src->w - dst->w) << 15); + yd = ((src->h - dst->h) << 15); + ax = (cx << 16) - (icos * cx); + ay = (cy << 16) - (isin * cx); + sw = src->w - 1; + sh = src->h - 1; + pc = dst->pixels; + gap = dst->pitch - dst->w; + /* + * Clear surface to colorkey + */ + memset(pc, (unsigned char) (src->format->colorkey & 0xff), dst->pitch * dst->h); + /* + * Iterate through destination surface + */ + for (y = 0; y < dst->h; y++) { + dy = cy - y; + sdx = (ax + (isin * dy)) + xd; + sdy = (ay - (icos * dy)) + yd; + for (x = 0; x < dst->w; x++) { + dx = (short) (sdx >> 16); + dy = (short) (sdy >> 16); + if (flipx) dx = (src->w-1)-dx; + if (flipy) dy = (src->h-1)-dy; + if ((dx >= 0) && (dy >= 0) && (dx < src->w) && (dy < src->h)) { + sp = (tColorY *) (src->pixels); + sp += (src->pitch * dy + dx); + *pc = *sp; + } + sdx += icos; + sdy += isin; + pc++; + } + pc += gap; + } +} + +/* + + 32bit specialized 90degree rotator + + Rotates and zooms 'src' surface to 'dst' surface in 90degree increments. + + (contributed by Jeff Schiller) + +*/ +SDL_Surface* rotateSurface90Degrees(SDL_Surface* pSurf, int numClockwiseTurns) +{ + int row, col, newWidth, newHeight; + SDL_Surface* pSurfOut; + + /* Has to be a valid surface pointer and only 32-bit surfaces (for now) */ + if (!pSurf || pSurf->format->BitsPerPixel != 32) { return NULL; } + + /* normalize numClockwiseTurns */ + while(numClockwiseTurns < 0) { numClockwiseTurns += 4; } + numClockwiseTurns = (numClockwiseTurns % 4); + + /* if it's even, our new width will be the same as the source surface */ + newWidth = (numClockwiseTurns % 2) ? (pSurf->h) : (pSurf->w); + newHeight = (numClockwiseTurns % 2) ? (pSurf->w) : (pSurf->h); + pSurfOut = SDL_CreateRGBSurface( pSurf->flags, newWidth, newHeight, pSurf->format->BitsPerPixel, + pSurf->format->Rmask, + pSurf->format->Gmask, + pSurf->format->Bmask, + pSurf->format->Amask); + if(!pSurfOut) { + return NULL; + } + + if(numClockwiseTurns != 0) { + SDL_LockSurface(pSurf); + SDL_LockSurface(pSurfOut); + switch(numClockwiseTurns) { + + /* rotate clockwise */ + case 1: /* rotated 90 degrees clockwise */ + { + Uint32* srcBuf = NULL; + Uint32* dstBuf = NULL; + + for (row = 0; row < pSurf->h; ++row) { + srcBuf = (Uint32*)(pSurf->pixels) + (row*pSurf->pitch/4); + dstBuf = (Uint32*)(pSurfOut->pixels) + (pSurfOut->w - row - 1); + for (col = 0; col < pSurf->w; ++col) { + *dstBuf = *srcBuf; + ++srcBuf; + dstBuf += pSurfOut->pitch/4; + } + /* end for(col) */ + } + /* end for(row) */ + } + break; + + case 2: /* rotated 180 degrees clockwise */ + { + Uint32* srcBuf = NULL; + Uint32* dstBuf = NULL; + + for(row = 0; row < pSurf->h; ++row) { + srcBuf = (Uint32*)(pSurf->pixels) + (row*pSurf->pitch/4); + dstBuf = (Uint32*)(pSurfOut->pixels) + ((pSurfOut->h - row - 1)*pSurfOut->pitch/4) + (pSurfOut->w - 1); + for(col = 0; col < pSurf->w; ++col) { + *dstBuf = *srcBuf; + ++srcBuf; + --dstBuf; + } + } + } + break; + + case 3: + { + Uint32* srcBuf = NULL; + Uint32* dstBuf = NULL; + + for(row = 0; row < pSurf->h; ++row) { + srcBuf = (Uint32*)(pSurf->pixels) + (row*pSurf->pitch/4); + dstBuf = (Uint32*)(pSurfOut->pixels) + row + ((pSurfOut->h - 1)*pSurfOut->pitch/4); + for(col = 0; col < pSurf->w; ++col) { + *dstBuf = *srcBuf; + ++srcBuf; + dstBuf -= pSurfOut->pitch/4; + } + } + } + break; + } + /* end switch */ + + SDL_UnlockSurface(pSurf); + SDL_UnlockSurface(pSurfOut); + } + /* end if numClockwiseTurns > 0 */ + else { + /* simply copy surface to output */ + if(SDL_BlitSurface(pSurf, NULL, pSurfOut, NULL)) { + return NULL; + } + } + return pSurfOut; +} + +/* + + rotozoomSurface() + + Rotates and zoomes a 32bit or 8bit 'src' surface to newly created 'dst' surface. + 'angle' is the rotation in degrees. 'zoom' a scaling factor. If 'smooth' is 1 + then the destination 32bit surface is anti-aliased. If the surface is not 8bit + or 32bit RGBA/ABGR it will be converted into a 32bit RGBA format on the fly. + +*/ + +#define VALUE_LIMIT 0.001 + +/* Local rotozoom-size function with trig result return */ + +void rotozoomSurfaceSizeTrig(int width, int height, double angle, double zoomx, double zoomy, int *dstwidth, int *dstheight, + double *canglezoom, double *sanglezoom) +{ + double x, y, cx, cy, sx, sy; + double radangle; + int dstwidthhalf, dstheighthalf; + + /* + * Determine destination width and height by rotating a centered source box + */ + radangle = angle * (M_PI / 180.0); + *sanglezoom = sin(radangle); + *canglezoom = cos(radangle); + *sanglezoom *= zoomx; + *canglezoom *= zoomx; + x = width / 2; + y = height / 2; + cx = *canglezoom * x; + cy = *canglezoom * y; + sx = *sanglezoom * x; + sy = *sanglezoom * y; + + dstwidthhalf = MAX((int) + ceil(MAX(MAX(MAX(fabs(cx + sy), fabs(cx - sy)), fabs(-cx + sy)), fabs(-cx - sy))), 1); + dstheighthalf = MAX((int) + ceil(MAX(MAX(MAX(fabs(sx + cy), fabs(sx - cy)), fabs(-sx + cy)), fabs(-sx - cy))), 1); + *dstwidth = 2 * dstwidthhalf; + *dstheight = 2 * dstheighthalf; +} + + +/* Publically available rotozoom-size function */ + +void rotozoomSurfaceSizeXY(int width, int height, double angle, double zoomx, double zoomy, int *dstwidth, int *dstheight) +{ + double dummy_sanglezoom, dummy_canglezoom; + + rotozoomSurfaceSizeTrig(width, height, angle, zoomx, zoomy, dstwidth, dstheight, &dummy_sanglezoom, &dummy_canglezoom); +} + +/* Publically available rotozoom-size function */ + +void rotozoomSurfaceSize(int width, int height, double angle, double zoom, int *dstwidth, int *dstheight) +{ + double dummy_sanglezoom, dummy_canglezoom; + + rotozoomSurfaceSizeTrig(width, height, angle, zoom, zoom, dstwidth, dstheight, &dummy_sanglezoom, &dummy_canglezoom); +} + +/* Publically available rotozoom function */ + +SDL_Surface *rotozoomSurface(SDL_Surface * src, double angle, double zoom, int smooth) +{ + return rotozoomSurfaceXY(src, angle, zoom, zoom, smooth); +} + +/* Publically available rotozoom function */ + +SDL_Surface *rotozoomSurfaceXY(SDL_Surface * src, double angle, double zoomx, double zoomy, int smooth) +{ + SDL_Surface *rz_src; + SDL_Surface *rz_dst; + double zoominv; + double sanglezoom, canglezoom, sanglezoominv, canglezoominv; + int dstwidthhalf, dstwidth, dstheighthalf, dstheight; + int is32bit; + int i, src_converted; + int flipx,flipy; + Uint8 r,g,b; + Uint32 colorkey; + int colorKeyAvailable = 0; + + /* + * Sanity check + */ + if (src == NULL) + return (NULL); + + if( src->flags & SDL_SRCCOLORKEY ) + { + colorkey = src->format->colorkey; + SDL_GetRGB(colorkey, src->format, &r, &g, &b); + colorKeyAvailable = 1; + } + /* + * Determine if source surface is 32bit or 8bit + */ + is32bit = (src->format->BitsPerPixel == 32); + if ((is32bit) || (src->format->BitsPerPixel == 8)) { + /* + * Use source surface 'as is' + */ + rz_src = src; + src_converted = 0; + } else { + /* + * New source surface is 32bit with a defined RGBA ordering + */ + rz_src = + SDL_CreateRGBSurface(SDL_SWSURFACE, src->w, src->h, 32, +#if SDL_BYTEORDER == SDL_LIL_ENDIAN + 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000 +#else + 0xff000000, 0x00ff0000, 0x0000ff00, 0x000000ff +#endif + ); + if(colorKeyAvailable) + SDL_SetColorKey(src, 0, 0); + + SDL_BlitSurface(src, NULL, rz_src, NULL); + + if(colorKeyAvailable) + SDL_SetColorKey(src, SDL_SRCCOLORKEY, colorkey); + src_converted = 1; + is32bit = 1; + } + + /* + * Sanity check zoom factor + */ + flipx = (zoomx<0.0); + if (flipx) zoomx=-zoomx; + flipy = (zoomy<0.0); + if (flipy) zoomy=-zoomy; + if (zoomx < VALUE_LIMIT) zoomx = VALUE_LIMIT; + if (zoomy < VALUE_LIMIT) zoomy = VALUE_LIMIT; + zoominv = 65536.0 / (zoomx * zoomx); + + /* + * Check if we have a rotozoom or just a zoom + */ + if (fabs(angle) > VALUE_LIMIT) { + + /* + * Angle!=0: full rotozoom + */ + /* + * ----------------------- + */ + + /* Determine target size */ + rotozoomSurfaceSizeTrig(rz_src->w, rz_src->h, angle, zoomx, zoomy, &dstwidth, &dstheight, &canglezoom, &sanglezoom); + + /* + * Calculate target factors from sin/cos and zoom + */ + sanglezoominv = sanglezoom; + canglezoominv = canglezoom; + sanglezoominv *= zoominv; + canglezoominv *= zoominv; + + /* Calculate half size */ + dstwidthhalf = dstwidth / 2; + dstheighthalf = dstheight / 2; + + /* + * Alloc space to completely contain the rotated surface + */ + rz_dst = NULL; + if (is32bit) { + /* + * Target surface is 32bit with source RGBA/ABGR ordering + */ + rz_dst = + SDL_CreateRGBSurface(SDL_SWSURFACE, dstwidth, dstheight, 32, + rz_src->format->Rmask, rz_src->format->Gmask, + rz_src->format->Bmask, rz_src->format->Amask); + } else { + /* + * Target surface is 8bit + */ + rz_dst = SDL_CreateRGBSurface(SDL_SWSURFACE, dstwidth, dstheight, 8, 0, 0, 0, 0); + } + + if (colorKeyAvailable == 1){ + colorkey = SDL_MapRGB(rz_dst->format, r, g, b); + + SDL_FillRect(rz_dst, NULL, colorkey ); + } + + /* + * Lock source surface + */ + SDL_LockSurface(rz_src); + /* + * Check which kind of surface we have + */ + if (is32bit) { + /* + * Call the 32bit transformation routine to do the rotation (using alpha) + */ + transformSurfaceRGBA(rz_src, rz_dst, dstwidthhalf, dstheighthalf, + (int) (sanglezoominv), (int) (canglezoominv), + flipx, flipy, + smooth); + /* + * Turn on source-alpha support + */ + SDL_SetAlpha(rz_dst, SDL_SRCALPHA, 255); + } else { + /* + * Copy palette and colorkey info + */ + for (i = 0; i < rz_src->format->palette->ncolors; i++) { + rz_dst->format->palette->colors[i] = rz_src->format->palette->colors[i]; + } + rz_dst->format->palette->ncolors = rz_src->format->palette->ncolors; + /* + * Call the 8bit transformation routine to do the rotation + */ + transformSurfaceY(rz_src, rz_dst, dstwidthhalf, dstheighthalf, + (int) (sanglezoominv), (int) (canglezoominv), + flipx, flipy); + SDL_SetColorKey(rz_dst, SDL_SRCCOLORKEY | SDL_RLEACCEL, rz_src->format->colorkey); + } + /* + * Unlock source surface + */ + SDL_UnlockSurface(rz_src); + + } else { + + /* + * Angle=0: Just a zoom + */ + /* + * -------------------- + */ + + /* + * Calculate target size + */ + zoomSurfaceSize(rz_src->w, rz_src->h, zoomx, zoomy, &dstwidth, &dstheight); + + /* + * Alloc space to completely contain the zoomed surface + */ + rz_dst = NULL; + if (is32bit) { + /* + * Target surface is 32bit with source RGBA/ABGR ordering + */ + rz_dst = + SDL_CreateRGBSurface(SDL_SWSURFACE, dstwidth, dstheight, 32, + rz_src->format->Rmask, rz_src->format->Gmask, + rz_src->format->Bmask, rz_src->format->Amask); + } else { + /* + * Target surface is 8bit + */ + rz_dst = SDL_CreateRGBSurface(SDL_SWSURFACE, dstwidth, dstheight, 8, 0, 0, 0, 0); + } + + if (colorKeyAvailable == 1){ + colorkey = SDL_MapRGB(rz_dst->format, r, g, b); + + SDL_FillRect(rz_dst, NULL, colorkey ); + } + + /* + * Lock source surface + */ + SDL_LockSurface(rz_src); + /* + * Check which kind of surface we have + */ + if (is32bit) { + /* + * Call the 32bit transformation routine to do the zooming (using alpha) + */ + zoomSurfaceRGBA(rz_src, rz_dst, flipx, flipy, smooth); + /* + * Turn on source-alpha support + */ + SDL_SetAlpha(rz_dst, SDL_SRCALPHA, 255); + } else { + /* + * Copy palette and colorkey info + */ + for (i = 0; i < rz_src->format->palette->ncolors; i++) { + rz_dst->format->palette->colors[i] = rz_src->format->palette->colors[i]; + } + rz_dst->format->palette->ncolors = rz_src->format->palette->ncolors; + /* + * Call the 8bit transformation routine to do the zooming + */ + zoomSurfaceY(rz_src, rz_dst, flipx, flipy); + SDL_SetColorKey(rz_dst, SDL_SRCCOLORKEY | SDL_RLEACCEL, rz_src->format->colorkey); + } + /* + * Unlock source surface + */ + SDL_UnlockSurface(rz_src); + } + + /* + * Cleanup temp surface + */ + if (src_converted) { + SDL_FreeSurface(rz_src); + } + + /* + * Return destination surface + */ + return (rz_dst); +} + +/* + + zoomSurface() + + Zoomes a 32bit or 8bit 'src' surface to newly created 'dst' surface. + 'zoomx' and 'zoomy' are scaling factors for width and height. If 'smooth' is 1 + then the destination 32bit surface is anti-aliased. If the surface is not 8bit + or 32bit RGBA/ABGR it will be converted into a 32bit RGBA format on the fly. + +*/ + +#define VALUE_LIMIT 0.001 + +void zoomSurfaceSize(int width, int height, double zoomx, double zoomy, int *dstwidth, int *dstheight) +{ + /* + * Sanity check zoom factors + */ + if (zoomx < VALUE_LIMIT) { + zoomx = VALUE_LIMIT; + } + if (zoomy < VALUE_LIMIT) { + zoomy = VALUE_LIMIT; + } + + /* + * Calculate target size + */ + *dstwidth = (int) ((double) width * zoomx); + *dstheight = (int) ((double) height * zoomy); + if (*dstwidth < 1) { + *dstwidth = 1; + } + if (*dstheight < 1) { + *dstheight = 1; + } +} + +SDL_Surface *zoomSurface(SDL_Surface * src, double zoomx, double zoomy, int smooth) +{ + SDL_Surface *rz_src; + SDL_Surface *rz_dst; + int dstwidth, dstheight; + int is32bit; + int i, src_converted; + int flipx, flipy; + + /* + * Sanity check + */ + if (src == NULL) + return (NULL); + + /* + * Determine if source surface is 32bit or 8bit + */ + is32bit = (src->format->BitsPerPixel == 32); + if ((is32bit) || (src->format->BitsPerPixel == 8)) { + /* + * Use source surface 'as is' + */ + rz_src = src; + src_converted = 0; + } else { + /* + * New source surface is 32bit with a defined RGBA ordering + */ + rz_src = + SDL_CreateRGBSurface(SDL_SWSURFACE, src->w, src->h, 32, +#if SDL_BYTEORDER == SDL_LIL_ENDIAN + 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000 +#else + 0xff000000, 0x00ff0000, 0x0000ff00, 0x000000ff +#endif + ); + SDL_BlitSurface(src, NULL, rz_src, NULL); + src_converted = 1; + is32bit = 1; + } + + flipx = (zoomx<0.0); + if (flipx) zoomx = -zoomx; + flipy = (zoomy<0.0); + if (flipy) zoomy = -zoomy; + + /* Get size if target */ + zoomSurfaceSize(rz_src->w, rz_src->h, zoomx, zoomy, &dstwidth, &dstheight); + + /* + * Alloc space to completely contain the zoomed surface + */ + rz_dst = NULL; + if (is32bit) { + /* + * Target surface is 32bit with source RGBA/ABGR ordering + */ + rz_dst = + SDL_CreateRGBSurface(SDL_SWSURFACE, dstwidth, dstheight, 32, + rz_src->format->Rmask, rz_src->format->Gmask, + rz_src->format->Bmask, rz_src->format->Amask); + } else { + /* + * Target surface is 8bit + */ + rz_dst = SDL_CreateRGBSurface(SDL_SWSURFACE, dstwidth, dstheight, 8, 0, 0, 0, 0); + } + + /* + * Lock source surface + */ + SDL_LockSurface(rz_src); + /* + * Check which kind of surface we have + */ + if (is32bit) { + /* + * Call the 32bit transformation routine to do the zooming (using alpha) + */ + zoomSurfaceRGBA(rz_src, rz_dst, flipx, flipy, smooth); + /* + * Turn on source-alpha support + */ + SDL_SetAlpha(rz_dst, SDL_SRCALPHA, 255); + } else { + /* + * Copy palette and colorkey info + */ + for (i = 0; i < rz_src->format->palette->ncolors; i++) { + rz_dst->format->palette->colors[i] = rz_src->format->palette->colors[i]; + } + rz_dst->format->palette->ncolors = rz_src->format->palette->ncolors; + /* + * Call the 8bit transformation routine to do the zooming + */ + zoomSurfaceY(rz_src, rz_dst, flipx, flipy); + SDL_SetColorKey(rz_dst, SDL_SRCCOLORKEY | SDL_RLEACCEL, rz_src->format->colorkey); + } + /* + * Unlock source surface + */ + SDL_UnlockSurface(rz_src); + + /* + * Cleanup temp surface + */ + if (src_converted) { + SDL_FreeSurface(rz_src); + } + + /* + * Return destination surface + */ + return (rz_dst); +} + +SDL_Surface *shrinkSurface(SDL_Surface * src, int factorx, int factory) +{ + SDL_Surface *rz_src; + SDL_Surface *rz_dst; + int dstwidth, dstheight; + int is32bit; + int i, src_converted; + + /* + * Sanity check + */ + if (src == NULL) + return (NULL); + + /* + * Determine if source surface is 32bit or 8bit + */ + is32bit = (src->format->BitsPerPixel == 32); + if ((is32bit) || (src->format->BitsPerPixel == 8)) { + /* + * Use source surface 'as is' + */ + rz_src = src; + src_converted = 0; + } else { + /* + * New source surface is 32bit with a defined RGBA ordering + */ + rz_src = + SDL_CreateRGBSurface(SDL_SWSURFACE, src->w, src->h, 32, +#if SDL_BYTEORDER == SDL_LIL_ENDIAN + 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000 +#else + 0xff000000, 0x00ff0000, 0x0000ff00, 0x000000ff +#endif + ); + SDL_BlitSurface(src, NULL, rz_src, NULL); + src_converted = 1; + is32bit = 1; + } + + /* Get size for target */ + dstwidth=rz_src->w/factorx; + while (dstwidth*factorx>rz_src->w) { dstwidth--; } + dstheight=rz_src->h/factory; + while (dstheight*factory>rz_src->h) { dstheight--; } + + /* + * Alloc space to completely contain the shrunken surface + */ + rz_dst = NULL; + if (is32bit) { + /* + * Target surface is 32bit with source RGBA/ABGR ordering + */ + rz_dst = + SDL_CreateRGBSurface(SDL_SWSURFACE, dstwidth, dstheight, 32, + rz_src->format->Rmask, rz_src->format->Gmask, + rz_src->format->Bmask, rz_src->format->Amask); + } else { + /* + * Target surface is 8bit + */ + rz_dst = SDL_CreateRGBSurface(SDL_SWSURFACE, dstwidth, dstheight, 8, 0, 0, 0, 0); + } + + /* + * Lock source surface + */ + SDL_LockSurface(rz_src); + /* + * Check which kind of surface we have + */ + if (is32bit) { + /* + * Call the 32bit transformation routine to do the shrinking (using alpha) + */ + shrinkSurfaceRGBA(rz_src, rz_dst, factorx, factory); + /* + * Turn on source-alpha support + */ + SDL_SetAlpha(rz_dst, SDL_SRCALPHA, 255); + } else { + /* + * Copy palette and colorkey info + */ + for (i = 0; i < rz_src->format->palette->ncolors; i++) { + rz_dst->format->palette->colors[i] = rz_src->format->palette->colors[i]; + } + rz_dst->format->palette->ncolors = rz_src->format->palette->ncolors; + /* + * Call the 8bit transformation routine to do the shrinking + */ + shrinkSurfaceY(rz_src, rz_dst, factorx, factory); + SDL_SetColorKey(rz_dst, SDL_SRCCOLORKEY | SDL_RLEACCEL, rz_src->format->colorkey); + } + /* + * Unlock source surface + */ + SDL_UnlockSurface(rz_src); + + /* + * Cleanup temp surface + */ + if (src_converted) { + SDL_FreeSurface(rz_src); + } + + /* + * Return destination surface + */ + return (rz_dst); +} diff --git a/src/sdl-instead/SDL_rotozoom.h b/src/sdl-instead/SDL_rotozoom.h new file mode 100644 index 0000000..9773866 --- /dev/null +++ b/src/sdl-instead/SDL_rotozoom.h @@ -0,0 +1,117 @@ + +/* + + SDL_rotozoom - rotozoomer + + LGPL (c) A. Schiffler + +*/ + +#ifndef _SDL_rotozoom_h +#define _SDL_rotozoom_h + +#include + +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef M_PI +#define M_PI 3.141592654 +#endif + +#include "SDL.h" + +/* ---- Defines */ + +#define SMOOTHING_OFF 0 +#define SMOOTHING_ON 1 + +/* ---- Structures */ + + typedef struct tColorRGBA { + Uint8 r; + Uint8 g; + Uint8 b; + Uint8 a; + } tColorRGBA; + + typedef struct tColorY { + Uint8 y; + } tColorY; + + +/* ---- Prototypes */ + +#define DLLINTERFACE + +/* + + rotozoomSurface() + + Rotates and zoomes a 32bit or 8bit 'src' surface to newly created 'dst' surface. + 'angle' is the rotation in degrees. 'zoom' a scaling factor. If 'smooth' is 1 + then the destination 32bit surface is anti-aliased. If the surface is not 8bit + or 32bit RGBA/ABGR it will be converted into a 32bit RGBA format on the fly. + +*/ + + DLLINTERFACE SDL_Surface *rotozoomSurface(SDL_Surface * src, double angle, double zoom, int smooth); + + DLLINTERFACE SDL_Surface *rotozoomSurfaceXY + (SDL_Surface * src, double angle, double zoomx, double zoomy, int smooth); + +/* Returns the size of the target surface for a rotozoomSurface() call */ + + DLLINTERFACE void rotozoomSurfaceSize(int width, int height, double angle, double zoom, int *dstwidth, + int *dstheight); + + DLLINTERFACE void rotozoomSurfaceSizeXY + (int width, int height, double angle, double zoomx, double zoomy, + int *dstwidth, int *dstheight); + +/* + + zoomSurface() + + Zoomes a 32bit or 8bit 'src' surface to newly created 'dst' surface. + 'zoomx' and 'zoomy' are scaling factors for width and height. If 'smooth' is 1 + then the destination 32bit surface is anti-aliased. If the surface is not 8bit + or 32bit RGBA/ABGR it will be converted into a 32bit RGBA format on the fly. + +*/ + + DLLINTERFACE SDL_Surface *zoomSurface(SDL_Surface * src, double zoomx, double zoomy, int smooth); + +/* Returns the size of the target surface for a zoomSurface() call */ + + DLLINTERFACE void zoomSurfaceSize(int width, int height, double zoomx, double zoomy, int *dstwidth, int *dstheight); + + +/* + shrinkSurface() + + Shrinks a 32bit or 8bit 'src' surface ti a newly created 'dst' surface. + 'factorx' and 'factory' are the shrinking ratios (i.e. 2=1/2 the size, + 3=1/3 the size, etc.) The destination surface is antialiased by averaging + the source box RGBA or Y information. If the surface is not 8bit + or 32bit RGBA/ABGR it will be converted into a 32bit RGBA format on the fly. +*/ + + DLLINTERFACE SDL_Surface *shrinkSurface(SDL_Surface * src, int factorx, int factory); + +/* + + Other functions + +*/ + + DLLINTERFACE SDL_Surface* rotateSurface90Degrees(SDL_Surface* pSurf, int numClockwiseTurns); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif + +#endif /* _SDL_rotozoom_h */ diff --git a/src/sdl-instead/copying b/src/sdl-instead/copying new file mode 100644 index 0000000..d60c31a --- /dev/null +++ b/src/sdl-instead/copying @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/src/sdl-instead/game.c b/src/sdl-instead/game.c index 64bdeab..d561a6b 100644 --- a/src/sdl-instead/game.c +++ b/src/sdl-instead/game.c @@ -1,31 +1,72 @@ -#include #include #include #include #include #include +#include #include -#include #include +#include +#include #include "graphics.h" #include "sound.h" #include "game.h" #include "input.h" #include "instead.h" +#ifdef RUSSIAN +#include "menu.h" +#else +#include "menu-en.h" +#endif + +int opt_fsize = 0; int opt_fs = 0; int opt_hl = 1; int opt_hz = 22050; int opt_vol = 127; -int opt_autosave = 0; +int opt_motion = 1; +int opt_click = 1; +int opt_music = 1; +int opt_autosave = 1; +int opt_filter = 1; +int opt_owntheme = 1; char *opt_game = NULL; +char *opt_theme = NULL; +char *err_msg = NULL; + +#ifndef PATH_MAX +#define PATH_MAX 4096 +#endif + +#define ERR_MSG_MAX 512 + +void game_err_msg(const char *s) +{ + if (err_msg) + free(err_msg); + if (s) { + err_msg = strdup(s); + if (err_msg && strlen(err_msg) > ERR_MSG_MAX) { + err_msg[ERR_MSG_MAX - 4] = 0; + strcat(err_msg, "..."); + } + } else + err_msg = NULL; +} char game_cwd[PATH_MAX]; char *curgame = NULL; +char *curgame_dir = NULL; +static int own_theme = 0; +char *curtheme = NULL; +char *curtheme_dir = NULL; int cfg_parse(const char *path); -char *game_cfg_path(void); -int game_save(void); +extern char *game_cfg_path(void); +extern char *game_save_path(int rc, int nr); + +int game_save(int nr); int cfg_load(void) { @@ -46,7 +87,14 @@ int cfg_save(void) fp = fopen(p, "w"); if (!fp) return -1; - fprintf(fp, "fs = %d\nhl = %d\nhz = %d\nvol = %d\nautosave = %d\ngame = %s", opt_fs, opt_hl, opt_hz, opt_vol, opt_autosave, curgame?curgame:""); + fprintf(fp, "fs = %d\nhl = %d\nhz = %d\nvol = %d\nautosave = %d\n\ +game = %s\nfscale = %d\nmotion = %d\n\ +click = %d\nmusic = %d\ntheme = %s\n\ +filter = %d\nowntheme = %d", + opt_fs, opt_hl, opt_hz, opt_vol, opt_autosave, + curgame_dir?curgame_dir:"", opt_fsize, opt_motion, + opt_click, opt_music, curtheme_dir?curtheme_dir:DEFAULT_THEME, + opt_filter, opt_owntheme); fclose(fp); return 0; } @@ -55,11 +103,14 @@ void game_menu_box(int show, const char *txt); void game_cursor(int on); -#ifndef THEMES_PATH -#define THEMES_PATH "./themes" -#endif +#define GFX_MODE_FLOAT 0 +#define GFX_MODE_FIXED 1 +#define GFX_MODE_EMBEDDED 2 -struct theme { +#define INV_MODE_VERT 0 +#define INV_MODE_HORIZ 1 + +struct game_theme { int w; int h; color_t bgcol; @@ -77,7 +128,10 @@ struct theme { char *font_name; int font_size; fnt_t font; - + + int gfx_x; + int gfx_y; + int max_scene_w; int max_scene_h; char *a_up_name; @@ -93,6 +147,7 @@ struct theme { int inv_y; int inv_w; int inv_h; + color_t icol; color_t ilcol; color_t iacol; @@ -123,6 +178,10 @@ struct theme { img_t menu_button; int menu_button_x; int menu_button_y; + int gfx_mode; + int inv_mode; + char *click_name; + void *click; } game_theme = { .w = 800, .h = 480, @@ -146,13 +205,17 @@ struct theme { .menu_font = NULL, .menu_button_name = NULL, .menu_button = NULL, + .gfx_mode = GFX_MODE_EMBEDDED, + .inv_mode = INV_MODE_VERT, + .click_name = NULL, + .click = NULL, }; #define FREE(v) do { if ((v)) free((v)); v = NULL; } while(0) void free_theme_strings() { - struct theme *t = &game_theme; + struct game_theme *t = &game_theme; FREE(t->use_name); FREE(t->bg_name); FREE(t->inv_a_up_name); @@ -163,6 +226,7 @@ void free_theme_strings() FREE(t->inv_font_name); FREE(t->menu_font_name); FREE(t->menu_button_name); +/* FREE(t->click_name); must be reloaded, ugly :(*/ } int game_theme_free(void) @@ -194,82 +258,93 @@ int game_theme_free(void) if (game_theme.menu_button) gfx_free_image(game_theme.menu_button); + if (game_theme.click) + snd_free_wav(game_theme.click); + game_theme.font = game_theme.inv_font = game_theme.menu_font = NULL; game_theme.a_up = game_theme.a_down = game_theme.use = NULL; game_theme.inv_a_up = game_theme.inv_a_down = NULL; game_theme.menu_button = NULL; game_theme.bg = NULL; + game_theme.click = NULL; // game_theme.slide = gfx_load_image("slide.png", 1); return 0; } +#define FONT_SZ(v) ((v) * (1.0f + ((0.1f * opt_fsize)))) + int game_theme_init(void) { - struct theme *t = &game_theme; + struct game_theme *t = &game_theme; if (t->font_name) { fnt_free(t->font); - if (!(t->font = fnt_load(t->font_name, t->font_size))) + if (!(t->font = fnt_load(t->font_name, FONT_SZ(t->font_size)))) goto err; } if (t->inv_font_name) { fnt_free(t->inv_font); - if (!(t->inv_font = fnt_load(t->inv_font_name, t->inv_font_size))) - goto err;; + if (!(t->inv_font = fnt_load(t->inv_font_name, FONT_SZ(t->inv_font_size)))) + goto err; } if (t->menu_font_name) { fnt_free(t->menu_font); - if (!(t->menu_font = fnt_load(t->menu_font_name, t->menu_font_size))) + if (!(t->menu_font = fnt_load(t->menu_font_name, t->menu_font_size))) /* do not scale menu!!! */ goto err; } if (t->a_up_name) { gfx_free_image(t->a_up); - if (!(t->a_up = gfx_load_image(t->a_up_name, 1))) + if (!(t->a_up = gfx_load_image(t->a_up_name))) goto err; } if (t->a_down_name) { gfx_free_image(t->a_down); - if (!(t->a_down = gfx_load_image(t->a_down_name, 1))) + if (!(t->a_down = gfx_load_image(t->a_down_name))) goto err; } if (t->inv_a_up_name) { gfx_free_image(t->inv_a_up); - if (!(t->inv_a_up = gfx_load_image(t->inv_a_up_name, 1))) + if (!(t->inv_a_up = gfx_load_image(t->inv_a_up_name))) goto err; } if (t->inv_a_down_name) { gfx_free_image(t->inv_a_down); - if (!(t->inv_a_down = gfx_load_image(t->inv_a_down_name, 1))) + if (!(t->inv_a_down = gfx_load_image(t->inv_a_down_name))) goto err; } if (t->bg_name) { gfx_free_image(t->bg); t->bg = NULL; - if (t->bg_name[0] && !(t->bg = gfx_load_image(t->bg_name, 0))) + if (t->bg_name[0] && !(t->bg = gfx_load_image(t->bg_name))) goto err; } if (t->use_name) { gfx_free_image(t->use); - if (!(t->use = gfx_load_image(t->use_name, 1))) + if (!(t->use = gfx_load_image(t->use_name))) goto err; } if (t->menu_button_name) { gfx_free_image(t->menu_button); - if (!(t->menu_button = gfx_load_image(t->menu_button_name, 1))) + if (!(t->menu_button = gfx_load_image(t->menu_button_name))) goto err; } + + if (t->click_name) { + snd_free_wav(t->click); + t->click = snd_load_wav(t->click_name); + } free_theme_strings(); @@ -280,29 +355,11 @@ int game_theme_init(void) } return 0; err: + fprintf(stderr, "Can not init theme!\n"); game_theme_free(); return -1; } -int theme_load(const char *name); - -int game_theme_load(const char *name) -{ - char cwd[PATH_MAX]; - getcwd(cwd, sizeof(cwd)); - if (chdir(THEMES_PATH) || chdir(name) || theme_load("theme.ini")) { - chdir(cwd); - return -1; - } - chdir(cwd); - return 0; -} - -int game_default_theme(void) -{ - return game_theme_load("default"); -} - typedef int (*parser_fn)(const char *v, void *data); int parse_string(const char *v, void *data) @@ -316,6 +373,48 @@ int parse_string(const char *v, void *data) return 0; } +int parse_gfx_mode(const char *v, void *data) +{ + int *i = (int *)data; + if (!strcmp(v, "fixed")) + *i = GFX_MODE_FIXED; + else if (!strcmp(v, "embedded")) + *i = GFX_MODE_EMBEDDED; + else if (!strcmp(v, "float")) + *i = GFX_MODE_FLOAT; + else + return -1; + return 0; +} + +int parse_inv_mode(const char *v, void *data) +{ + int *i = (int *)data; + if (!strcmp(v, "vertical") || !strcmp(v, "0")) + *i = INV_MODE_VERT; + else if (!strcmp(v, "horizontal") || !strcmp(v, "1")) + *i = INV_MODE_HORIZ; + else + return -1; + return 0; +} + +int parse_full_path(const char *v, void *data) +{ + char cwd[PATH_MAX]; + char **p = ((char **)data); + if (*p) + free(*p); + getcwd(cwd, sizeof(cwd)); + *p = malloc(strlen(v) + strlen(cwd) + 2); + if (!*p) + return -1; + strcpy(*p, cwd); + strcat(*p,"/"); + strcat(*p, v); + return 0; +} + int parse_int(const char *v, void *data) { int *i = (int *)data; @@ -331,14 +430,20 @@ int parse_color(const char *v, void *data) color_t *c = (color_t *)data; return gfx_parse_color(v, c); } +int game_theme_load(const char *name); +int game_theme_select(const char *name); int parse_include(const char *v, void *data) { int rc; char cwd[PATH_MAX]; + if (!strcmp(v, DEFAULT_THEME)) + return 0; getcwd(cwd, sizeof(cwd)); chdir(game_cwd); - rc = game_theme_load(v); + rc = game_theme_load(v); +// if (!rc) +// game_theme_select(v); chdir(cwd); return rc; } @@ -355,7 +460,14 @@ struct parser cfg_parser[] = { { "vol", parse_int, &opt_vol }, { "hl", parse_int, &opt_hl }, { "game", parse_string, &opt_game }, + { "theme", parse_string, &opt_theme }, { "autosave", parse_int, &opt_autosave }, + { "motion", parse_int, &opt_motion }, + { "click", parse_int, &opt_click }, + { "music", parse_int, &opt_music }, + { "fscale", parse_int, &opt_fsize }, + { "filter", parse_int, &opt_filter }, + { "owntheme", parse_int, &opt_owntheme }, { NULL, }, }; @@ -366,6 +478,11 @@ struct parser cmd_parser[] = { { "scr.gfx.bg", parse_string, &game_theme.bg_name }, { "scr.gfx.use", parse_string, &game_theme.use_name }, { "scr.gfx.pad", parse_int, &game_theme.pad }, + { "scr.gfx.x", parse_int, &game_theme.gfx_x }, + { "scr.gfx.y", parse_int, &game_theme.gfx_y }, + { "scr.gfx.w", parse_int, &game_theme.max_scene_w }, + { "scr.gfx.h", parse_int, &game_theme.max_scene_h }, + { "scr.gfx.mode", parse_gfx_mode, &game_theme.gfx_mode }, { "win.x", parse_int, &game_theme.win_x }, { "win.y", parse_int, &game_theme.win_y }, @@ -373,7 +490,9 @@ struct parser cmd_parser[] = { { "win.h", parse_int, &game_theme.win_h }, { "win.fnt.name", parse_string, &game_theme.font_name }, { "win.fnt.size", parse_int, &game_theme.font_size }, +/* compat mode directive */ { "win.gfx.h", parse_int, &game_theme.max_scene_h }, +/* here it was */ { "win.gfx.up", parse_string, &game_theme.a_up_name }, { "win.gfx.down", parse_string, &game_theme.a_down_name }, { "win.col.fg", parse_color, &game_theme.fgcol }, @@ -384,6 +503,9 @@ struct parser cmd_parser[] = { { "inv.y", parse_int, &game_theme.inv_y }, { "inv.w", parse_int, &game_theme.inv_w }, { "inv.h", parse_int, &game_theme.inv_h }, + { "inv.mode", parse_inv_mode, &game_theme.inv_mode }, + { "inv.horiz", parse_inv_mode, &game_theme.inv_mode }, + { "inv.col.fg", parse_color, &game_theme.icol }, { "inv.col.link", parse_color, &game_theme.ilcol }, { "inv.col.alink", parse_color, &game_theme.iacol }, @@ -402,8 +524,13 @@ struct parser cmd_parser[] = { { "menu.fnt.name", parse_string, &game_theme.menu_font_name }, { "menu.fnt.size", parse_int, &game_theme.menu_font_size }, { "menu.gfx.button", parse_string, &game_theme.menu_button_name }, + { "menu.button.x", parse_int, &game_theme.menu_button_x }, + { "menu.button.y", parse_int, &game_theme.menu_button_y }, +/* compat */ { "menu.buttonx", parse_int, &game_theme.menu_button_x }, { "menu.buttony", parse_int, &game_theme.menu_button_y }, + + { "snd.click", parse_full_path, &game_theme.click_name }, { "include", parse_include, NULL }, { NULL, }, }; @@ -454,7 +581,7 @@ int parse_ini(const char *path, struct parser *cmd_parser) if (*p == ';') continue; len = strcspn(p, "="); - if (p[len] != '=') + if (p[len] != '=') /* just ignore it */ continue; p[len] = 0; val = p + len + 1; @@ -462,7 +589,7 @@ int parse_ini(const char *path, struct parser *cmd_parser) p[len] = 0; // printf("%s\n", p); val += strspn(val, " \t"); - val[strcspn(val, "\n")] = 0; + val[strcspn(val, ";\n")] = 0; if (process_cmd(p, val, cmd_parser)) { rc = -1; fprintf(stderr, "Can't process cmd '%s' on line %d : %s\n", p, line_nr, strerror(errno)); @@ -475,7 +602,8 @@ int parse_ini(const char *path, struct parser *cmd_parser) int theme_parse(const char *path) { if (parse_ini(path, cmd_parser)) { - game_theme_free(); + fprintf(stderr, "Theme parsed with errors!\n"); +// game_theme_free(); return -1; } return 0; @@ -484,7 +612,7 @@ int theme_parse(const char *path) int theme_load(const char *name) { if (theme_parse(name)) - return -1; + return 0; /* no theme loaded if error in parsing */ if (game_theme_init()) return -1; return 0; @@ -495,11 +623,7 @@ int cfg_parse(const char *path) return parse_ini(path, cfg_parser); } -#ifndef GAMES_PATH -#define GAMES_PATH "./games" -#endif - -char *getpath(const char *d, const char *n) +char *getfilepath(const char *d, const char *n) { int i = strlen(d) + strlen(n) + 3; char *p = malloc(i); @@ -507,17 +631,22 @@ char *getpath(const char *d, const char *n) strcpy(p, d); strcat(p, "/"); strcat(p, n); - strcat(p, "/"); } return p; } -#define MAIN_FILE "main.lua" +char *getpath(const char *d, const char *n) +{ + char *p = getfilepath(d, n); + strcat(p, "/"); + return p; +} -int is_game(const char *n) + +static int is_game(const char *path, const char *n) { int rc = 0; - char *p = getpath(GAMES_PATH, n); + char *p = getpath(path, n); char *pp; if (!p) return 0; @@ -536,23 +665,26 @@ int is_game(const char *n) struct game { char *path; char *name; + char *dir; }; -struct game *games; +struct game *games = NULL; int games_nr = 0; + + int game_select(const char *name) { int i; if (!name || !*name) { if (games_nr == 1) - name = games[0].name; + name = games[0].dir; else return 0; } chdir(game_cwd); for (i = 0; ipw_dir); - return save_path; - -} -char *game_save_path(int cr) -{ - struct passwd *pw; - if (!curgame) + } + l += strlen(comm); l += strspn(l, " \t"); + if (strncmp(l, tag, strlen(tag))) return NULL; - pw = getpwuid(getuid()); - if (!pw) - return NULL; - snprintf(save_path, sizeof(save_path) - 1 , "%s/.instead/", pw->pw_dir); - if (cr && mkdir(save_path, S_IRWXU) && errno != EEXIST) - return NULL; - snprintf(save_path, sizeof(save_path) - 1 , "%s/.instead/saves", pw->pw_dir); - if (cr && mkdir(save_path, S_IRWXU) && errno != EEXIST) - return NULL; - snprintf(save_path, sizeof(save_path) - 1, "%s/.instead/saves/%s/", pw->pw_dir, curgame); - if (cr && mkdir(save_path, S_IRWXU) && errno != EEXIST) - return NULL; - snprintf(save_path, sizeof(save_path) - 1, "%s/.instead/saves/%s/autosave", pw->pw_dir, curgame); - return save_path; + l += strlen(tag); + l += strspn(l, " \t"); + l[strcspn(l, "$\n\r")] = 0; + return strdup(l); } -int games_lookup(void) +static char *game_name(const char *path, const char *d_name) +{ + int brk = 0; + char *p = getfilepath(path, MAIN_FILE); + if (p) { + char *l; char line[1024]; + FILE *fd = fopen(p, "r"); + free(p); + if (!fd) + goto err; + + while ((l = fgets(line, sizeof(line), fd)) && !brk) { + l = parse_tag(l, "$Name:", "--", &brk); + if (l) + return l; + } + fclose(fd); + } +err: + return strdup(d_name); +} + +int games_lookup(const char *path) { char *p; - int n = 0; + int n = 0, i = 0; DIR *d; struct dirent *de; - d = opendir(GAMES_PATH); + + if (!path) + return 0; + + d = opendir(path); if (!d) return -1; while ((de = readdir(d))) { /*if (de->d_type != DT_DIR) continue;*/ - if (!is_game(de->d_name)) + if (!is_game(path, de->d_name)) continue; n ++; } + rewinddir(d); if (!n) return 0; - games = malloc(sizeof(struct game) * n); - while ((de = readdir(d)) && games_nr < n) { + games = realloc(games, sizeof(struct game) * (n + games_nr)); + while ((de = readdir(d)) && i < n) { /*if (de->d_type != DT_DIR) continue;*/ - if (!is_game(de->d_name)) + if (!is_game(path, de->d_name)) continue; - p = getpath(GAMES_PATH, de->d_name); + p = getpath(path, de->d_name); games[games_nr].path = p; - games[games_nr].name = strdup(de->d_name); + games[games_nr].dir = strdup(de->d_name); + games[games_nr].name = game_name(p, de->d_name); games_nr ++; + i ++; } closedir(d); return 0; } +struct theme *themes = NULL; +int themes_nr = 0; + +struct theme { + char *path; + char *name; + char *dir; +}; + +static int is_theme(const char *path, const char *n) +{ + int rc = 0; + char *p = getpath(path, n); + char *pp; + if (!p) + return 0; + pp = malloc(strlen(p) + strlen(THEME_FILE) + 1); + if (pp) { + strcpy(pp, p); + strcat(pp, THEME_FILE); + if (!access(pp, R_OK)) + rc = 1; + free(pp); + } + free(p); + return rc; +} + +static char *theme_name(const char *path, const char *d_name) +{ + int brk = 0; + char *p = getfilepath(path, THEME_FILE); + if (p) { + char *l; char line[1024]; + FILE *fd = fopen(p, "r"); + free(p); + if (!fd) + goto err; + + while ((l = fgets(line, sizeof(line), fd)) && !brk) { + l = parse_tag(l, "$Name:", ";", &brk); + if (l) + return l; + } + fclose(fd); + } +err: + return strdup(d_name); +} + +int themes_lookup(const char *path) +{ + char *p; + int n = 0, i = 0; + DIR *d; + struct dirent *de; + + if (!path) + return 0; + + d = opendir(path); + if (!d) + return -1; + while ((de = readdir(d))) { + if (!is_theme(path, de->d_name)) + continue; + n ++; + } + + rewinddir(d); + if (!n) + return 0; + themes = realloc(themes, sizeof(struct theme) * (n + themes_nr)); + while ((de = readdir(d)) && i < n) { + /*if (de->d_type != DT_DIR) + continue;*/ + if (!is_theme(path, de->d_name)) + continue; + p = getpath(path, de->d_name); + themes[themes_nr].path = p; + themes[themes_nr].dir = strdup(de->d_name); + themes[themes_nr].name = theme_name(p, de->d_name); + themes_nr ++; + i ++; + } + closedir(d); + return 0; +} + +int theme_load(const char *name); + +struct theme *theme_lookup(const char *name) +{ + int i; + if (!name || !*name) { + if (themes_nr == 1) + return &themes[0]; + } + for (i = 0; ipath) || theme_load(THEME_FILE)) { + chdir(cwd); + return -1; + } + chdir(cwd); + return 0; +} + +int game_theme_select(const char *name) +{ + struct theme *theme; + theme = theme_lookup(name); + if (!theme) + return -1; + curtheme = theme->name; + curtheme_dir = theme->dir; + return 0; +} + +int game_default_theme(void) +{ + return game_theme_load(DEFAULT_THEME); +} + +static int motion_mode = 0; +static int motion_id = 0; +static int motion_y = 0; static char *last_pict = NULL; static char *last_title = NULL; @@ -650,7 +937,15 @@ enum { menu_askquit, menu_saved, menu_games, + menu_themes, + menu_own_theme, + menu_custom_theme, + menu_load, + menu_save, + menu_error, + menu_warning, }; + int game_cmd(char *cmd); int change_vol(int d, int val); @@ -750,37 +1045,67 @@ img_t el_img(int num) { return objs[num].p.img; } + char *game_menu_gen(void); +void game_menu(int nr) +{ + cur_menu = nr; + menu_shown = 1; + game_menu_box(menu_shown, game_menu_gen()); +} + +int game_error(const char *name) +{ + game_done(); + if (game_init(NULL)) { + fprintf(stderr,"Fatal error! Can't init anything!!!\n"); + exit(1); + } + game_menu(menu_error); + return 0; +} void el_draw(int n); -int game_init(const char *name) + +static void custom_theme_warn(void) +{ + if (own_theme && !opt_owntheme) { + game_menu(menu_custom_theme); + } +} + +int window_sw = 0; +int fullscreen_sw = 0; + +static int game_load(int nr) { char *s; + s = game_save_path(0, nr); + + if (s && !access(s, R_OK)) { + char cmd[PATH_MAX]; + snprintf(cmd, sizeof(cmd) - 1, "load %s", s); + game_cmd(cmd); + if (nr == -1) + unlink(s); + return 0; + } + return -1; +} + +int game_apply_theme(void) +{ layout_t lay; textbox_t box; - getcwd(game_cwd, sizeof(game_cwd)); - cfg_load(); - if (!name && opt_game) - name = opt_game; - if (gfx_init(game_theme.w, game_theme.h, opt_fs)) + + memset(objs, 0, sizeof(struct el) * el_max); + + if (gfx_setmode(game_theme.w, game_theme.h, opt_fs)) return -1; - snd_init(opt_hz); - change_vol(0, opt_vol); - if (game_default_theme()) - return -1; - if (game_select(name)) { - name = NULL; - } - if (!access("theme.ini", R_OK)) { - if (theme_load("theme.ini")) - return -1; - } gfx_bg(game_theme.bgcol); game_clear(0, 0, game_theme.w, game_theme.h); -// if (instead_init("cat.lua")) -// return -1; -// gfx_update(0, 0, game_theme.w, game_theme.h); + gfx_flip(); lay = txt_layout(game_theme.font, ALIGN_JUSTIFY, game_theme.win_w, game_theme.win_h); if (!lay) return -1; @@ -790,17 +1115,17 @@ int game_init(const char *name) txt_layout_color(lay, game_theme.fgcol); txt_layout_link_color(lay, game_theme.lcol); txt_layout_active_color(lay, game_theme.acol); -// txt_layout_link_style(lay, game_theme.lstyle); txt_box_set(box, lay); el_set(el_scene, elt_box, game_theme.win_x, 0, box); - lay = txt_layout(game_theme.inv_font, ALIGN_LEFT, game_theme.inv_w, game_theme.inv_h); + lay = txt_layout(game_theme.inv_font, (game_theme.inv_mode == INV_MODE_HORIZ)? + ALIGN_CENTER:ALIGN_LEFT, game_theme.inv_w, game_theme.inv_h); if (!lay) return -1; + txt_layout_color(lay, game_theme.icol); txt_layout_link_color(lay, game_theme.ilcol); txt_layout_active_color(lay, game_theme.iacol); -// txt_layout_link_style(lay, game_theme.ilstyle); box = txt_box(game_theme.inv_w, game_theme.inv_h); if (!box) return -1; @@ -812,65 +1137,117 @@ int game_init(const char *name) if (!lay) return -1; + txt_layout_color(lay, game_theme.fgcol); + txt_layout_link_color(lay, game_theme.lcol); + txt_layout_active_color(lay, game_theme.acol); + el_set(el_title, elt_layout, game_theme.win_x, game_theme.win_y, lay); lay = txt_layout(game_theme.font, ALIGN_CENTER, game_theme.win_w, 0); if (!lay) return -1; + + txt_layout_color(lay, game_theme.fgcol); + txt_layout_link_color(lay, game_theme.lcol); + txt_layout_active_color(lay, game_theme.acol); + el_set(el_ways, elt_layout, game_theme.win_x, 0, lay); el_set(el_sdown, elt_image, 0, 0, game_theme.a_down); el_set(el_sup, elt_image, 0, 0, game_theme.a_up); -// el_set(el_sslide, elt_image, 0, 0, game_theme.slide); el_set(el_idown, elt_image, 0, 0, game_theme.inv_a_down); el_set(el_iup, elt_image, 0, 0, game_theme.inv_a_up); -// el_set(el_islide, elt_image, 0, 0, game_theme.slide); el_set(el_spic, elt_image, game_theme.win_x, game_theme.win_y, NULL); el_set(el_menu, elt_layout, 0, 0, NULL); el_set(el_menu_button, elt_image, game_theme.menu_button_x, game_theme.menu_button_y, game_theme.menu_button); el_draw(el_menu_button); - - s = game_save_path(0); - - if (s && !access(s, R_OK)) { - char cmd[256]; - snprintf(cmd, sizeof(cmd) - 1, "load %s", s); - game_cmd(cmd); - return 0; - } - if (!curgame) { - menu_shown = 1; - cur_menu = menu_games; - game_menu_box(menu_shown, game_menu_gen()); - gfx_flip(); - } else - game_cmd("look"); return 0; } +int game_init(const char *name) +{ + getcwd(game_cwd, sizeof(game_cwd)); + if (name) + game_err_msg(NULL); + + if (gfx_init() || input_init()) + return -1; + + snd_init(opt_hz); + change_vol(0, opt_vol); + + if (game_default_theme()) { + fprintf(stderr, "Can't load default theme.\n"); + return -1; + } + + if (game_select(name)) + return -1; + + if (curgame && !access(THEME_FILE, R_OK)) { + own_theme = 1; + } + + if (own_theme && opt_owntheme) { + if (theme_load(THEME_FILE)) + return -1; + } else if (curtheme_dir && strcmp(DEFAULT_THEME, curtheme_dir)) { + game_theme_load(curtheme_dir); + } + + if (game_apply_theme()) + return -1; + + if (!curgame) { + game_menu(menu_games); + } else { + if (!game_load(-1)) /* tmp save */ + return 0; + if (opt_autosave && !game_load(0)) /* autosave */ + return 0; + instead_eval("game:ini()"); + game_cmd("look"); + custom_theme_warn(); + if (opt_autosave) + game_save(0); + } + return 0; +} + +void free_last_music(void) +{ + if (last_music) + free(last_music); + last_music = NULL; +} + void free_last(void) { if (last_pict) free(last_pict); if (last_title) free(last_title); - if (last_music) - free(last_music); - last_pict = last_title = last_music = NULL; + free_last_music(); + last_pict = last_title = NULL; + snd_stop_mus(500); } void game_done(void) { int i; - if (opt_autosave) - game_save(); + if (opt_autosave && curgame) + game_save(0); chdir(game_cwd); - cfg_save(); - menu_shown = 0; - game_menu_box(0, NULL); +// cfg_save(); + + if (menu_shown) { + menu_shown = 0; + game_menu_box(0, NULL); + } cur_menu = menu_main; + if (el_img(el_spic)) gfx_free_image(el_img(el_spic)); @@ -897,10 +1274,14 @@ void game_done(void) gfx_free_image(menubg); menu = menubg = NULL; game_theme_free(); - instead_done(); + input_clear(); snd_done(); + instead_done(); gfx_done(); curgame = NULL; + curgame_dir = NULL; + own_theme = 0; +// SDL_Quit(); } void el_size(int i, int *w, int *h) @@ -950,8 +1331,8 @@ void el_update(int n) void box_update_scrollbar(int n) { - struct el *elup; - struct el *eldown; + struct el *elup = NULL; + struct el *eldown = NULL; // struct el *elslide; layout_t l; @@ -1002,7 +1383,7 @@ void box_update_scrollbar(int n) el_clear(elup->id); el_clear(eldown->id); - if (hh - off >= h) + if (hh - off > h) el_draw(eldown->id); if (off) el_draw(elup->id); @@ -1034,15 +1415,32 @@ void el_draw(int n) img_t game_pict_scale(img_t img, int ww, int hh) { img_t img2 = img; - int w, h; - float scale1, scale2, scale; + int w, h, www, hhh; + float scale1, scale2, scale = 1.0f; w = gfx_img_w(img); h = gfx_img_h(img); + + if (ww == -1) + ww = w; + if (hh == -1) + hh = h; + if (w <= ww && h <= hh) return img; - scale1 = (float)ww / (float)w; - scale2 = (float)hh / (float)h; - scale = (scale1 ww || scale * (float)h > hh) { + scale1 = (float)(www - 2) / (float)(w); + scale2 = (float)(hhh - 2) / (float)(h); + scale = (scale1 FONT_MIN_SZ) { + restart_needed = 1; + } else + opt_fsize ++; + game_menu_box(menu_shown, game_menu_gen()); + } else if (!strcmp(a, "/fs++")) { + opt_fsize ++; + if (FONT_SZ(game_theme.font_size) < FONT_MAX_SZ) { + restart_needed = 1; + } else + opt_fsize --; + game_menu_box(menu_shown, game_menu_gen()); } else if (!strcmp(a, "/hl")) { opt_hl ^= 1; + game_menu_box(menu_shown, game_menu_gen()); } else if (!strcmp(a, "/fs")) { - char *og = curgame; + restart_needed = 1; opt_fs ^= 1; - game_save(); - game_done(); - game_init(og); + game_menu_box(menu_shown, game_menu_gen()); } else if (!strcmp(a, "/games_prev")) { games_menu_from -= MENU_GAMES_MAX; if (games_menu_from < 0) games_menu_from = 0; + game_menu_box(menu_shown, game_menu_gen()); } else if (!strcmp(a, "/games_next")) { if (games_menu_from + MENU_GAMES_MAX < games_nr) games_menu_from += MENU_GAMES_MAX; + game_menu_box(menu_shown, game_menu_gen()); + } else if (!strcmp(a, "/themes_prev")) { + themes_menu_from -= MENU_THEMES_MAX; + if (themes_menu_from < 0) + themes_menu_from = 0; + game_menu_box(menu_shown, game_menu_gen()); + } else if (!strcmp(a, "/themes_next")) { + if (themes_menu_from + MENU_THEMES_MAX < themes_nr) + themes_menu_from += MENU_THEMES_MAX; + game_menu_box(menu_shown, game_menu_gen()); } else if (!strcmp(a, "/select")) { - cur_menu = menu_games; - } else if (!strcmp(a, "/save")) { - if (!game_save()) { - cur_menu = menu_saved; + game_menu(menu_games); + } else if (!strcmp(a, "/themes")) { + game_menu(menu_themes); + } else if (!strcmp(a, "/save_menu")) { + if (curgame) + game_menu(menu_save); + } else if (!strncmp(a, "/save", 5)) { + if (!game_save(atoi(a + 5))) { + game_menu(menu_saved); } - } - else if (!strcmp(a, "/new")) { - if (!curgame) + } else if (!strcmp(a, "/load_menu")) { + if (curgame) + game_menu(menu_load); + } else if (!strncmp(a, "/load", 5)) { + int nr = atoi(a + 5); + if (!curgame_dir) return 0; + free_last(); - game_select(curgame); -// instead_done(); -// instead_init(); -// instead_load(MAIN_FILE); + game_select(curgame_dir); menu_shown = 0; game_menu_box(0, NULL); - game_cmd("look"); - game_save(); -// game_done(); -// game_init(); -// game_cmd("look"); - } - else if (!strcmp(a,"/main")) { + game_load(nr); cur_menu = menu_main; - } - else if (!strcmp(a,"/ask_quit")) { - cur_menu = menu_askquit; - } - else if (!strcmp(a,"/about")) { - cur_menu = menu_about; - } - else if (!strcmp(a,"/mtoggle")) { +// game_menu_box(0, NULL); + } else if (!strcmp(a, "/new")) { + char *s; + if (!curgame_dir) + return 0; + free_last(); + game_select(curgame_dir); + menu_shown = 0; + game_menu_box(0, NULL); + instead_eval("game:ini()"); + game_cmd("look"); + s = game_save_path(0, 0); + if (s && !access(s, R_OK) && opt_autosave) + unlink (s); + custom_theme_warn(); + } else if (!strcmp(a,"/main")) { + game_restart(); + game_menu(menu_main); + } else if (!strcmp(a,"/ask_quit")) { + game_menu(menu_askquit); + } else if (!strcmp(a,"/about")) { + game_menu(menu_about); + } else if (!strcmp(a,"/mtoggle")) { if (!old_vol) { old_vol = snd_volume_mus(-1); change_vol(0, 0); @@ -1186,102 +1655,175 @@ int game_menu_act(const char *a) change_vol(0, old_vol); old_vol = 0; } - } - else if (!strcmp(a,"/resume")) { + } else if (!strcmp(a,"/music")) { + opt_music ^= 1; + if (!opt_music) { + snd_stop_mus(0); + free_last_music(); + } else + music_player(); + game_menu_box(menu_shown, game_menu_gen()); + } else if (!strcmp(a,"/resume")) { menu_shown = 0; + cur_menu = menu_main; game_menu_box(0, NULL); - } - else if (!strcmp(a, "/settings")) { - cur_menu = menu_settings; - } - else if (!strcmp(a, "/vol--")) { + } else if (!strcmp(a, "/settings")) { + game_menu(menu_settings); + } else if (!strcmp(a, "/vol--")) { change_vol(-10, 0); - } - else if (!strcmp(a, "/vol++")) { + game_menu_box(menu_shown, game_menu_gen()); + } else if (!strcmp(a, "/vol++")) { change_vol(+10, 0); - } - else if (!strcmp(a, "/vol-")) { + game_menu_box(menu_shown, game_menu_gen()); + } else if (!strcmp(a, "/vol-")) { change_vol(-1, 0); - } - else if (!strcmp(a, "/vol+")) { + game_menu_box(menu_shown, game_menu_gen()); + } else if (!strcmp(a, "/vol+")) { change_vol(+1, 0); - } - else if (!strcmp(a, "/hz-")) { + game_menu_box(menu_shown, game_menu_gen()); + } else if (!strcmp(a, "/hz-")) { int hz = snd_hz(); - if (hz == 44100) + if (hz == 48000) + hz = 44100; + else if (hz == 44100) hz = 22050; else if (hz == 22050) hz = 11025; else hz = 0; change_hz(hz); - } - else if (!strcmp(a, "/hz+")) { + game_menu_box(menu_shown, game_menu_gen()); + } else if (!strcmp(a, "/hz+")) { int hz = snd_hz(); if (hz == 11025) hz = 22050; else if (hz == 22050) hz = 44100; + else if (hz == 44100) + hz = 48000; else hz = 0; change_hz(hz); - } - else if (!strcmp(a,"/quit")) { + game_menu_box(menu_shown, game_menu_gen()); + } else if (!strcmp(a,"/quit")) { return -1; } else if (cur_menu == menu_games) { char *p; p = strdup(a); if (p) { - char *og = curgame; game_done(); if (game_init(p)) { - fprintf(stderr, "Can't init game:%s:%s\n", p, strerror(errno)); - // exit(1); - game_done(); - game_init(og); + game_error(p); + } + free(p); + } + } else if (cur_menu == menu_themes) { + char *p; + p = strdup(a); + if (p) { + if (game_theme_select(p)) + fprintf(stderr, "Can't select theme:%s:%s\n", p, strerror(errno)); + char *og = curgame_dir; + game_save(-1); + game_done(); + if (game_init(og)) + game_error(og); + else if (curgame && own_theme && opt_owntheme) { + game_menu(menu_own_theme); } free(p); } } return 0; } -#ifdef RUSSIAN -#define MAIN_MENU "Вернуться в игру\nВыбор игры\nНовая игра\nСохранить игру\nИнформация\nНастройки\nВыход" -#define ABOUT_MENU "IN S.T.E.A.D SDL - "VERSION"\n\nИнтерпретатор простых\nтекстовых приключений.\n\nКосых П.А. '2009\n\nНазад" - -#define BACK_MENU "Назад" -#define ON "Да" -#define OFF "Нет" - -#define SETTINGS_MENU "Громкость\n<<< %d%% >>>\n\n\ -Качество звука\n<< %dГц >>\n\nПодсветка ссылок: %s\n\nПолный экран: %s\n\n\ -Автосохранение: %s\n\n\ -Назад" - -#define QUIT_MENU "На самом деле выйти?\n\nДа | Нет" -#define SELECT_GAME_MENU "Выбор игры\n\n" -#define SAVED_MENU "Игра сохранена!\n\nОк" -#define NOGAMES_MENU "Не найдена ни одна игра. \nПожалуйста, скопируйте хотя бы одну игру в каталог:\n'%s'" -#else -#define MAIN_MENU "Resume\nSelect Game\nNew\nSave\nAbout\nSettings\nQuit" -#define ABOUT_MENU "Written by Peter Kosyh '2009\n\nBack" -#define BACK_MENU "Back" - -#define ON "on" -#define OFF "off" -#define SELECT_GAME_MENU "Select game to play\n\n" -#define SETTINGS_MENU "Volume\n<<< %d%% >>>\n\n\ -Quality\n<< %dHz >>Refs highlighting: %s\n\nFull Screen: %s\n\n\ -Autosave: %s\n\n\ -Back" - -#define QUIT_MENU "Really quit?\n\nYes | No" - -#define SAVED_MENU "Current Game saved!\n\nOk" -#define NOGAMES_MENU "No games found. \nPlease, write any game in the this directory:\n'%s'" -#endif char menu_buff[4096]; + +char *slot_name(const char *path) +{ + struct stat st; + int brk = 0; + char *l; char line[1024]; + FILE *fd = fopen(path, "r"); + if (!fd) + return NULL; + + while ((l = fgets(line, sizeof(line), fd)) && !brk) { + l = parse_tag(l, "$Name:", "--", &brk); + if (l) { + char *s = fromgame(l); + free(l); + return s; + } + } + fclose(fd); + if (stat(path, &st)) + return NULL; + l = ctime(&st.st_ctime); + if (!l) + return NULL; + l[strcspn(l,"\n")] = 0; + return strdup(l); +} + +void load_menu(void) +{ + int i; + *menu_buff = 0; + sprintf(menu_buff, SELECT_LOAD_MENU); + for (i = 0; i < MAX_SAVE_SLOTS; i ++) { + char tmp[PATH_MAX]; + char *s = game_save_path(0, i); + if (!s || access(s, R_OK)) { + if (!i) + continue; + snprintf(tmp, sizeof(tmp), "%d - "SAVE_SLOT_EMPTY"\n", i); + } else { + char *name; + if (!i) + name = strdup(AUTOSAVE_SLOT); + else + name = slot_name(s); + if (!name) + snprintf(tmp, sizeof(tmp), "%d - "BROKEN_SLOT"\n", i); + else { + snprintf(tmp, sizeof(tmp), "%d - %s\n", i, i, name); + free(name); + } + } + strcat(menu_buff, tmp); + } + strcat(menu_buff,"\nОтмена"); +} + +void save_menu(void) +{ + int i; + *menu_buff = 0; + sprintf(menu_buff, SELECT_SAVE_MENU); + for (i = 1; i < MAX_SAVE_SLOTS; i ++) { + char tmp[PATH_MAX]; + char *s = game_save_path(0, i); + if (!s || access(s, R_OK)) + snprintf(tmp, sizeof(tmp), "%d - "SAVE_SLOT_EMPTY"\n", i, i); + else { + char *name; + if (!i) + name = strdup(AUTOSAVE_SLOT); + else + name = slot_name(s); + if (!name) + snprintf(tmp, sizeof(tmp), "%d - "BROKEN_SLOT"\n", i, i); + else { + snprintf(tmp, sizeof(tmp), "%d - %s\n", i, i, name); + free(name); + } + } + strcat(menu_buff, tmp); + } + strcat(menu_buff,"\nОтмена"); +} + void games_menu(void) { int i; @@ -1292,7 +1834,7 @@ void games_menu(void) if (curgame && !strcmp(games[i].name, curgame)) snprintf(tmp, sizeof(tmp), "%s\n", games[i].name); else - snprintf(tmp, sizeof(tmp), "%s\n", games[i].name, games[i].name); + snprintf(tmp, sizeof(tmp), "%s\n", games[i].dir, games[i].name); strcat(menu_buff, tmp); } if (!games_nr) @@ -1305,6 +1847,29 @@ void games_menu(void) strcat(menu_buff," >>"); } +void themes_menu(void) +{ + int i; + *menu_buff = 0; + sprintf(menu_buff, SELECT_THEME_MENU); + for (i = themes_menu_from; i < themes_nr && i - themes_menu_from < MENU_THEMES_MAX; i ++) { + char tmp[PATH_MAX]; + if (curtheme && !strcmp(themes[i].name, curtheme)) + snprintf(tmp, sizeof(tmp), "%s\n", themes[i].name); + else + snprintf(tmp, sizeof(tmp), "%s\n", themes[i].dir, themes[i].name); + strcat(menu_buff, tmp); + } + if (!themes_nr) + sprintf(menu_buff, NOTHEMES_MENU, THEMES_PATH); + strcat(menu_buff,"\n"); + if (themes_menu_from) + strcat(menu_buff,"<< "); + strcat(menu_buff, BACK_MENU); + if (themes_menu_from + MENU_THEMES_MAX < themes_nr) + strcat(menu_buff," >>"); +} + char *game_menu_gen(void) { if (cur_menu == menu_main) { @@ -1312,8 +1877,10 @@ char *game_menu_gen(void) } else if (cur_menu == menu_about) { snprintf(menu_buff, sizeof(menu_buff), ABOUT_MENU); } else if (cur_menu == menu_settings) { - snprintf(menu_buff, sizeof(menu_buff), - SETTINGS_MENU, vol_to_pcn(snd_volume_mus(-1)), snd_hz(), opt_hl?ON:OFF, opt_fs?ON:OFF, opt_autosave?ON:OFF); + snprintf(menu_buff, sizeof(menu_buff), SETTINGS_MENU, + vol_to_pcn(snd_volume_mus(-1)), snd_hz(), opt_music?ON:OFF, opt_click?ON:OFF, + opt_fs?ON:OFF, opt_fsize, opt_hl?ON:OFF, opt_motion?ON:OFF, opt_filter?ON:OFF, + opt_owntheme?ON:OFF, opt_autosave?ON:OFF); } else if (cur_menu == menu_askquit) { snprintf(menu_buff, sizeof(menu_buff), QUIT_MENU); } else if (cur_menu == menu_saved) { @@ -1321,6 +1888,26 @@ char *game_menu_gen(void) SAVED_MENU); } else if (cur_menu == menu_games) { games_menu(); + } else if (cur_menu == menu_themes) { + themes_menu(); + } else if (cur_menu == menu_own_theme) { + snprintf(menu_buff, sizeof(menu_buff), + OWN_THEME_MENU); + } else if (cur_menu == menu_custom_theme) { + snprintf(menu_buff, sizeof(menu_buff), + CUSTOM_THEME_MENU); + } else if (cur_menu == menu_load) { + load_menu(); + } else if (cur_menu == menu_save) { + save_menu(); + } else if (cur_menu == menu_error) { + snprintf(menu_buff, sizeof(menu_buff), + ERROR_MENU, err_msg?err_msg:UNKNOWN_ERROR); + game_err_msg(NULL); + } else if (cur_menu == menu_warning) { + snprintf(menu_buff, sizeof(menu_buff), + WARNING_MENU, err_msg?err_msg:UNKNOWN_ERROR); + game_err_msg(NULL); } return menu_buff; } @@ -1355,7 +1942,16 @@ void game_menu_box(int show, const char *txt) gfx_flip(); return; } - lay = txt_layout(game_theme.menu_font, ALIGN_CENTER, game_theme.win_w, 0); + lay = txt_layout(game_theme.menu_font, ALIGN_CENTER, game_theme.win_w - 2 * (b + pad), 0); + txt_layout_set(lay, (char*)txt); + txt_layout_real_size(lay, &w, &h); + txt_layout_free(lay); + + lay = txt_layout(game_theme.menu_font, ALIGN_CENTER, w, 0); + + txt_layout_set(lay, (char*)txt); + txt_layout_real_size(lay, &w, &h); + txt_layout_color(lay, game_theme.menu_fg); txt_layout_link_color(lay, game_theme.menu_link); txt_layout_active_color(lay, game_theme.menu_alink); @@ -1369,7 +1965,7 @@ void game_menu_box(int show, const char *txt) gfx_img_fill(menu, 0, 0, w + (b + pad)*2, h + (b + pad)*2, game_theme.border_col); gfx_img_fill(menu, b, b, w + pad*2, h + pad*2, game_theme.menu_bg); gfx_set_alpha(menu, game_theme.menu_alpha); - x = (game_theme.win_w - w)/2 + game_theme.win_x; // (game_theme.w - w)/2; + x = (game_theme.win_w - w)/2 + game_theme.win_x; //(game_theme.w - w)/2; y = (game_theme.win_h - h)/2 + game_theme.win_y; //(game_theme.h - h)/2; mx = x - b - pad; my = y - b - pad; @@ -1377,7 +1973,7 @@ void game_menu_box(int show, const char *txt) mh = h + (b + pad) * 2; menubg = gfx_grab_screen(mx, my, mw, mh); gfx_draw(menu, mx, my); - el_set(el_menu, elt_layout, game_theme.win_x, y, lay); + el_set(el_menu, elt_layout, /*game_theme.win_x*/ x, y, lay); el_draw(el_menu); gfx_flip(); } @@ -1436,45 +2032,128 @@ void scene_scrollbar(void) el_draw(el_sup); } + +static void dec_music(void *data) +{ + char *mus; + if (!curgame) + return; + mus = instead_eval("return dec_music_loop()"); + if (!mus) + return; + if (atoi(mus) == -1) + free_last_music(); + free(mus); +} + +void game_music_finished(void) +{ + push_user_event(&dec_music, NULL); +} + +void unix_path(char *path) +{ + char *p = path; + if (!path) + return; + while (*p) { /* bad bad Windows!!! */ + if (*p == '\\') + *p = '/'; + p ++; + } + return; +} + void music_player(void) { + int loop; char *mus; if (!snd_volume_mus(-1)) return; - mus = instead_eval("return get_music()"); + if (!opt_music) + return; + + mus = instead_eval("return get_music_loop()"); + if (mus) { - if (!last_music && mus) { - last_music = mus; - snd_stop_mus(500); - snd_play_mus(mus, 0); - } else if (strcmp(last_music, mus)) { - free(last_music); - last_music = mus; - snd_stop_mus(500); - snd_play_mus(mus, 0); - } else - free(mus); + loop = atoi(mus); + free(mus); + } else + loop = -1; + + mus = instead_eval("return get_music()"); + unix_path(mus); + + if (mus && loop == -1) { /* disabled, 0 - forever, 1-n - loops */ + free(mus); + mus = NULL; } + + if (!mus) { + if (last_music) { + free(last_music); + snd_stop_mus(500); + last_music = NULL; + } + } else if (!last_music && mus) { + last_music = mus; + snd_stop_mus(500); + snd_play_mus(mus, 0, loop - 1); + } else if (strcmp(last_music, mus)) { + free(last_music); + last_music = mus; + snd_stop_mus(500); + snd_play_mus(mus, 0, loop - 1); + } else + free(mus); +} + +char *horiz_inv(char *invstr) +{ + char *p = invstr; + char *ns = malloc(strlen(p) * 3); + char *np = ns; + if (!np) + return invstr; + while (*p) { + if (*p == '\n') { + if (p[strspn(p, " \n\t")]) { + *(np++) = ' '; + *(np++) = '|'; + *(np) = ' '; + } else + break; + } else + *np = *p; + p ++; + np ++; + } + *(np++) = '\n'; + *np = 0; + free(invstr); + invstr = ns; + return invstr; } int game_cmd(char *cmd) { int new_pict = 0, new_place = 0; int title_h = 0, ways_h = 0, pict_h = 0; - char buf[256]; + char buf[512]; char *cmdstr; char *invstr; char *waystr; char *title; char *pict; - img_t oldscreen; + img_t oldscreen = NULL; cmdstr = instead_cmd(cmd); - if (!cmdstr) { - return -1; - } + if (!cmdstr) + goto err; music_player(); +// sound_player(); /* TODO */ title = instead_eval("return get_title();"); + unix_path(title); if (title) { snprintf(buf, sizeof(buf), "%s", title); txt_layout_set(el_layout(el_title), buf); @@ -1484,7 +2163,7 @@ int game_cmd(char *cmd) new_place = check_new_place(title); txt_layout_size(el_layout(el_title), NULL, &title_h); -// title_h += 12; // todo + title_h += game_theme.font_size / 2; // todo? pict = instead_eval("return get_picture();"); new_pict = check_new_pict(pict); @@ -1494,23 +2173,33 @@ int game_cmd(char *cmd) img_t img; if (new_pict) { - img = gfx_load_image(pict, 1); + img = gfx_load_image(pict); if (el_img(el_spic)) gfx_free_image(el_img(el_spic)); el(el_spic)->p.p = NULL; - img = game_pict_scale(img, game_theme.win_w, game_theme.max_scene_h); + if (game_theme.gfx_mode != GFX_MODE_FLOAT) + img = game_pict_scale(img, game_theme.win_w, game_theme.max_scene_h); + else + img = game_pict_scale(img, game_theme.max_scene_w, game_theme.max_scene_h); } else img = el_img(el_spic); if (img) { w = gfx_img_w(img); h = gfx_img_h(img); - x = (game_theme.win_w - w)/2 + game_theme.win_x; - el_set(el_spic, elt_image, x, game_theme.win_y + title_h, img); + if (game_theme.gfx_mode != GFX_MODE_FLOAT) { + x = (game_theme.win_w - w)/2 + game_theme.win_x; + el_set(el_spic, elt_image, x, game_theme.win_y + title_h, img); + } else { + x = (game_theme.max_scene_w - w)/2 + game_theme.gfx_x; + el_set(el_spic, elt_image, x, game_theme.gfx_y/* + (game_theme.max_scene_h - h)/2*/, img); + } +// if (!game_theme.emb_gfx) pict_h = h; } } else if (el_img(el_spic)) { - el_clear(el_spic); + if (game_theme.gfx_mode != GFX_MODE_EMBEDDED) + el_clear(el_spic); gfx_free_image(el_img(el_spic)); el(el_spic)->p.p = NULL; } @@ -1518,18 +2207,49 @@ int game_cmd(char *cmd) waystr = instead_cmd("way"); invstr = instead_cmd("inv"); + if (invstr && game_theme.inv_mode == INV_MODE_HORIZ) { + invstr = horiz_inv(invstr); + } + if (waystr) { waystr[strcspn(waystr,"\n")] = 0; } - txt_layout_set(el_layout(el_ways), waystr); + if (game_theme.gfx_mode != GFX_MODE_EMBEDDED) { + txt_layout_set(el_layout(el_ways), waystr); + txt_layout_size(el_layout(el_ways), NULL, &ways_h); + } + + + if (game_theme.gfx_mode == GFX_MODE_EMBEDDED) { + int off = 0; + if (!new_pict && !new_place) { + off = txt_box_off(el_box(el_scene)); + if (off > pict_h) + off = pict_h; + } + pict_h = 0; /* to fake code bellow */ + txt_layout_set(txt_box_layout(el_box(el_scene)), ""); /* hack, to null layout, but not images */ + if (el_img(el_spic)) { + txt_layout_add_img(txt_box_layout(el_box(el_scene)),"scene", el_img(el_spic)); + txt_layout_add(txt_box_layout(el_box(el_scene)), "\n"); + } + txt_layout_add(txt_box_layout(el_box(el_scene)), waystr); + txt_layout_add(txt_box_layout(el_box(el_scene)), "\n"); /* small hack */ + txt_layout_add(txt_box_layout(el_box(el_scene)), cmdstr); + txt_box_set(el_box(el_scene), txt_box_layout(el_box(el_scene))); + if (!new_pict && !new_place) + txt_box_scroll(el_box(el_scene), off); + } else { + if (game_theme.gfx_mode == GFX_MODE_FLOAT) + pict_h = 0; + txt_layout_set(txt_box_layout(el_box(el_scene)), cmdstr); + txt_box_set(el_box(el_scene), txt_box_layout(el_box(el_scene))); + } + free(cmdstr); + el(el_ways)->y = el(el_title)->y + title_h + pict_h; if (waystr) free(waystr); - txt_layout_size(el_layout(el_ways), NULL, &ways_h); - el(el_ways)->y = el(el_title)->y + title_h + pict_h; - txt_layout_set(txt_box_layout(el_box(el_scene)), cmdstr); - txt_box_set(el_box(el_scene), txt_box_layout(el_box(el_scene))); - free(cmdstr); el(el_scene)->y = el(el_ways)->y + ways_h; /* draw title and ways */ @@ -1540,6 +2260,9 @@ int game_cmd(char *cmd) } if (new_pict || new_place) { game_clear(game_theme.win_x, game_theme.win_y, game_theme.win_w, game_theme.win_h); + if (game_theme.gfx_mode == GFX_MODE_FLOAT) { + game_clear(game_theme.gfx_x, game_theme.gfx_y, game_theme.max_scene_w, game_theme.max_scene_h); + } // el_draw(el_title); } else { game_clear(game_theme.win_x, game_theme.win_y + pict_h + title_h, @@ -1548,15 +2271,22 @@ int game_cmd(char *cmd) el_clear(el_title); el_draw(el_title); - el_draw(el_ways); - if (new_pict || new_place) - el_draw(el_spic); + if (game_theme.gfx_mode != GFX_MODE_EMBEDDED) { + el_draw(el_ways); + if ((new_pict || new_place)) + el_draw(el_spic); + } txt_box_resize(el_box(el_scene), game_theme.win_w, game_theme.win_h - title_h - ways_h - pict_h); el_draw(el_scene); - txt_layout_set(txt_box_layout(el_box(el_inv)), invstr); - txt_box_set(el_box(el_inv), txt_box_layout(el_box(el_inv))); + do { + int off = txt_box_off(el_box(el_inv)); + txt_layout_set(txt_box_layout(el_box(el_inv)), invstr); + txt_box_set(el_box(el_inv), txt_box_layout(el_box(el_inv))); + txt_box_scroll(el_box(el_inv), off); + } while(0); + if (invstr) free(invstr); @@ -1569,9 +2299,16 @@ int game_cmd(char *cmd) offscreen = gfx_screen(oldscreen); gfx_change_screen(offscreen); gfx_free_image(offscreen); - return 0; +// input_clear(); + goto err; + } + gfx_flip(); +// input_clear(); +err: + if (err_msg) { + game_menu(menu_warning); + return -1; } - gfx_flip(); return 0; } @@ -1675,20 +2412,6 @@ int game_highlight(int x, int y, int on) hxref = NULL; } hxref = xref; -// if (!up || !elem) -// return 0; -// xref_update(hxref, elem->x, elem->y, game_clear); -// game_cursor(2); -// game_cursor(0); - -// if (elem->id == el_menu) { -// menu_update(elem); -// } -// else if (elem->type == elt_layout) -// txt_layout_update_links(elem->p.lay, elem->x, elem->y, game_clear); -// else if (elem->type == elt_box) -// txt_box_update_links(elem->p.box, elem->x, elem->y, game_clear); -// el_update(elem->id); oel = elem; return 0; } @@ -1699,86 +2422,128 @@ void menu_toggle(void) game_highlight(-1, -1, 0); disable_inv(); menu_shown ^= 1; + motion_mode = 0; + old_xref = old_el = NULL; if (!menu_shown) cur_menu = menu_main; game_menu_box(menu_shown, game_menu_gen()); } +static void scroll_pup(int id) +{ + game_cursor(0); + game_highlight(-1, -1, 0); + if (game_theme.gfx_mode == GFX_MODE_EMBEDDED) { + int hh; + el_size(el_scene, NULL, &hh); + txt_box_scroll(el_box(id), -hh); + } else + txt_box_prev(el_box(id)); + el_clear(id); + el_draw(id); + el_update(id); +} + +static void scroll_pdown(int id) +{ + game_cursor(0); + game_highlight(-1, -1, 0); + if (game_theme.gfx_mode == GFX_MODE_EMBEDDED) { + int hh; + el_size(el_scene, NULL, &hh); + txt_box_scroll(el_box(id), hh); + } else + txt_box_next(el_box(id)); + el_clear(id); + el_draw(id); + el_update(id); +} + +static unsigned int old_counter = 0; +extern unsigned int timer_counter; +int mouse_filter(void) +{ + if (!opt_filter) + return 0; + if (abs(old_counter - timer_counter) <= 4) /* 400 ms */ + return -1; + old_counter = timer_counter; + return 0; +} + int game_click(int x, int y, int action) { struct el *elem = NULL; - char buf[256]; - xref_t xref; - - if (old_xref) { + char buf[512]; + xref_t xref = NULL; + + if (action) + motion_mode = 0; + + if (opt_filter && action) { + xref_t new_xref; + struct el *new_elem; + new_xref = look_xref(x, y, &new_elem); + if (new_xref != old_xref || new_elem != old_el) { + old_el = NULL; + if (old_xref) { + old_xref = NULL; + return 0; /* just filtered */ + } + old_xref = NULL; + } + } + if (action) { xref = old_xref; elem = old_el; - } else { + old_xref = NULL; + old_el = NULL; + } else { /* just press */ xref = look_xref(x, y, &elem); + if (xref) { + xref_set_active(xref, 1); + xref_update(xref, elem->x, elem->y, game_clear); + } else if (elem && elem->type == elt_box && opt_motion) { + motion_mode = 1; + motion_id = elem->id; + motion_y =y; + return 0; + } + old_xref = xref; + old_el = elem; + return 0; } + /* now look only second press */ if (!xref) { - if (action && elem) { + if (elem) { if (elem->id == el_menu_button) { menu_toggle(); } else if (elem->id == el_sdown) { - txt_box_next(el_box(el_scene)); - el_clear(el_scene); - el_draw(el_scene); - el_update(el_scene); - } - else if (elem->id == el_sup) { - txt_box_prev(el_box(el_scene)); - el_clear(el_scene); - el_draw(el_scene); - el_update(el_scene); - } - else if (elem->id == el_idown) { - txt_box_next(el_box(el_inv)); - el_clear(el_inv); - el_draw(el_inv); + scroll_pdown(el_scene); + } else if (elem->id == el_sup) { + scroll_pup(el_scene); + } else if (elem->id == el_idown) { + scroll_pdown(el_inv); + } else if (elem->id == el_iup) { + scroll_pup(el_inv); + } else if (disable_inv()) el_update(el_inv); - } - else if (elem->id == el_iup) { - txt_box_prev(el_box(el_inv)); - el_clear(el_inv); - el_draw(el_inv); - el_update(el_inv); - } - } - if (disable_inv()) { + motion_mode = 0; + } else if (disable_inv()) { el_update(el_inv); // gfx_flip(); } return 0; } - - if (!action) { - xref_set_active(xref, 1); - xref_update(xref, elem->x, elem->y, game_clear); -/* - if (elem->id == el_menu) { - menu_update(elem); - } else if (elem->type == elt_layout) - txt_layout_update_links(elem->p.lay, elem->x, elem->y, game_clear); - else if (elem->type == elt_box) - txt_box_update_links(elem->p.box, elem->x, elem->y, game_clear); - el_update(elem->id); */ - old_xref = xref; - old_el = elem; - return 0; - } - - old_el = NULL; - old_xref = NULL; - +/* second xref */ if (elem->id == el_menu) { // xref_set_active(xref, 0); // txt_layout_update_links(elem->p.lay, elem->x, elem->y, game_clear); if (game_menu_act(xref_get_text(xref))) { return -1; } - game_menu_box(menu_shown, game_menu_gen()); +// game_menu_box(menu_shown, game_menu_gen()); // gfx_flip(); return 1; } @@ -1786,7 +2551,14 @@ int game_click(int x, int y, int action) if (elem->id == el_ways || elem->id == el_title) { strcpy(buf, xref_get_text(xref)); - disable_inv(); + if (mouse_filter()) + return 0; + if (opt_click) + snd_play(game_theme.click); + if (disable_inv()) { + el_update(el_inv); + return 0; + } game_cmd(buf); return 1; } @@ -1797,6 +2569,10 @@ int game_click(int x, int y, int action) disable_inv(); } else strcpy(buf, xref_get_text(xref)); + if (mouse_filter()) + return 0; + if (opt_click) + snd_play(game_theme.click); game_cmd(buf); return 1; } @@ -1812,6 +2588,10 @@ int game_click(int x, int y, int action) else snprintf(buf,sizeof(buf), "use %s,%s", xref_get_text(inv_xref), xref_get_text(xref)); disable_inv(); + if (mouse_filter()) + return 0; + if (opt_click) + snd_play(game_theme.click); game_cmd(buf); return 1; } @@ -1822,15 +2602,17 @@ void game_cursor(int on) { static img_t grab = NULL; static int xc, yc, w, h; + if (grab) { gfx_draw(grab, xc, yc); gfx_free_image(grab); grab = NULL; + if (!on) { + gfx_update(xc, yc, gfx_img_w(game_theme.use), gfx_img_h(game_theme.use)); + return; + } } - if (!on) { - gfx_update(xc, yc, gfx_img_w(game_theme.use), gfx_img_h(game_theme.use)); - return; - } + if (on == -1) return; if (inv_xref) { @@ -1846,15 +2628,88 @@ void game_cursor(int on) } } + +static void scroll_up(int id, int count) +{ + int i; + game_cursor(0); + game_highlight(-1, -1, 0); + if (game_theme.gfx_mode == GFX_MODE_EMBEDDED) + txt_box_scroll(el_box(id), -(FONT_SZ(game_theme.font_size)) * count); + else + for (i = 0; i < count; i++) + txt_box_prev_line(el_box(id)); + el_clear(id); + el_draw(id); + el_update(id); +} + +static void scroll_down(int id, int count) +{ + int i; + game_cursor(0); + game_highlight(-1, -1, 0); + if (game_theme.gfx_mode == GFX_MODE_EMBEDDED) + txt_box_scroll(el_box(id), (FONT_SZ(game_theme.font_size)) * count); + else + for (i = 0; i < count; i++) + txt_box_next_line(el_box(id)); + el_clear(id); + el_draw(id); + el_update(id); +} + +static void scroll_motion(int id, int off) +{ + game_cursor(0); + game_highlight(-1, -1, 0); + txt_box_scroll(el_box(id), off); + el_clear(id); + el_draw(id); + el_update(id); +} + +static int alt_pressed = 0; int game_loop(void) { static int x = 0, y = 0; struct inp_event ev; while (1) { - if (input(&ev, 1) == -1) /* close */ + int rc; + ev.x = -1; + while ((rc = input(&ev, 1)) == AGAIN); + if (rc == -1) /* close */ break; - if (ev.type == KEY_DOWN && ev.sym && !strcmp(ev.sym,"escape")) { - menu_toggle(); + else if (((ev.type == KEY_DOWN) || (ev.type == KEY_UP)) && ev.sym && + (!strcmp(ev.sym,"left alt") || !strcmp(ev.sym, "right alt"))) { + alt_pressed = (ev.type == KEY_DOWN) ? 1:0; + } else if (ev.type == KEY_DOWN && ev.sym) { + if (!strcmp(ev.sym,"escape")) { + menu_toggle(); + } else if (!strcmp(ev.sym,"up") && !menu_shown) { + scroll_up(el_scene, 1); + } else if (!strcmp(ev.sym,"down") && !menu_shown) { + scroll_down(el_scene, 1); + } else if ((!strcmp(ev.sym,"page up") || !strcmp(ev.sym, "backspace")) && !menu_shown) { + scroll_pup(el_scene); + } else if ((!strcmp(ev.sym,"page down") || !strcmp(ev.sym, "space")) && !menu_shown) { + scroll_pdown(el_scene); + } else if (alt_pressed && !strcmp(ev.sym, "q")) { + break; + } else if (alt_pressed && + (!strcmp(ev.sym,"enter") || !strcmp(ev.sym, "return"))) { + int old_menu = -1; + game_menu_act("/fs"); + game_highlight(-1, -1, 0); + disable_inv(); + old_xref = old_el = NULL; + if (menu_shown) + old_menu = cur_menu; + game_restart(); + if (old_menu != -1) + game_menu(old_menu); +// game_menu_act("/main"); + } } else if (ev.type == MOUSE_DOWN) { game_cursor(0); game_highlight(-1, -1, 0); @@ -1864,7 +2719,7 @@ int game_loop(void) } else if (ev.type == MOUSE_UP) { game_cursor(0); game_highlight(-1, -1, 0); - if (game_click(x, y, 1) == -1) + if (game_click(ev.x, ev.y, 1) == -1) break; } else if (ev.type == MOUSE_WHEEL_UP && !menu_shown) { int xm, ym; @@ -1872,12 +2727,7 @@ int game_loop(void) gfx_cursor(&xm, &ym, NULL, NULL); o = look_obj(xm, ym); if (o && (o->id == el_scene || o->id == el_inv)) { - game_cursor(0); - game_highlight(-1, -1, 0); - txt_box_prev_line(el_box(o->id)); - el_clear(o->id); - el_draw(o->id); - el_update(o->id); + scroll_up(o->id, ev.count); } } else if (ev.type == MOUSE_WHEEL_DOWN && !menu_shown) { int xm, ym; @@ -1885,17 +2735,19 @@ int game_loop(void) gfx_cursor(&xm, &ym, NULL, NULL); o = look_obj(xm, ym); if (o && (o->id == el_scene || o->id == el_inv)) { - game_cursor(0); - game_highlight(-1, -1, 0); - txt_box_next_line(el_box(o->id)); - el_clear(o->id); - el_draw(o->id); - el_update(o->id); + scroll_down(o->id, ev.count); } } else if (ev.type == MOUSE_MOTION) { + if (motion_mode) { + scroll_motion(motion_id, motion_y - ev.y); + motion_y = ev.y; + } // game_highlight(ev.x, ev.y, 1); } - game_highlight(ev.x, ev.y, 1); + if (old_xref) + game_highlight(x, y, 1); + else if (ev.x >= 0) + game_highlight(ev.x, ev.y, 1); game_cursor(1); } return 0; diff --git a/src/sdl-instead/game.h b/src/sdl-instead/game.h index 020e016..a85ccab 100644 --- a/src/sdl-instead/game.h +++ b/src/sdl-instead/game.h @@ -1,9 +1,50 @@ #ifndef __GAME_H__ #define __GAME_H__ + +#ifndef GAMES_PATH +#define GAMES_PATH "./games" +#endif + +#define DEFAULT_THEME "default" +#ifndef THEMES_PATH +#define THEMES_PATH "./themes" +#endif + +#define MAIN_FILE "main.lua" +#define THEME_FILE "theme.ini" + +#define MENU_GAMES_MAX 8 +#define MENU_THEMES_MAX 8 + +#define FONT_MIN_SZ 8 +#define FONT_MAX_SZ 64 + +#define MAX_SAVE_SLOTS 6 +extern char *game_local_games_path(void); +extern char *game_local_themes_path(void); +extern int cfg_load(void); +extern int cfg_save(void); +extern char *opt_game; + +extern int nosound_sw; +extern int alsa_sw; +extern int fullscreen_sw; +extern int window_sw; + +extern int opt_fs; +extern char *opt_theme; +extern char *curtheme; +extern int game_theme_select(const char *name); + + extern int game_load_theme(const char *path); extern int game_init(const char *game); extern void game_done(void); extern int game_loop(void); -extern int games_lookup(void); + +extern int games_lookup(const char *path); +extern int themes_lookup(const char *path); +extern void game_err_msg(const char *s); +extern int game_error(const char *name); #endif diff --git a/src/sdl-instead/graphics.c b/src/sdl-instead/graphics.c index 7fb0e85..8570f49 100644 --- a/src/sdl-instead/graphics.c +++ b/src/sdl-instead/graphics.c @@ -2,7 +2,8 @@ #include #include #include -#include /* for usleep */ +#include "SDL_rotozoom.h" +#include "input.h" #include "graphics.h" #include "math.h" @@ -352,35 +353,16 @@ img_t gfx_combine(img_t src, img_t dst) return new; } -img_t gfx_load_image(char *filename, int transparent) +img_t gfx_load_image(char *filename) { - SDL_Surface *img, *img2; + SDL_Surface *img; img = IMG_Load(filename); if (!img) { fprintf(stderr, "File not found: '%s'\n", filename); return NULL; } - if (transparent && transparent != 2) { - SDL_SetColorKey(img, SDL_RLEACCEL, img->format->colorkey); - return img; - } - // Create hardware surface - img2 = SDL_CreateRGBSurface(SDL_HWSURFACE | (transparent)?SDL_SRCCOLORKEY:0, - img->w, img->h, 16, 0xF800, 0x7E0, 0x1F, 0); - if (!img2) { - SDL_FreeSurface(img); - fprintf(stderr, "Error creating surface!\n"); - return NULL; - } - - if (transparent) - SDL_SetColorKey(img2, SDL_SRCCOLORKEY | SDL_RLEACCEL, 0xF81F); - - SDL_SetAlpha(img2, 0, 0); - SDL_BlitSurface(img, NULL, img2, NULL); - SDL_FreeSurface(img); - return img2; + return img; } void gfx_draw_bg(img_t p, int x, int y, int width, int height) @@ -458,10 +440,38 @@ void gfx_clear(int x, int y, int w, int h) int gfx_width; int gfx_height; -int gfx_init(int width, int height, int fs) + +int gfx_setmode(int w, int h, int fs) { - gfx_width = width; - gfx_height = height; + gfx_width = w; + gfx_height = h; + + screen = SDL_SetVideoMode(gfx_width, gfx_height, 32, SDL_DOUBLEBUF | SDL_HWSURFACE | ( ( fs ) ? SDL_FULLSCREEN : 0 ) ); + if (screen == NULL) { + fprintf(stderr, "Unable to set %dx%d video: %s\n", w, h, SDL_GetError()); + return -1; + } + + gfx_clear(0, 0, gfx_width, gfx_height); + return 0; +} + +unsigned int timer_counter = 0; + +SDL_TimerID timer_han = NULL; +static SDL_Surface *icon = NULL; +Uint32 counter_fn(Uint32 interval, void *p) +{ + timer_counter ++; + return interval; +} + +int gfx_init(void) +{ + char title[4096]; + + strcpy( title, "INSTEAD SDL - " ); + strcat( title, VERSION ); if (TTF_Init()) { fprintf(stderr, "Can't init TTF subsystem.\n"); @@ -469,21 +479,22 @@ int gfx_init(int width, int height, int fs) } // Initialize SDL - if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER | SDL_INIT_AUDIO) < 0) { + if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER /*| SDL_INIT_AUDIO*/) < 0) { fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError()); return -1; } - screen = SDL_SetVideoMode(gfx_width, gfx_height, 32, SDL_DOUBLEBUF | SDL_HWSURFACE | ((fs)?SDL_FULLSCREEN:0)); - SDL_WM_SetCaption("IN S.T.E.A.D SDL - "VERSION, NULL); -// icon = IMG_Load( GAMEDATADIR"icon/lines.png" ); -// if (icon) { -// SDL_WM_SetIcon( icon, NULL ); -// } - if (screen == NULL) { - fprintf(stderr, "Unable to set 800x480 video: %s\n", SDL_GetError()); - return -1; + + SDL_WM_SetCaption( title, title ); + +#ifndef ICON_PATH +#define ICON_PATH "./icon" +#endif + + icon = IMG_Load( ICON_PATH"/sdl_instead.png" ); + if ( icon ) { + SDL_WM_SetIcon( icon, NULL ); } - gfx_clear(0, 0, gfx_width, gfx_height); + timer_han = SDL_AddTimer(100, counter_fn, NULL); return 0; } void gfx_flip(void) @@ -516,339 +527,18 @@ void gfx_update(int x, int y, int w, int h) { void gfx_done(void) { + if (icon) + SDL_FreeSurface(icon); + if (timer_han) + SDL_RemoveTimer(timer_han); + timer_han = NULL; TTF_Quit(); - SDL_Quit(); -} - -/* code from sge */ -#ifndef PI - #define PI 3.1414926535 -#endif - -void _PutPixel24(SDL_Surface *surface, Sint16 x, Sint16 y, Uint32 color) -{ - Uint8 *pix = (Uint8 *)surface->pixels + y * surface->pitch + x*3; - - /* Gack - slow, but endian correct */ - *(pix+surface->format->Rshift/8) = color>>surface->format->Rshift; - *(pix+surface->format->Gshift/8) = color>>surface->format->Gshift; - *(pix+surface->format->Bshift/8) = color>>surface->format->Bshift; - *(pix+surface->format->Ashift/8) = color>>surface->format->Ashift; -} -void _PutPixel32(SDL_Surface *surface, Sint16 x, Sint16 y, Uint32 color) -{ - *((Uint32 *)surface->pixels + y*surface->pitch/4 + x) = color; -} - -void _PutPixelX(SDL_Surface *dest,Sint16 x,Sint16 y,Uint32 color) -{ - switch ( dest->format->BytesPerPixel ) { - case 1: - *((Uint8 *)dest->pixels + y*dest->pitch + x) = color; - break; - case 2: - *((Uint16 *)dest->pixels + y*dest->pitch/2 + x) = color; - break; - case 3: - _PutPixel24(dest,x,y,color); - break; - case 4: - *((Uint32 *)dest->pixels + y*dest->pitch/4 + x) = color; - break; - } -} - -Uint32 sge_GetPixel(SDL_Surface *surface, Sint16 x, Sint16 y) -{ - if(x<0 || x>=surface->w || y<0 || y>=surface->h) - return 0; - - switch (surface->format->BytesPerPixel) { - case 1: { /* Assuming 8-bpp */ - return *((Uint8 *)surface->pixels + y*surface->pitch + x); - } - break; - - case 2: { /* Probably 15-bpp or 16-bpp */ - return *((Uint16 *)surface->pixels + y*surface->pitch/2 + x); - } - break; - - case 3: { /* Slow 24-bpp mode, usually not used */ - Uint8 *pix; - int shift; - Uint32 color=0; - - pix = (Uint8 *)surface->pixels + y * surface->pitch + x*3; - shift = surface->format->Rshift; - color = *(pix+shift/8)<format->Gshift; - color|= *(pix+shift/8)<format->Bshift; - color|= *(pix+shift/8)<format->Ashift; - color|= *(pix+shift/8)<pixels + y*surface->pitch/4 + x); - } - break; - } - return 0; -} - -/* -* Macro to get clipping -*/ -#if SDL_VERSIONNUM(SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL) >= \ - SDL_VERSIONNUM(1, 1, 5) - #define sge_clip_xmin(pnt) pnt->clip_rect.x - #define sge_clip_xmax(pnt) pnt->clip_rect.x + pnt->clip_rect.w-1 - #define sge_clip_ymin(pnt) pnt->clip_rect.y - #define sge_clip_ymax(pnt) pnt->clip_rect.y + pnt->clip_rect.h-1 -#else - #define sge_clip_xmin(pnt) pnt->clip_minx - #define sge_clip_xmax(pnt) pnt->clip_maxx - #define sge_clip_ymin(pnt) pnt->clip_miny - #define sge_clip_ymax(pnt) pnt->clip_maxy -#endif - -#define SWAP(x,y,temp) temp=x;x=y;y=temp -//================================================================================== -// Helper function to sge_transform() -// Returns the bounding box -//================================================================================== -void _calcRect(SDL_Surface *src, SDL_Surface *dst, float theta, float xscale, float yscale, Uint16 px, Uint16 py, Uint16 qx, Uint16 qy, Sint16 *xmin, Sint16 *ymin, Sint16 *xmax, Sint16 *ymax) -{ - int i; - Sint16 x, y, rx, ry; - Sint32 istx, ictx, isty, icty; - // Clip to src surface - Sint16 sxmin = sge_clip_xmin(src); - Sint16 sxmax = sge_clip_xmax(src); - Sint16 symin = sge_clip_ymin(src); - Sint16 symax = sge_clip_ymax(src); - Sint16 sx[]={sxmin, sxmax, sxmin, sxmax}; - Sint16 sy[]={symin, symax, symax, symin}; - - // We don't really need fixed-point here - // but why not? - istx = (Sint32)((sin(theta)*xscale) * 8192.0); /* Inverse transform */ - ictx = (Sint32)((cos(theta)*xscale) * 8192.2); - isty = (Sint32)((sin(theta)*yscale) * 8192.0); - icty = (Sint32)((cos(theta)*yscale) * 8192.2); - - //Calculate the four corner points - for(i=0; i<4; i++){ - rx = sx[i] - px; - ry = sy[i] - py; - - x = (Sint16)(((ictx*rx - isty*ry) >> 13) + qx); - y = (Sint16)(((icty*ry + istx*rx) >> 13) + qy); - - - if(i==0){ - *xmax = *xmin = x; - *ymax = *ymin = y; - }else{ - if(x>*xmax) - *xmax=x; - else if(x<*xmin) - *xmin=x; - - if(y>*ymax) - *ymax=y; - else if(y<*ymin) - *ymin=y; - } - } - - //Better safe than sorry... - *xmin -= 1; - *ymin -= 1; - *xmax += 1; - *ymax += 1; - - //Clip to dst surface - if( !dst ) - return; - if( *xmin < sge_clip_xmin(dst) ) - *xmin = sge_clip_xmin(dst); - if( *xmax > sge_clip_xmax(dst) ) - *xmax = sge_clip_xmax(dst); - if( *ymin < sge_clip_ymin(dst) ) - *ymin = sge_clip_ymin(dst); - if( *ymax > sge_clip_ymax(dst) ) - *ymax = sge_clip_ymax(dst); -} - -#define TRANSFORM_GENERIC_AA \ - Uint8 R, G, B, A, R1, G1, B1, A1=0, R2, G2, B2, A2=0, R3, G3, B3, A3=0, R4, G4, B4, A4=0; \ - Sint32 wx, wy, p1, p2, p3, p4;\ -\ - Sint32 const one = 2048; /* 1 in Fixed-point */ \ - Sint32 const two = 2*2048; /* 2 in Fixed-point */ \ -\ - for (y=ymin; y> 13); /* Convert from fixed-point */ \ - ry=(Sint16)(sy >> 13); \ -\ - /* Make sure the source pixel is actually in the source image. */ \ - if( (rx>=sxmin) && (rx+1<=sxmax) && (ry>=symin) && (ry+1<=symax) ){ \ - wx = (sx & 0x00001FFF) >> 2; /* (float(x) - int(x)) / 4 */ \ - wy = (sy & 0x00001FFF) >> 2;\ -\ - p4 = wx+wy;\ - p3 = one-wx+wy;\ - p2 = wx+one-wy;\ - p1 = two-wx-wy;\ -\ - SDL_GetRGBA(sge_GetPixel(src,rx, ry), src->format, &R1, &G1, &B1, &A1);\ - SDL_GetRGBA(sge_GetPixel(src,rx+1,ry), src->format, &R2, &G2, &B2, &A2);\ - SDL_GetRGBA(sge_GetPixel(src,rx, ry+1), src->format, &R3, &G3, &B3, &A3);\ - SDL_GetRGBA(sge_GetPixel(src,rx+1,ry+1), src->format, &R4, &G4, &B4, &A4);\ -\ - /* Calculate the average */\ - R = (p1*R1 + p2*R2 + p3*R3 + p4*R4)>>13;\ - G = (p1*G1 + p2*G2 + p3*G3 + p4*G4)>>13;\ - B = (p1*B1 + p2*B2 + p3*B3 + p4*B4)>>13;\ - A = (p1*A1 + p2*A2 + p3*A3 + p4*A4)>>13;\ -\ - _PutPixelX(dst,x,y,SDL_MapRGBA(dst->format, R, G, B, A)); \ - \ - } \ - sx += ctx; /* Incremental transformations */ \ - sy -= sty; \ - } \ - } - -Uint8 _sge_lock=1; - -SDL_Rect sge_transformAA(SDL_Surface *src, SDL_Surface *dst, float angle, float xscale, float yscale ,Uint16 px, Uint16 py, Uint16 qx, Uint16 qy, Uint8 flags) -{ - Sint32 dy, sx, sy; - Sint16 x, y, rx, ry; - SDL_Rect r; - r.x = r.y = r.w = r.h = 0; - - float theta = (float)(angle*PI/180.0); /* Convert to radians. */ - - - // Here we use 18.13 fixed point integer math - // Sint32 should have 31 usable bits and one for sign - // 2^13 = 8192 - - // Check scales - Sint32 maxint = (Sint32)(pow(2, sizeof(Sint32)*8 - 1 - 13)); // 2^(31-13) - - if( xscale == 0 || yscale == 0) - return r; - - if( 8192.0/xscale > maxint ) - xscale = (float)(8192.0/maxint); - else if( 8192.0/xscale < -maxint ) - xscale = (float)(-8192.0/maxint); - - if( 8192.0/yscale > maxint ) - yscale = (float)(8192.0/maxint); - else if( 8192.0/yscale < -maxint ) - yscale = (float)(-8192.0/maxint); - - - // Fixed-point equivalents - Sint32 const stx = (Sint32)((sin(theta)/xscale) * 8192.0); - Sint32 const ctx = (Sint32)((cos(theta)/xscale) * 8192.0); - Sint32 const sty = (Sint32)((sin(theta)/yscale) * 8192.0); - Sint32 const cty = (Sint32)((cos(theta)/yscale) * 8192.0); - Sint32 const mx = (Sint32)(px*8192.0); - Sint32 const my = (Sint32)(py*8192.0); - - // Compute a bounding rectangle - Sint16 xmin=0, xmax=dst->w, ymin=0, ymax=dst->h; - _calcRect(src, dst, theta, xscale, yscale, px, py, qx, qy, &xmin,&ymin, &xmax,&ymax); - - // Clip to src surface - Sint16 sxmin = sge_clip_xmin(src); - Sint16 sxmax = sge_clip_xmax(src); - Sint16 symin = sge_clip_ymin(src); - Sint16 symax = sge_clip_ymax(src); - - // Some terms in the transform are constant - Sint32 const dx = xmin - qx; - Sint32 const ctdx = ctx*dx; - Sint32 const stdx = sty*dx; - - // Lock surfaces... hopfully less than two needs locking! - if ( SDL_MUSTLOCK(src) && _sge_lock ) - if ( SDL_LockSurface(src) < 0 ) - return r; - if ( SDL_MUSTLOCK(dst) && _sge_lock ){ - if ( SDL_LockSurface(dst) < 0 ){ - if ( SDL_MUSTLOCK(src) && _sge_lock ) - SDL_UnlockSurface(src); - return r; - } - } - - - TRANSFORM_GENERIC_AA - - - // Unlock surfaces - if ( SDL_MUSTLOCK(src) && _sge_lock ) - SDL_UnlockSurface(src); - if ( SDL_MUSTLOCK(dst) && _sge_lock ) - SDL_UnlockSurface(dst); - - //Return the bounding rectangle - r.x=xmin; r.y=ymin; r.w=xmax-xmin; r.h=ymax-ymin; - return r; -} - - -SDL_Rect sge_transform(SDL_Surface *src, SDL_Surface *dst, float angle, float xscale, float yscale, Uint16 px, Uint16 py, Uint16 qx, Uint16 qy, Uint8 flags) -{ - return sge_transformAA(src, dst, angle, xscale, yscale, px, py, qx, qy, flags); -} - -SDL_Surface *sge_transform_surface(SDL_Surface *src, Uint32 bcol, float angle, float xscale, float yscale, Uint8 flags) -{ - float theta = (float)(angle*PI/180.0); /* Convert to radians. */ - - // Compute a bounding rectangle - Sint16 xmin=0, xmax=0, ymin=0, ymax=0; - _calcRect(src, NULL, theta, xscale, yscale, 0, 0, 0, 0, &xmin,&ymin, &xmax,&ymax); - - Sint16 w = xmax-xmin+1; - Sint16 h = ymax-ymin+1; - - Sint16 qx = -xmin; - Sint16 qy = -ymin; - - SDL_Surface *dest; - dest = SDL_CreateRGBSurface(SDL_SWSURFACE, w, h, src->format->BitsPerPixel, src->format->Rmask, src->format->Gmask, src->format->Bmask, src->format->Amask); - if(!dest) - return NULL; - -// sge_ClearSurface(dest,bcol); //Set background color - - sge_transform(src, dest, angle, xscale, yscale, 0, 0, qx, qy, flags); - - return dest; + SDL_QuitSubSystem(SDL_INIT_VIDEO | SDL_INIT_TIMER); } img_t gfx_scale(img_t src, float xscale, float yscale) { - return (img_t)sge_transform_surface((SDL_Surface *)src, 0, 0, xscale, yscale, 0); + return (img_t)zoomSurface((SDL_Surface *)src, xscale, yscale, 1); } fnt_t fnt_load(const char *fname, int size) @@ -897,6 +587,7 @@ struct word { struct word *next; /* in line */ struct line *line; struct xref *xref; + SDL_Surface *prerend; }; struct word *word_new(const char *str) @@ -914,6 +605,7 @@ struct word *word_new(const char *str) w->style = 0; w->img = NULL; w->unbrake = 0; + w->prerend = NULL; return w; } @@ -925,6 +617,9 @@ void word_free(struct word *word) // gfx_free_image(word->img); if (word->word) free(word->word); + if (word->prerend) + SDL_FreeSurface(word->prerend); + word->prerend = NULL; free(word); } @@ -1172,8 +867,8 @@ void layout_add_line(struct layout *layout, struct line *line) { struct line *l = layout->lines; line->layout = layout; - if (line->w > layout->w) - layout->w = line->w; +// if (line->w > layout->w) +// layout->w = line->w; if (!l) { layout->lines = line; line->prev = NULL; @@ -1186,6 +881,16 @@ void layout_add_line(struct layout *layout, struct line *line) return; } +struct image *_layout_lookup_image(struct layout *layout, const char *name) +{ + struct image *g = layout->images; + for (g = layout->images; g; g = g->next) { + if (!strcmp(g->name, name)) + return g; + } + return NULL; +} + void layout_add_image(struct layout *layout, struct image *image) { struct image *g = layout->images; @@ -1201,12 +906,8 @@ void layout_add_image(struct layout *layout, struct image *image) img_t layout_lookup_image(struct layout *layout, char *name) { - struct image *g = layout->images; - for (g = layout->images; g; g = g->next) { - if (!strcmp(g->name, name)) - return g->image; - } - return NULL; + struct image *g = _layout_lookup_image(layout, name); + return (g)?g->image: NULL; } void layout_add_xref(struct layout *layout, struct xref *xref) @@ -1257,6 +958,11 @@ int txt_layout_add_img(layout_t lay, const char *name, img_t img) { struct layout *layout = (struct layout *)lay; struct image *image; + image = _layout_lookup_image(layout, name); + if (image) { /* overwrite */ + image->image = img; + return 0; + } image = image_new(name, img); if (!image) return -1; @@ -1573,7 +1279,6 @@ void xref_update(xref_t pxref, int x, int y, clear_fn clear) gfx_noclip(); } - void txt_layout_draw_ex(layout_t lay, struct line *line, int x, int y, int off, int height, clear_fn clear) { struct layout *layout = (struct layout*)lay; @@ -1618,11 +1323,15 @@ void txt_layout_draw_ex(layout_t lay, struct line *line, int x, int y, int off, col = acol; else col = lcol; - s = TTF_RenderUTF8_Blended((TTF_Font *)(layout->fn), - word->word, col); + s = word->prerend; + if (!s) { + s = TTF_RenderUTF8_Blended((TTF_Font *)(layout->fn), + word->word, col); + word->prerend = s; + } yy = (line->h - TTF_FontHeight((TTF_Font *)(layout->fn))) / 2; // TODO gfx_draw(s, x + word->x, y + line->y + yy); - SDL_FreeSurface(s); +// SDL_FreeSurface(s); } } // gfx_noclip(); @@ -1693,33 +1402,67 @@ void txt_box_resize(textbox_t tbox, int w, int h) void txt_box_size(textbox_t tbox, int *w, int *h) { struct textbox *box = (struct textbox *)tbox; + if (!tbox) + return; if (w) *w = box->w; if (h) *h = box->h; } -void txt_box_scroll(textbox_t tbox, int disp) +void txt_box_scroll_next(textbox_t tbox, int disp) { - int ld; + int off; struct textbox *box = (struct textbox *)tbox; struct line *line = box->line; if (!line) return; - ld = box->off - line->y + disp; - while (line && ld > line->h) { - ld -= line->h; + + if (box->lay->h - box->off < box->h) + return; + + off = box->lay->h - box->off - box->h; + if (disp > off) + disp = off; + + off = box->off - line->y; /* offset from cur line */ + off += disp; /* needed offset */ + while (line->next && off > line->h) { + off -= line->h; line = line->next; } - if (line) { - box->line = line; - box->off = line->y + ld; + box->line = line; + box->off = line->y + off; +} + +void txt_box_scroll_prev(textbox_t tbox, int disp) +{ + int off; + struct textbox *box = (struct textbox *)tbox; + struct line *line = box->line; + if (!line) + return; + off = box->off - line->y; /* offset from cur line */ + off -= disp; /* offset from current line */ + + while (line->prev && off < 0) { + line = line->prev; + off += line->h; } -// line = line->next; -// if (line) { -// box->off += (line->y - box->off); -// box->line = line; -// } + + box->line = line; + box->off = line->y + off; + + if (box->off <0) + box->off = 0; +} + +void txt_box_scroll(textbox_t tbox, int disp) +{ + if (disp >0) + return txt_box_scroll_next(tbox, disp); + else if (disp <0) + return txt_box_scroll_prev(tbox, -disp); } void txt_box_next_line(textbox_t tbox) @@ -1885,6 +1628,9 @@ img_t get_img(struct layout *layout, char *p) { int len; img_t img; + if (!p) + return NULL; + if (p[0] != '<' || p[1] != 'g' || p[2] != ':') return NULL; p += 3; @@ -1964,7 +1710,7 @@ int get_unbrakable_len(struct layout *layout, const char *ptr) int w = 0; int ww = 0; char *p, *eptr; - while (*ptr) { + while (ptr && *ptr) { int sp, sp2 = 0; while(get_token(ptr, &eptr, NULL, &sp)) { if (sp) @@ -1976,7 +1722,8 @@ int get_unbrakable_len(struct layout *layout, const char *ptr) p = get_word(ptr, &eptr, &sp); if (!p) return w; - if (sp) { + + if (sp || !*p) { free(p); return w; } @@ -2002,7 +1749,7 @@ void _txt_layout_add(layout_t lay, char *txt) int w, h, nl = 0; int spw; img_t img = NULL; - if (!layout) + if (!layout || !layout->fn) return; saved_style = TTF_GetFontStyle((TTF_Font *)(layout->fn)); @@ -2041,18 +1788,20 @@ void _txt_layout_add(layout_t lay, char *txt) sp = 1; } else p = get_word(ptr, &eptr, &sp); + + if (!p) + break; + addlen = get_unbrakable_len(layout, eptr); img = get_img(layout, p); if (img) { w = gfx_img_w(img); h = gfx_img_h(img); } else { -// fprintf(stderr,"AAA:'%s'\n", p); TTF_SizeUTF8((TTF_Font *)(layout->fn), p, &w, &h); } nl = !*p; - if ((line->num && (line->w + ((line->w)?spw:0) + w + addlen) >= layout->w) || nl) { -// if ((line->num && (line->w + ((sp)?spw:0) + w) >= layout->w) || nl) { + if ((line->num && (line->w + ((sp && line->w)?spw:0) + w + addlen) > layout->w) || nl) { struct line *ol = line; if ((layout->h) && (line->y + line->h) >= layout->h) break; @@ -2253,30 +2002,36 @@ void gfx_cursor(int *xp, int *yp, int *w, int *h) #define ALPHA_STEPS 5 volatile int step_nr = -1; -SDL_mutex *sem; -static Uint32 update(Uint32 interval, void *aux) +static void update_gfx(void *aux) { img_t img = (img_t) aux; + if (step_nr == -1) + return; gfx_set_alpha(img, (255 * (step_nr + 1)) / ALPHA_STEPS); gfx_draw(img, 0, 0); gfx_flip(); step_nr ++; if (step_nr == ALPHA_STEPS) { step_nr = -1; - return 0; } +} + +static Uint32 update(Uint32 interval, void *aux) +{ + push_user_event(update_gfx, aux); return interval; } +extern void nsleep(int delay); + void gfx_change_screen(img_t src) { - sem = SDL_CreateMutex(); + struct inp_event ev; + memset(&ev, 0, sizeof(ev)); + SDL_TimerID han; step_nr = 0; - SDL_AddTimer(60, update, src); - while (step_nr != -1) { - usleep(100); - } - SDL_DestroyMutex(sem); + han = SDL_AddTimer(60, update, src); + while (input(&ev, 1) >=0 && step_nr != -1); /* just wait for change */ + SDL_RemoveTimer(han); } - diff --git a/src/sdl-instead/graphics.h b/src/sdl-instead/graphics.h index 67d4701..dffa2a0 100644 --- a/src/sdl-instead/graphics.h +++ b/src/sdl-instead/graphics.h @@ -36,7 +36,8 @@ extern void gfx_noclip(void); extern void gfx_clip(int x, int y, int w, int h); extern int gfx_width; extern int gfx_height; -extern int gfx_init(int w, int h, int fs); +extern int gfx_init(void); +extern int gfx_setmode(int w, int h, int fs); extern void gfx_update(int x, int y, int w, int h); extern void gfx_done(void); extern void gfx_clear(int x, int y, int w, int h); @@ -44,7 +45,7 @@ extern void gfx_draw(img_t pixmap, int x, int y); extern void gfx_draw_wh(img_t p, int x, int y, int w, int h); extern img_t gfx_grab_screen(int x, int y, int w, int h); extern img_t gfx_new(int w, int h); -extern img_t gfx_load_image(char *filename, int transparent); +extern img_t gfx_load_image(char *filename); extern void gfx_free_image(img_t pixmap); extern int gfx_img_w(img_t pixmap); extern int gfx_img_h(img_t pixmap); @@ -86,6 +87,7 @@ extern void txt_box_next(textbox_t tbox); extern void txt_box_prev(textbox_t tbox); extern void txt_box_next_line(textbox_t tbox); extern void txt_box_prev_line(textbox_t tbox); +extern void txt_box_scroll(textbox_t tbox, int disp); extern xref_t txt_box_xref(textbox_t tbox, int x, int y); extern int txt_box_off(textbox_t tbox); extern void txt_box_size(textbox_t tbox, int *w, int *h); diff --git a/src/sdl-instead/gui.h b/src/sdl-instead/gui.h index 6184beb..24f36d2 100644 --- a/src/sdl-instead/gui.h +++ b/src/sdl-instead/gui.h @@ -13,15 +13,18 @@ iface.xref = function(self, str, obj)\n\ if not o then\n\ o = ref(inv():srch(obj));\n\ end\n\ - if not o or not o.id then\n\ + if not isObject(o) or not o.id then\n\ return str;\n\ --- error ('Xref to nowhere:'..str);\n\ end\n\ - return cat('',str,'');\n\ + return cat('',str,'');\n\ end;\n\ iface.title = function(self, str)\n\ return nil\n\ end;\n\ +iface.em = function(self, str)\n\ + if str == nil then return nil; end; \n\ + return cat('',str,'');\n\ +end;\n\ \n\ iface.inv = function(self, str)\n\ if str then\n\ diff --git a/src/sdl-instead/input.c b/src/sdl-instead/input.c index fe58e77..9dff92b 100644 --- a/src/sdl-instead/input.c +++ b/src/sdl-instead/input.c @@ -1,18 +1,56 @@ #include #include "input.h" +#include +#include + +void push_user_event(void (*p) (void*), void *data) +{ + SDL_Event event; + SDL_UserEvent uevent; + uevent.type = SDL_USEREVENT; + uevent.code = 0; + event.type = SDL_USEREVENT; + uevent.data1 = p; + uevent.data2 = data; + event.user = uevent; + SDL_PushEvent(&event); +} + +int input_init(void) +{ + SDL_EnableKeyRepeat(500, 30); + return 0; +} + +void input_clear(void) +{ + SDL_Event event; + while (SDL_PollEvent(&event)); + return; +} + int input(struct inp_event *inp, int wait) { int rc; SDL_Event event; - if (wait) + SDL_Event peek; + memset(&event, 0, sizeof(event)); + memset(&peek, 0, sizeof(peek)); + if (wait) { rc = SDL_WaitEvent(&event); - else + } else rc = SDL_PollEvent(&event); if (!rc) return 0; inp->sym = NULL; inp->type = 0; + inp->count = 1; switch(event.type){ + case SDL_USEREVENT: { + void (*p) (void*) = event.user.data1; + p(event.user.data2); + return AGAIN; + } case SDL_QUIT: return -1; case SDL_KEYDOWN: //A key has been pressed @@ -29,6 +67,10 @@ int input(struct inp_event *inp, int wait) inp->type = MOUSE_MOTION; inp->x = event.button.x; inp->y = event.button.y; + while (SDL_PeepEvents(&peek, 1, SDL_GETEVENT, SDL_EVENTMASK (SDL_MOUSEMOTION)) > 0) { + inp->x = peek.button.x; + inp->y = peek.button.y; + } break; case SDL_MOUSEBUTTONUP: inp->type = MOUSE_UP; @@ -47,6 +89,16 @@ int input(struct inp_event *inp, int wait) inp->type = MOUSE_WHEEL_UP; else if (event.button.button == 5) inp->type = MOUSE_WHEEL_DOWN; + + while (SDL_PeepEvents(&peek, 1, SDL_GETEVENT, SDL_EVENTMASK (SDL_MOUSEBUTTONDOWN)) > 0) { + if (!((event.button.button == 4 && + inp->type == MOUSE_WHEEL_UP) || + (event.button.button == 5 && + inp->type == MOUSE_WHEEL_DOWN))) + break; + inp->count ++; + } + break; } return 1; diff --git a/src/sdl-instead/input.h b/src/sdl-instead/input.h index 4388380..28b42fc 100644 --- a/src/sdl-instead/input.h +++ b/src/sdl-instead/input.h @@ -8,15 +8,21 @@ #define MOUSE_WHEEL_UP 5 #define MOUSE_WHEEL_DOWN 6 #define MOUSE_MOTION 7 +#define USER_EVENT 8 +#define AGAIN 2 struct inp_event { int type; int code; char *sym; int x; int y; + int count; }; int input(struct inp_event *ev, int wait); +int input_init(void); +void input_clear(void); +void push_user_event(void (*p) (void*), void *data); #endif diff --git a/src/sdl-instead/instead.c b/src/sdl-instead/instead.c index 8a37615..e65346c 100644 --- a/src/sdl-instead/instead.c +++ b/src/sdl-instead/instead.c @@ -1,3 +1,7 @@ +#ifndef STEAD_PATH +#define STEAD_PATH "./stead" +#endif + #include #include #include @@ -5,39 +9,99 @@ #include #include #include -#include +// #include #include #include "gui.h" -#ifdef HAVE_ICONV +#ifdef _HAVE_ICONV #include #endif +#include "game.h" /* the Lua interpreter */ char *fromgame(const char *s); char *togame(const char *s); lua_State *L = NULL; +static int report (lua_State *L, int status) +{ + if (status && !lua_isnil(L, -1)) { + const char *msg = lua_tostring(L, -1); + if (msg == NULL) + msg = "(error object is not a string)"; + fprintf(stderr,"Error: %s\n", msg); + game_err_msg(msg); + lua_pop(L, 1); + status = -1; + } + return status; +} + +static int traceback (lua_State *L) +{ + lua_getfield(L, LUA_GLOBALSINDEX, "debug"); + if (!lua_istable(L, -1)) { + lua_pop(L, 1); + return 1; + } + lua_getfield(L, -1, "traceback"); + if (!lua_isfunction(L, -1)) { + lua_pop(L, 2); + return 1; + } + lua_pushvalue(L, 1); /* pass error message */ + lua_pushinteger(L, 2); /* skip this function and traceback */ + lua_call(L, 2, 1); /* call debug.traceback */ + return 1; +} + +extern int debug_sw; + +static int docall (lua_State *L) +{ + int status; + int base = 0; + if (debug_sw) { + base = lua_gettop(L); /* function index */ + lua_pushcfunction(L, traceback); /* push traceback function */ + lua_insert(L, base); /* put it under chunk and args */ + } + status = lua_pcall(L, 0, LUA_MULTRET, base); + if (debug_sw) + lua_remove(L, base); /* remove traceback function */ + /* force a complete garbage collection in case of errors */ + if (status != 0) + lua_gc(L, LUA_GCCOLLECT, 0); + return status; +} + +static int dofile (lua_State *L, const char *name) { + int status = luaL_loadfile(L, name) || docall(L); + return report(L, status); +} + +static int dostring (lua_State *L, const char *s) { + int status = luaL_loadstring(L, s) || docall(L); + return report(L, status); +} + char *getstring(char *cmd) { char *s; if (!L) return NULL; - if (luaL_dostring(L, cmd)) { - fprintf(stderr,"Error: %s\n", lua_tostring(L, -1)); - exit(1); - } + if (dostring(L, cmd)) + return NULL; s = (char*)lua_tostring(L, -1); if (s) s = fromgame(s); return s; } + char *instead_eval(char *s) { char *p; -// s = togame(s); p = getstring(s); -// free(s); return p; } @@ -62,20 +126,19 @@ int luacall(char *cmd) int rc; if (!L) return -1; - if (luaL_dostring(L, cmd)) { - fprintf(stderr,"Error: %s\n", lua_tostring(L, -1)); - exit(1); + if (dostring(L, cmd)) { + return -1; } rc = lua_tonumber(L, -1); return rc; } -#ifdef HAVE_ICONV +#ifdef _HAVE_ICONV static char *curcp = "UTF-8"; static char *fromcp = NULL; #endif -#ifdef HAVE_ICONV +#ifdef _HAVE_ICONV #define CHAR_MAX_LEN 4 static char *decode(iconv_t hiconv, const char *s) { @@ -162,11 +225,10 @@ char *togame(const char *s) int instead_load(char *game) { - if (luaL_loadfile(L, game) || lua_pcall(L, 0, 0, 0)) { - fprintf(stderr,"Error:%s\n", lua_tostring(L, -1)); + if (dofile(L, game)) { return -1; } -#ifdef HAVE_ICONV +#ifdef _HAVE_ICONV if (fromcp) free(fromcp); fromcp = getstring("return game.codepage;"); @@ -181,34 +243,27 @@ int instead_init(void) /* initialize Lua */ L = lua_open(); luaL_openlibs(L); - if (luaL_loadfile(L,STEAD_PATH"stead.lua") || lua_pcall(L, 0, 0, 0)) { - fprintf(stderr,"Error:%s\n", lua_tostring(L, -1)); + if (dofile(L,STEAD_PATH"/stead.lua")) { return -1; } if (luacall(instead_gui_lua)) { - fprintf(stderr,"Error while registering lua gui functions\n"); - return -1; - - } -#if 0 - if (luaL_loadfile(L,"gui.lua") || lua_pcall(L, 0, 0, 0)) { - fprintf(stderr,"Error:%s\n", lua_tostring(L, -1)); return -1; } -#endif /* cleanup Lua */ return 0; } void instead_done(void) { -#ifdef HAVE_ICONV +#ifdef _HAVE_ICONV if (fromcp) free(fromcp); #endif if (L) lua_close(L); L = NULL; +#ifdef _HAVE_ICONV fromcp = NULL; +#endif } diff --git a/src/sdl-instead/instead.h b/src/sdl-instead/instead.h index 8b62135..de28cac 100644 --- a/src/sdl-instead/instead.h +++ b/src/sdl-instead/instead.h @@ -6,5 +6,6 @@ extern int instead_load(char *game); extern void instead_done(void); extern char *instead_cmd(char *s); extern char *instead_eval(char *s); +char *fromgame(const char *s); #endif diff --git a/src/sdl-instead/main.c b/src/sdl-instead/main.c index 9b29b41..f7a92d8 100644 --- a/src/sdl-instead/main.c +++ b/src/sdl-instead/main.c @@ -1,20 +1,65 @@ +#include #include #include "graphics.h" #include "game.h" #include #include +#include + +extern int debug_init(void); +extern void debug_done(void); + +int debug_sw = 0; int main(int argc, char **argv) { - if (games_lookup()) { - fprintf(stderr, "No games found.\n"); - // exit(1); + int i; + for (i = 1; i < argc; i++) { + if (!strcmp(argv[i],"-alsa")) + alsa_sw = 1; + else if (!strcmp(argv[i], "-nosound")) + nosound_sw = 1; + else if (!strcmp(argv[i], "-fullscreen")) + fullscreen_sw = 1; + else if (!strcmp(argv[i], "-window")) + window_sw = 1; + else if (!strcmp(argv[i], "-debug")) + debug_sw = 1; + } + + if (debug_sw) { + debug_init(); } - if (game_init(NULL)) { - exit(1); + if (window_sw) + opt_fs = 0; + if (fullscreen_sw) + opt_fs = 1; + + if (games_lookup(GAMES_PATH)) { + fprintf(stderr, "No games found.\n"); + } + + themes_lookup(THEMES_PATH); + themes_lookup(game_local_themes_path()); + + games_lookup(game_local_games_path()); + + cfg_load(); + + if (opt_theme) + game_theme_select(opt_theme); + if (!curtheme) + game_theme_select(DEFAULT_THEME); + + if (game_init(opt_game)) { + game_error(opt_game); } game_loop(); + cfg_save(); game_done(); + if (debug_sw) + debug_done(); return 0; } + diff --git a/src/sdl-instead/menu-en.h b/src/sdl-instead/menu-en.h new file mode 100644 index 0000000..ce8aa19 --- /dev/null +++ b/src/sdl-instead/menu-en.h @@ -0,0 +1,103 @@ +#define UNKNOWN_ERROR "Unknown error." +#define ERROR_MENU "Error while loading game:\n\ +'%s'\n\ +\n\ +Ok" + +#define WARNING_MENU "Error while processing game:\n\ +'%s'\n\ +\n\ +Ok" + +#define SAVE_SLOT_EMPTY "empty" +#define SELECT_LOAD_MENU "Load game\n\n" +#define AUTOSAVE_SLOT "Autosave" +#define BROKEN_SLOT "error" +#define SELECT_SAVE_MENU "Save game\n\n" + +#define MAIN_MENU \ +"Resume game\n\ +Select game\n\ +Select theme\n\ +Restart game\n\ +Load game\n\ +Save game\n\ +About\n\ +Settings\n\ +Quit" + +#define ABOUT_MENU \ +"Written by Peter Kosyh '2009\n\ +Ported to Windows by Ilja Ryndin\n\ +\n\ +Homepage:\n\ +http://instead.googlecode.com\n\ +\n\ +Back" + +#define BACK_MENU "Back" +#define ON "on" +#define OFF "off" + +#define SELECT_GAME_MENU "Select game to play\n\n" +#define SELECT_THEME_MENU "Select theme\n\n" + +#define SETTINGS_MENU \ +"Volume\n\ +<<< %d%% >>>\n\ +\n\ +Quality\n\ +<< %dHz >>\n\ +\n\ +Music: %s\n\ +Click sound: %s\n\ +\n\ +Full Screen: %s\n\ +Font scaling: <<%d>>\n\ +Refs highlighting: %s\n\ +Motion mode: %s\n\ +Mouse filter: %s\n\ +\n\ +Custom game themes: %s\n\ +Аutosave: %s\n\ +\n\ +Apply" + +#define OWN_THEME_MENU \ +"Warning!!!\n\ +\n\ +Current game have custom theme.\n\ +So, changes will be ignored.\n\ +\n\ +You can disable custom themes\n\ +in settings menu.\n\ +\n\ +Ok" + +#define CUSTOM_THEME_MENU \ +"Warning!!!\n\ +\n\ +This game have custom theme, but custom theme setting is disabled. \ +Game may look differ than author's design.\n\ +\n\ +You can enable custom theme support in settings menu.\n\ +\n\ +Ok" + +#define QUIT_MENU \ +"Really quit?\n\ +\n\ +Yes | No" + +#define SAVED_MENU \ +"Current Game saved!\n\ +\n\ +Ok" + +#define NOGAMES_MENU \ +"No games found. \n\ +Please, put any game in the this directory:\n'%s'" + +#define NOTHEMES_MENU \ +"No themes found.\n\ +Please, write any theme in this directory:\n'%s'" diff --git a/src/sdl-instead/menu.h b/src/sdl-instead/menu.h new file mode 100644 index 0000000..3c56e12 --- /dev/null +++ b/src/sdl-instead/menu.h @@ -0,0 +1,105 @@ +#define UNKNOWN_ERROR "Неизвестная ошибка." +#define ERROR_MENU "Во время инициализации игры произошла ошибка:\n\ +'%s'\n\ +\n\ +Да" + +#define WARNING_MENU "Во время работы игры произошла ошибка:\n\ +'%s'\n\ +\n\ +Да" + +#define SAVE_SLOT_EMPTY "пусто" +#define SELECT_LOAD_MENU "Загрузите игру\n\n" +#define AUTOSAVE_SLOT "Автосохранение" +#define BROKEN_SLOT "ошибка" +#define SELECT_SAVE_MENU "Сохраните игру\n\n" + +#define MAIN_MENU \ +"Вернуться в игру\n\ +Выбор игры\n\ +Выбор темы\n\ +Начать заново\n\ +Загрузить игру\n\ +Сохранить игру\n\ +Информация\n\ +Настройки\n\ +Выход" + +#define ABOUT_MENU \ +"INSTEAD SDL - "VERSION"\n\ +\n\ +Интерпретатор простых\n\ +текстовых приключений.\n\ +Косых П.А. '2009\n\ +\n\ +Версия для Windows\n\ +Рындин И.В. '2009\n\ +\n\ +Сайт проекта:\n\ +http://instead.googlecode.com\n\ +\n\ +Назад" + +#define BACK_MENU "Назад" +#define ON "Да" +#define OFF "Нет" + +#define SETTINGS_MENU \ +"Громкость\n\ +<<< %d%% >>>\n\ +\n\ +Качество звука\n<< %dГц >>\n\ +\n\ +Музыка: %s\n\ +Звук щелчка: %s\n\ +\n\ +Полный экран: %s\n\ +Масштаб шрифта: <<%d>>\n\ +Подсветка ссылок: %s\n\ +Режим прокрутки: %s\n\ +Фильтр мышки: %s\n\ +\n\ +Собственные темы игр: %s\n\ +Автосохранение: %s\n\ +\n\ +Применить" + +#define CUSTOM_THEME_MENU \ +"Внимание!!!\n\ +\n\ +Игра содержит собственную тему, но поддержка собственных тем отключена в настройках. \ +Игра может выглядеть не так, как задумывал ее автор.\n\ +\n\ +Вы можете разрешить возможность переопределения тем в настройках.\n\ +\n\ +Да" + +#define OWN_THEME_MENU \ +"Внимание!!!\n\ +\n\ +Выбранная игра переопределяет тему. Изменения не вступят в силу.\n\ +\n\ +Вы можете запретить возможность переопределения тем в настройках.\n\ +\n\ +Да" + +#define QUIT_MENU \ +"На самом деле выйти?\n\ +\n\ +Да | Нет" + +#define SELECT_GAME_MENU "Выбор игры\n\n" +#define SELECT_THEME_MENU "Выбор темы\n\n" +#define SAVED_MENU \ +"Игра сохранена!\n\ +\n\ +Да" + +#define NOGAMES_MENU \ +"Не найдена ни одна игра.\n\ +Пожалуйста, скопируйте хотя бы одну игру в каталог:\n'%s'" + +#define NOTHEMES_MENU \ +"Не найдена ни одна тема.\n\ +Пожалуйста, скопируйте хотя бы одну тему в каталог:\n'%s'" diff --git a/src/sdl-instead/resources.rc b/src/sdl-instead/resources.rc new file mode 100644 index 0000000..2ec878c --- /dev/null +++ b/src/sdl-instead/resources.rc @@ -0,0 +1 @@ +IDI_ICON1 ICON DISCARDABLE "../../icon/sdl_instead.ico" diff --git a/src/sdl-instead/sound.c b/src/sdl-instead/sound.c index ec10ad1..0c7e36e 100644 --- a/src/sdl-instead/sound.c +++ b/src/sdl-instead/sound.c @@ -1,4 +1,6 @@ #include "sound.h" +#include "input.h" + #include #include @@ -15,67 +17,123 @@ int audio_buffers = 8192; static Mix_Music *mus; static char *next_mus = NULL; static int next_fadein = 0; +static int next_loop = -1; static SDL_TimerID timer_id = NULL; +static int sound_on = 0; + +static void mus_callback(void *aux) +{ + if (!timer_id) + return; + if (snd_playing_mus()) + return; + if (mus) + snd_free_mus(mus); + mus = NULL; + if (next_mus) { + snd_play_mus(next_mus, next_fadein, next_loop); + free(next_mus); + next_mus = NULL; + } + SDL_RemoveTimer(timer_id); + timer_id = NULL; +} + static Uint32 callback(Uint32 interval, void *aux) { - if (!snd_playing_mus()) { - if (mus) - snd_free_mus(mus); - mus = NULL; - if (next_mus) { - snd_play_mus(next_mus, next_fadein); - free(next_mus); - next_mus = NULL; - } - timer_id = NULL; - return 0; - } - return interval; + push_user_event(mus_callback, aux); + return interval; } int snd_hz(void) { int freq = 0; - Mix_QuerySpec(&freq, NULL, NULL); + if (sound_on) + Mix_QuerySpec(&freq, NULL, NULL); return freq; } +int alsa_sw = 0; +int nosound_sw = 0; + int snd_init(int hz) { + if (nosound_sw) + return -1; if (!hz) hz = audio_rate; else audio_rate = hz; + + audio_buffers = (audio_rate / 11025) * 2048; + if (!audio_buffers) /* wrong parameter? */ + audio_buffers = 8192; + + if (SDL_InitSubSystem(SDL_INIT_AUDIO) < 0) { + fprintf(stderr, "Unable to init audio!\n"); + return -1; + } + + if (alsa_sw) { + SDL_AudioInit("alsa"); + } + if (Mix_OpenAudio(hz, audio_format, audio_channels, audio_buffers)) { fprintf(stderr, "Unable to open audio!\n"); return -1; } + sound_on = 1; return 0; } int snd_volume_mus(int vol) { + if (!sound_on) + return 0; Mix_Volume(-1, vol); return Mix_VolumeMusic(vol); } +wav_t snd_load_wav(const char *fname) +{ + if (!sound_on) + return NULL; + if (!fname) + return NULL; + return (wav_t)Mix_LoadWAV(fname); +} + +void snd_free_wav(wav_t w) +{ + if (!w) + return; + Mix_HaltChannel(-1); + Mix_FreeChunk((Mix_Chunk*)w); +} + Mix_Music *snd_load_mus(const char *fname) { Mix_Music *mus; + if (!sound_on) + return NULL; mus = Mix_LoadMUS(fname); return mus; } +extern void game_music_finished(void); -int snd_play_mus(char *fname, int ms) +int snd_play_mus(char *fname, int ms, int loop) { + if (!sound_on) + return 0; if (snd_playing_mus()) { if (next_mus) { free(next_mus); } next_mus = strdup(fname); next_fadein = ms; + next_loop = loop; if (!timer_id) timer_id = SDL_AddTimer(200, callback, NULL); return 1; @@ -84,19 +142,27 @@ int snd_play_mus(char *fname, int ms) snd_free_mus(mus); mus = snd_load_mus(fname); - if (!mus) + if (!mus) { + fprintf(stderr,"Can't load '%s'.\n", fname); return 0; - - if (ms) - Mix_FadeInMusic((Mix_Music*)mus, -1, ms); + } + if (loop >= 0) + Mix_HookMusicFinished(game_music_finished); else - Mix_PlayMusic((Mix_Music*)mus, -1); - snd_volume_mus(snd_volume_mus(-1)); // hack? + Mix_HookMusicFinished(NULL); + if (ms) + Mix_FadeInMusic((Mix_Music*)mus, loop, ms); + else + Mix_PlayMusic((Mix_Music*)mus, loop); + snd_volume_mus(snd_volume_mus(-1)); // SDL hack? return 0; } void snd_stop_mus(int ms) { + if (!sound_on) + return; + Mix_HookMusicFinished(NULL); if (ms) Mix_FadeOutMusic(ms); else @@ -105,6 +171,8 @@ void snd_stop_mus(int ms) int snd_playing_mus(void) { + if (!sound_on) + return 0; if (Mix_PlayingMusic() | Mix_FadingMusic()) return 1; return 0; @@ -112,15 +180,29 @@ int snd_playing_mus(void) void snd_free_mus(mus_t mus) { + if (!sound_on) + return; Mix_HaltMusic(); Mix_FreeMusic((Mix_Music*) mus); } +void snd_play(void *chunk) +{ + if (!sound_on) + return; + if (!chunk) + return; + Mix_PlayChannel(-1, (Mix_Chunk*)chunk, 0); +} + void snd_done(void) { - Mix_HaltMusic(); + if (!sound_on) + return; if (timer_id) - SDL_RemoveTimer(timer_id); + + Mix_HaltChannel(-1); + Mix_HaltMusic(); timer_id = NULL; if (mus) Mix_FreeMusic((Mix_Music*) mus); @@ -129,5 +211,5 @@ void snd_done(void) free(next_mus); next_mus = NULL; Mix_CloseAudio(); + SDL_QuitSubSystem(SDL_INIT_AUDIO); } - diff --git a/src/sdl-instead/sound.h b/src/sdl-instead/sound.h index c005f76..a2158a7 100644 --- a/src/sdl-instead/sound.h +++ b/src/sdl-instead/sound.h @@ -8,12 +8,18 @@ #define SND_BOOM 4 #define SND_FADEOUT 5 #define SND_PAINT 6 + +typedef void* wav_t; typedef void* mus_t; + //extern mus_t snd_load_mus(const char *path); extern void snd_free_mus(mus_t mus); extern int snd_init(int hz); extern int snd_hz(void); -extern int snd_play_mus(char *music, int ms); +extern void snd_play(wav_t chunk); +extern void snd_free_wav(wav_t chunk); +extern wav_t snd_load_wav(const char *fname); +extern int snd_play_mus(char *music, int ms, int loop); extern int snd_playing_mus(); extern void snd_stop_mus(int ms); extern int snd_volume_mus(int vol); diff --git a/src/sdl-instead/unix.c b/src/sdl-instead/unix.c new file mode 100644 index 0000000..aac9779 --- /dev/null +++ b/src/sdl-instead/unix.c @@ -0,0 +1,91 @@ +#include +#include +#include +#include +#include +#include +#include + +#ifndef PATH_MAX +#define PATH_MAX 4096 +#endif + +extern char *curgame; +extern char *curgame_dir; + +static char save_path[PATH_MAX]; +static char local_games_path[PATH_MAX]; +static char local_themes_path[PATH_MAX]; + + +void nsleep(int u) +{ + usleep(u); +} + +char *game_local_games_path(void) +{ + struct passwd *pw; + pw = getpwuid(getuid()); + if (!pw) + return NULL; + snprintf(local_games_path, sizeof(local_games_path) - 1 , "%s/.instead/games/", pw->pw_dir); + return local_games_path; + +} + +char *game_local_themes_path(void) +{ + struct passwd *pw; + pw = getpwuid(getuid()); + if (!pw) + return NULL; + snprintf(local_themes_path, sizeof(local_themes_path) - 1 , "%s/.instead/themes/", pw->pw_dir); + return local_themes_path; + +} + +char *game_cfg_path(void) +{ + struct passwd *pw; + pw = getpwuid(getuid()); + if (!pw) + return NULL; + snprintf(save_path, sizeof(save_path) - 1 , "%s/.insteadrc", pw->pw_dir); + return save_path; + +} +char *game_save_path(int cr, int nr) +{ + struct passwd *pw; + if (!curgame) + return NULL; + pw = getpwuid(getuid()); + if (!pw) + return NULL; + snprintf(save_path, sizeof(save_path) - 1 , "%s/.instead/", pw->pw_dir); + if (cr && mkdir(save_path, S_IRWXU) && errno != EEXIST) + return NULL; + snprintf(save_path, sizeof(save_path) - 1 , "%s/.instead/saves", pw->pw_dir); + if (cr && mkdir(save_path, S_IRWXU) && errno != EEXIST) + return NULL; + snprintf(save_path, sizeof(save_path) - 1, "%s/.instead/saves/%s/", pw->pw_dir, curgame_dir); + if (cr && mkdir(save_path, S_IRWXU) && errno != EEXIST) + return NULL; + if (nr) + snprintf(save_path, sizeof(save_path) - 1, "%s/.instead/saves/%s/save%d", pw->pw_dir, curgame_dir, nr); + else + snprintf(save_path, sizeof(save_path) - 1, "%s/.instead/saves/%s/autosave", pw->pw_dir, curgame_dir); + return save_path; +} + +int debug_init(void) +{ + return 0; +} + +void debug_done() +{ + +} + diff --git a/src/sdl-instead/windows.c b/src/sdl-instead/windows.c new file mode 100644 index 0000000..17ba7a7 --- /dev/null +++ b/src/sdl-instead/windows.c @@ -0,0 +1,89 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef PATH_MAX +#define PATH_MAX 4096 +#endif + +extern char *curgame; +extern char *curgame_dir; + +static char save_path[PATH_MAX]; + +void nsleep(int u) +{ + Sleep(u); +} + +char *game_local_games_path(void) +{ + return NULL; /* TODO ? */ +} + +char *game_local_themes_path(void) +{ + return NULL; /* TODO ? */ +} + +extern void unix_path(char *); + +char *app_dir( void ) +{ + static char appdir[PATH_MAX]; + SHGetFolderPath( NULL, + CSIDL_FLAG_CREATE | CSIDL_LOCAL_APPDATA, + NULL, + 0, + (LPTSTR)appdir ); + unix_path(appdir); + return appdir; +} + +char *game_cfg_path( void ) +{ + snprintf(save_path, sizeof(save_path) - 1 , "%s\\insteadrc", app_dir()); + return save_path; + +} +char *game_save_path( int cr, int nr ) +{ + char appdir[PATH_MAX]; + strcpy( appdir, app_dir() ); + + snprintf(save_path, sizeof(save_path) - 1 , "%s/instead", appdir); + if (cr && mkdir(save_path) && errno != EEXIST) + return NULL; + snprintf(save_path, sizeof(save_path) - 1 , "%s/instead/saves", appdir); + if (cr && mkdir(save_path) && errno != EEXIST) + return NULL; + snprintf(save_path, sizeof(save_path) - 1, "%s/instead/saves/%s", appdir, curgame_dir); + if (cr && mkdir(save_path) && errno != EEXIST) + return NULL; + if (nr) + snprintf(save_path, sizeof(save_path) - 1, "%s/instead/saves/%s/save%d", appdir, curgame_dir, nr); + else + snprintf(save_path, sizeof(save_path) - 1, "%s/instead/saves/%s/autosave", appdir, curgame_dir); + return save_path; +} + +int debug_init(void) +{ + if (!AllocConsole()) + return -1; + SetConsoleTitle("Debug"); + freopen("CON", "w", stdout); //Map stdout + freopen("CON", "w", stderr); //Map stderr + return 0; +} + +void debug_done() +{ + FreeConsole(); +} + diff --git a/stead/Makefile.windows b/stead/Makefile.windows new file mode 100644 index 0000000..48fd5ee --- /dev/null +++ b/stead/Makefile.windows @@ -0,0 +1,6 @@ +clean: +all: stead.lua + +install: + if not exist ..\bin\stead mkdir ..\bin\stead + copy stead.lua ..\bin\stead diff --git a/stead/copying b/stead/copying new file mode 100644 index 0000000..d60c31a --- /dev/null +++ b/stead/copying @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/stead/stead.lua b/stead/stead.lua index a1a4b0e..1846a68 100644 --- a/stead/stead.lua +++ b/stead/stead.lua @@ -50,6 +50,53 @@ function fmt(...) end return res end +-- integer lists +function inext(t, k) + local v + k, v = next(t, k); + while k and not tonumber(k) do + k, v = next(t, k); + end + if not tonumber(k) then + return nil + end + return k, v +end + +function ilist(s, var) + return inext, s, nil; +end + +function ordered_i(t) + local ordered = {}; + local i,v, max; + max = 0; + for i,v in ilist(t) do + table.insert(ordered, i); + max = max + 1; + end + table.sort(ordered); + ordered.i = 1; + ordered.max = max; + return ordered; +end + +function onext(t, k) + local v + if not k then + k = ordered_i(t); + end + if k.i > k.max then + return nil + end + v = k[k.i] + k.i = k.i + 1 + return k, t[v], v; +end + +function opairs(s, var) + return onext, s, nil; +end function isPlayer(v) if type(v) ~= 'table' then @@ -124,7 +171,7 @@ end function obj_xref(self,str) function xrefrep(str) local s = string.gsub(str,'[{}]',''); - return iface:xref(s, self); + return xref(s, self); end if not str then return @@ -137,7 +184,7 @@ function obj_xref(self,str) end function obj_look(self) - local i, vv + local i, vv, o local v = call(self,'dsc'); if isDisabled(self) then return @@ -147,10 +194,12 @@ function obj_look(self) elseif v then v = string.gsub(v, '[{}]',''); end - for i=1, table.maxn(self.obj) do - local o = ref(self.obj[i]); - vv = obj_look(o); - v = par(' ',v, vv); + for i,o in opairs(self.obj) do + o = ref(o); + if isObject(o) then + vv = obj_look(o); + v = par(' ',v, vv); + end end return v; -- iface:xref(v,self.nam); @@ -159,10 +208,12 @@ end function obj_remove(self) self._disabled = -1; + return self end function obj_disable(self) self._disabled = true; + return self end function obj_enable(self) @@ -170,6 +221,7 @@ function obj_enable(self) -- return -- end self._disabled = false; + return self end function obj_save(self, name, h, need) @@ -181,18 +233,18 @@ function obj_save(self, name, h, need) end function obj_str(self) - local i, v, vv; + local i, v, vv, o; if not isObject(self) then return end if isDisabled(self) then return end - for i = 1,table.maxn(self.obj) do - local o = ref(self.obj[i]); - if not isDisabled(o) and isObject(o) then + for i,o in opairs(self.obj) do + o = ref(o); + if isObject(o) and not isDisabled(o) then vv = call(o, 'nam'); - vv = iface:xref(vv, o); + vv = xref(vv, o); -- vv = cat(vv,'(',tostring(ref(self[i]).id),')'); v = par(',', v, vv, obj_str(o)); -- obj_str(o); @@ -203,7 +255,7 @@ end function obj(v) if v.nam == nil then - error "No object name in constructor."; + error ("No object name in constructor."); end if v.look == nil then v.look = obj_look; @@ -252,27 +304,39 @@ function ref(n) -- ref object by name return nil end +function deref(n) + if type(n) == 'string' then + return n + end + + if type(n) == 'table' and type(n.key_name) == 'string' then + return n.key_name + end + return n +end + function list_check(self) - local i; - for i = 1,table.maxn(self) do - local o = ref(self[i]); - if not o then + local i, v, ii; + for i,v,ii in opairs(self) do + local o = ref(v); + if not o then -- isObject(o) then -- compat return false end - if not isObject(o) then - return false + if deref(v) then + self[ii] = deref(v); end end return true; end function list_str(self) - local i, v, vv; - for i = 1,table.maxn(self) do - local o = ref(self[i]); - if not isDisabled(o) then + local i, v, vv, o; + for i,o in opairs(self) do + o = ref(o); +-- if isObject(o) and not isDisabled(o) then + if o~= nil and not isDisabled(o) then vv = call(o, 'nam'); - vv = iface:xref(vv, o); + vv = xref(vv, o); -- vv = cat(vv,'(',tostring(ref(self[i]).id),')'); v = par(',', v, vv); end @@ -281,33 +345,51 @@ function list_str(self) end -function list_add(self, name) +function list_add(self, name, pos) + local nam -- if type(name) ~= 'string' then -- error "No string adding to list." -- end - if list_find(self, name) then + nam = deref(name); + if list_find(self, nam) then return nil end - self.__modifyed__ = true - table.insert(self, name); + self.__modifyed__ = true; + if tonumber(pos) then + table.insert(self, tonumber(pos), nam); + self[tonumber(pos)] = nam; -- for spare lists + else + table.insert(self, nam); + end + return true +end + +function list_set(self, name, pos) + local nam + local i = tonumber(pos); + if not i then + return nil + end + nam = deref(name); + self.__modifyed__ = true; + self[i] = nam; -- for spare lists return true end function list_find(self, name) - local n + local n, v, ii -- if type(name) ~= 'string' then -- error "No string finding in list." -- end - for n=1,table.maxn(self) do - if ref(self[n]) == ref(name) then - return n; + for n,v,ii in opairs(self) do + if ref(v) == ref(name) then + return ii; end end return nil end function list_save(self, name, h, need) - local k,v; if self.__modifyed__ then h:write(name.." = list({});\n"); need = true; @@ -316,25 +398,27 @@ function list_save(self, name, h, need) end function list_name(self, name) - local n + local n, o, ii -- if type(name) ~= 'string' then -- error "No string finding in list." -- end - for n=1,table.maxn(self) do - local o = ref(self[n]); - local nam = call(o,'nam') ; - if not isDisabled(o) and name == tostring(nam) then - return n; + for n,o,ii in opairs(self) do + o = ref(o); + if isObject(o) then + local nam = call(o,'nam') ; + if not isDisabled(o) and name == tostring(nam) then + return ii; + end end end return nil end function list_id(self, id) - local n - for n=1,table.maxn(self) do - local o = ref(self[n]); - if not isDisabled(o) and id == o.id then - return n; + local n,o,ii + for n,o,ii in opairs(self) do + o = ref(o); + if isObject(o) and not isDisabled(o) and id == o.id then + return ii; end end end @@ -364,11 +448,17 @@ function list_del(self, name) return nil; end self.__modifyed__ = true - return table.remove(self, n); + v = table.remove(self, n); + if not v then + v = self[n]; + self[n] = nil -- for spare lists + end + return v end function list(v) v.add = list_add; + v.set = list_set; v.del = list_del; v.look = list_find; v.name = list_name; @@ -404,10 +494,12 @@ function room_scene(self) end function room_look(self) - local i, vv; - for i = 1,table.maxn(self.obj) do - local o = ref(self.obj[i]); - vv = par(' ',vv, obj_look(o)); + local i, vv, o; + for i,o in opairs(self.obj) do + o = ref(o); + if isObject(o) then + vv = par(' ',vv, obj_look(o)); + end end return cat(vv,' '); end @@ -422,11 +514,13 @@ function obj_search(v, n) if o then return o, v; end - for i=1, table.maxn(v.obj) do - o = ref(v.obj[i]); - local r,rr = obj_search(o, n); - if r then - return r, rr; + for i,o in opairs(v.obj) do + o = ref(o); + if isObject(o) then + local r,rr = obj_search(o, n); + if r then + return r, rr; + end end end return; @@ -452,7 +546,6 @@ function room(v) --constructor end function dialog_enter(self) - local i -- self._last = nil; if not dialog_rescan(self) then return nil, false @@ -461,7 +554,7 @@ function dialog_enter(self) end function dialog_scene(self) - local i,n,v + local v v = iface:title(call(self,'nam')); v = par('^^', v, call(self, 'dsc')); --obj_look(self)); -- if self._last then @@ -473,13 +566,13 @@ function dialog_scene(self) end function dialog_look(self) - local i,n,v - n=1 - for i=1,table.maxn(self.obj) do - local ph = ref(self.obj[i]); - if not isDisabled(ph) then + local i,n,v,ph + n = 1 + for i,ph in opairs(self.obj) do + ph = ref(ph); + if isPhrase(ph) and not isDisabled(ph) then if game.hinting then - v = par('^', v, n..' - '..iface:xref(call(ph,'dsc'),ph)); + v = par('^', v, n..' - '..xref(call(ph,'dsc'),ph)); else v = par('^', v, n..' - '..string.gsub(call(ph,'dsc'),'[{}]','')); end @@ -490,11 +583,10 @@ function dialog_look(self) end function dialog_rescan(self) - local i,k + local i,k,ph k = 1 - - for i=1,table.maxn(self.obj) do - local ph = ref(self.obj[i]); + for i,ph in opairs(self.obj) do + ph = ref(ph); if isPhrase(ph) and not isDisabled(ph) then ph.nam = tostring(k); k = k + 1; @@ -520,15 +612,13 @@ function ponoff(self, on, ...) local i, ph for i=1,table.maxn(arg) do ph = dialog_phrase(self, arg[i]); - if ph ~= nil then - if not isRemoved(ph) then - if on then - ph:enable(); - else - ph:disable(); - end --- ph.__changed__ = true; + if isPhrase(ph) and not isRemoved(ph) then + if on then + ph:enable(); + else + ph:disable(); end +-- ph.__changed__ = true; end end end @@ -537,7 +627,7 @@ function dialog_prem(self, ...) local i, ph for i=1,table.maxn(arg) do ph = dialog_phrase(self, arg[i]); - if ph ~= nil then + if isPhrase(ph) then ph:remove(); -- ph.__changed__=true end @@ -599,11 +689,11 @@ function phrase_action(self) elseif type(ph.do_act) == 'function' then ret = ph.do_act(self, nam); end - r._last = call(ph, 'ans'); + local last = call(ph, 'ans'); if isDialog(here()) and not dialog_rescan(here()) then ret = par(' ', ret, me():back()); end - return par("^^",r._last, ret); + return par("^^", last, ret); -- if dialog_getn(self, 1) == nil then -- me():back(); -- end @@ -637,7 +727,7 @@ end function phr(ask, answ, act) local p = phrase ( { dsc = ask, ans = answ, do_act = act }); - p:enable(); +-- p:enable(); return p; end @@ -664,33 +754,36 @@ function obj_tag(self, id) if isDisabled(self) then return id end - - for k,v in ipairs(self.obj) do - if ref(v) and not isDisabled(ref(v)) then + + for k,v in opairs(self.obj) do + v = ref(v); + if isObject(v) and not isDisabled(v) then id = id + 1; - ref(v).id = id; - id = obj_tag(ref(v), id); + v.id = id; + id = obj_tag(v, id); end end return id; end function player_tagall(self) - local id = 0; - local k, v; - + local id, k, v; + id = 0; + id = obj_tag(here(), id); - for k,v in ipairs(inv()) do - if ref(v) and not isDisabled(ref(v)) then + for k,v in opairs(inv()) do + v = ref(v); + if isObject(v) and not isDisabled(v) then id = id + 1; - ref(v).id = id; + v.id = id; end end - for k,v in ipairs(ways()) do - if isRoom(ref(v)) then + for k,v in opairs(ways()) do + v = ref(v); + if isRoom(v) and not isDisabled(v) then id = id + 1; - ref(v).id = id; + v.id = id; end end end @@ -739,7 +832,7 @@ function player_use(self, what, onwhat) local obj, obj2, v, vv, r; obj = self.obj:srch(what); if not obj then - return nil, false; + return game.err, false; end if onwhat == nil then v, r = call(ref(obj),'inv'); @@ -753,7 +846,7 @@ function player_use(self, what, onwhat) obj2 = self.obj:srch(onwhat); end if not obj2 or obj2 == obj then - return nil, false; + return game.err, false; end v, r = call(ref(obj), 'use', obj2); if r ~= false then @@ -774,58 +867,71 @@ function player_back(self) end function go(self, where, back) + local was = self.where; local need_scene = false; if where == nil then return nil,false end if not isRoom(ref(where)) then - error ("Trying to go nowhere."..where); + error ("Trying to go nowhere: "..where); end if not isRoom(ref(self.where)) then - error "Trying to go from nowhere." + error ("Trying to go from nowhere: "..self.where); end local v, r; -- if not isDialog(ref(self.where)) then v,r = call(ref(self.where), 'exit', where); if r == false then - return v + return v, r end + +-- if ref(was) ~= ref(self.where) then -- jump !!! +-- where = self.where; +-- was = where; +-- end + -- end local res = v; v = nil; if not back or not isDialog(ref(self.where)) or isDialog(ref(where)) then v, r = call(ref(where), 'enter', self.where); if r == false then - return v + return v, r end need_scene = true; + if ref(was) ~= ref(self.where) then -- jump !!! + where = deref(self.where); + need_scene = false; + end end res = par('^^',res,v); if not back then - ref(where).__from__ = self.where; + ref(where).__from__ = deref(self.where); end if need_scene then - self.where = where; + self.where = deref(where); return par('^^',res,ref(where):scene()); end - self.where = where; + self.where = deref(where); return res; end function player_goto(self, where) - return go(self, where, false); + local v = go(self, where, false); + return v; end function player_go(self, where) local w = ref(self.where).way:srch(where); if not w then return nil,false end - return go(self, w, false); + local v = go(self, w, false); + return v; end function player_save(self, name, h) - h:write(tostring(name)..'.where = "'..self.where..'";\n'); + h:write(tostring(name)..'.where = "'..deref(self.where)..'";\n'); savemembers(h, self, name, false); end @@ -879,14 +985,24 @@ end function game_life(self) local i, v; - for i=1, table.maxn(self.lifes) do - if not isDisabled(ref(self.lifes[i])) then + for i,v in ipairs(self.lifes) do + v = ref(v); + if not isDisabled(v) then v = par(' ',v,call(ref(self.lifes[i]),'life')); end end return v; end +function check_object(k, v) + if not v.nam then + error ("No name in "..k); + end + if v.obj and not v.obj:check() then + error ("error in object (obj): "..k); + end +end + function check_room(k, v) if not v.nam then error ("No name in "..k); @@ -897,24 +1013,31 @@ function check_room(k, v) if v.way == nil then error("no way in room:"..k); end - if not v.obj:check() then - error ("error in room (obj): "..k); - end if not v.way:check() then error ("error in room (way): "..k); end end +function check_player(k, v) + if v.obj and not v.obj:check() then + error ("error in player (obj): "..k); + end +end + function do_ini(self) - local v,vv + local v='',vv local function call_ini(k, v) + v.key_name = k; v = call(v, 'ini'); v = cat(v, "^^"); end math.randomseed(tonumber(os.date("%m%d%H%M%S"))) for_each_object(call_ini); + for_each_player(call_ini); -- for_each_room(call_ini); + for_each_object(check_object); for_each_room(check_room); + for_each_player(check_player); me():tag(); if not self.showlast then self._lastdisp = nil; @@ -975,7 +1098,7 @@ function for_each_object(f,...) local k,v for k,v in pairs(_G) do if isObject(v) then - f(k,v, unpack(arg)); + f(k, v, unpack(arg)); end end end @@ -1007,7 +1130,7 @@ function savemembers(h, self, name, need) local need2 if k ~= "__visited__" then need2 = false - if string.find(k, '_') == 1 then + if string.find(k, '_') == 1 or string.match(k,'^%u') then need2 = true; end @@ -1022,14 +1145,15 @@ end function savevar (h, v, n, need) local r,f + if v == nil or type(v)=="userdata" or type(v)=="function" then return end - if string.find(n, '_') == 1 then - need = true; - end +-- if string.find(n, '_') == 1 or string.match(n,'^%u') then +-- need = true; +-- end if type(v) == "string" then if not need then @@ -1083,6 +1207,7 @@ function game_save(self, name, file) if not h then return nil, false end + h:write("-- $Name: "..call(here(),'nam').."$\n"); -- for_each_room(save_object, h); for_each_object(save_object, h); for_each_player(save_object, h); @@ -1108,9 +1233,10 @@ function game_load(self, name) end function game_life(self) - local i,v - for i=1,table.maxn(self.lifes) do - vv = call(ref(self.lifes[i]),'life'); + local i,v,o + for i,o in ipairs(self.lifes) do + o = ref(o); + vv = call(o,'life'); v = par(' ',v, vv); end return v; @@ -1121,10 +1247,10 @@ function game_step(self) return game_life(self); end -version = "0.4.3"; +version = "0.8"; game = game { - nam = "INSTEAD -- Simple Text Adventure interpreter v"..version.." '2008 by Peter Kosyh", + nam = "INSTEAD -- Simple Text Adventure interpreter v"..version.." '2009 by Peter Kosyh", dsc = [[ Commands:^ look(or just enter), act (or just what), use [on what], go ,^ @@ -1139,6 +1265,9 @@ function strip(s) return s; end iface = { + em = function(self, str) + return str; + end, xref = function(self, str, obj) -- return "@"..str.."{"..obj.."}"; local o = ref(here():srch(obj)); @@ -1173,17 +1302,19 @@ iface = { end end, cmd = function(self, inp) - local r, v, vv, i, k , cmd, n; + local r, v, vv, i, k, cmd; local scene = false; local st = false; + local l; + i,k = string.find(inp,'[a-zA-Z0-9_]+', k); if not i or not k then cmd = inp else cmd = string.sub(inp, i, k); end - a = { }; - n = 1; + local a = { }; + local n = 1; while i do k = k + 1; i,k = string.find(inp,'[^,]+', k); @@ -1194,10 +1325,13 @@ iface = { n = n + 1; end v = false --- me():tag(); +-- me():tag(); + local oldloc = here(); + local look = false; if cmd == 'look' or cmd == '' then r,v = me():look(); st = true; + look = true; elseif cmd == 'obj' then r,v = me():objs(); elseif cmd == 'inv' then @@ -1215,7 +1349,7 @@ iface = { st = true; elseif cmd == 'act' then r,v = me():action(unpack(a)); - st = true; + st = true; elseif cmd == 'use' then r,v = me():use(unpack(a)); st = true; @@ -1232,17 +1366,30 @@ iface = { end -- self:text(r); if st and v ~= false then - me():tag(); vv = par(" ",vv, game:step()); - vv = par("^^",here():look(), vv); + me():tag(); + if oldloc == here() and not look then + if here().forcedsc == true then + l,v = me():look(); + elseif game.forcedsc == true and here().forcedsc ~= false then + l,v = me():look(); + end + r = iface:em(r); + vv = par("^^",here():look(), iface:em(vv)); + else + vv = par("^^",here():look(), vv); + end end if v == false then - return fmt(par("^^", vv, "Error.^")); + return fmt(r); end - vv = fmt(cat(par("^^",r,vv),'^')); + vv = fmt(cat(par("^^",l,r,vv),'^')); if st then game._lastdisp = vv end + if vv == nil then -- nil is error + return '' + end return vv; end, shell = function(self) @@ -1268,12 +1415,16 @@ function me() return ref(game.pl); end +function where() + return me().where; +end + function here() - return ref(me().where); + return ref(where()); end function from() - return ref(ref(me().where).__from__); + return ref(here().__from__); end function time() @@ -1284,11 +1435,21 @@ function inv() return me().obj; end -function objs() - return here().obj; +function objs(w) + if not w then + w = here(); + else + w = ref(w); + end + return w.obj; end -function ways() +function ways(w) + if not w then + w = here(); + else + w = ref(w); + end return here().way; end @@ -1324,19 +1485,30 @@ end function vobj_save(self, name, h, need) local dsc; + local w if type(self.dsc) ~= 'string' then dsc = 'nil'; else dsc = "[["..self.dsc.."]]"; end + + if type(deref(self.where)) ~= 'string' then + w = 'nil'; + else + w = "'"..deref(self.where).."'"; + end + if need then - h:write(name.." = vobj("..tostring(self.key)..",[["..self.nam.."]],"..dsc..");\n"); + h:write(name.." = vobj("..tostring(self.key)..",[["..self.nam.."]],"..dsc..","..w..");\n"); end savemembers(h, self, name,false); end function vobj_act(self, ...) - local o, r = here():srch(self.nam); + local o, r = here():srch(self); -- self.nam + if ref(o) and ref(o).where then + return goto(ref(o).where); + end return call(ref(r),'act', self.key, unpack(arg)); end @@ -1345,19 +1517,38 @@ function vobj_used(self, ...) return call(ref(r),'used', self.key, unpack(arg)); end -function vobj(key, name, dsc) - local o = { key = key, nam = name, dsc = dsc, act = vobj_act, used = vobj_used, save = vobj_save, obj = list({}), }; +function vobj(key, name, dsc, w) if not tonumber(key) then error ("vobj key must be number!"); end --- o.object_type = true; - o = obj(o); - return o; + return obj{ key = key, nam = name, dsc = dsc, where = deref(w), act = vobj_act, used = vobj_used, save = vobj_save, obj = list({}) }; end + +function vway(name, dsc, w) +-- o.object_type = true; + return obj{ key = -1, nam = name, dsc = dsc, act = vobj_act, where = deref(w), used = vobj_used, save = vobj_save, obj = list({}), }; +end + +function vroom_save(self, name, h, need) + if need then + h:write(name.." = vroom('"..self.nam.."','"..deref(self.where).."');\n"); + end + savemembers(h, self, name,false); +end + +function vroom_enter(self, ...) + return go(me(), self.where, false); +end + +function vroom(name, w) + return room { nam = name, where = deref(w), enter = vroom_enter, save = vroom_save, }; +end + + function goto(what) - local v=me():goto(what); + local v,r=me():goto(what); me():tag(); - return v; + return v,r; end function back() return me():back(); @@ -1373,48 +1564,113 @@ function taken(obj) return false; end -function take(obj) - local o,w = here():srch(obj); +function take(obj, wh) + if not wh then + wh = here(); + else + wh = ref(wh); + end + local o,w = wh:srch(obj); if w then ref(w).obj:del(obj); end + o = ref(o); + if not isObject(o) then + o = ref(obj); + end + + if not isObject(o) then + error "Trying to take wrong object."; + end me().obj:add(obj); - ref(obj)._taken = true + o._taken = true + return o end -function drop(obj) +function put(obj, w) + local o = ref(obj); + if not isObject(o) then + error "Trying to put wrong object."; + end + if not w then + w = here(); + else + w = ref(w); + end + w.obj:add(obj); + return o; +end + +function drop(obj, w) + local o = put(obj, w); + if not o then + return o; + end me().obj:del(obj); - here().obj:add(obj); - ref(obj)._taken = false + o._taken = false + return o; +end + +function dropf(obj) + local o = ref(obj); + if not isObject(o) then + error "Trying to dropf wrong object:"; + end + me().obj:del(obj); + here().obj:add(obj, 1); + o._taken = false + return o; end function seen(obj) - if here().obj:srch(obj) then - return true + local o,w = here().obj:srch(obj); + o = ref(o); + if isObject(o) then + return o,w end - return false + return nil end function have(obj) - if me().obj:srch(obj) then - return true + local o = me().obj:srch(obj); + o = ref(o); + if isObject(o) then + return o end - return false + return nil end -function move(obj, there) - local o,w = here():srch(obj); +function moveto(obj, there, from, pos) + local o + local w + + if ref(from) then + o,w = ref(from):srch(obj); + else + o,w = here():srch(obj); + end + if w then ref(w).obj:del(obj); end --- if not isRoom(ref(there)) then --- error ("move error"); --- end - ref(there).obj:add(obj); + ref(there).obj:add(obj, pos); + return ref(obj); +end + + +function move(obj, there, from) + return moveto(obj, there, from); +end + +function movef(obj, there, from) + return moveto(obj, there, from, 1); end function get_picture() local s = call(here(),'pic'); + if not s then + s = call(game, 'pic'); + end return s; end @@ -1422,13 +1678,51 @@ function get_title() local s = call(here(),'nam'); return s; end + function get_music() return game._music; end -function set_music(s) - game._music = s; +function get_music_loop() + return game._music_loop; end +function save_music(s) + s.__old_music__ = get_music(); + s.__old_loop__ = get_music_loop(); +end + +function restore_music(s) + set_music(s.__old_music__, s.__old_loop__); +end + +function dec_music_loop() + if game._music_loop == 0 then + return 0 + end + game._music_loop = game._music_loop - 1; + if game._music_loop == 0 then + game._music_loop = -1; + end + return game._music_loop; +end + +function set_music(s, count) + game._music = s; + if not tonumber(count) then + game._music_loop = 0; + else + game._music_loop = tonumber(count); + end +end + +function change_pl(p) + local o = ref(p); + if type(p) ~= 'string' or not o then + error "Wrong player name in change_pl..."; + end + game.pl = p; + return goto(o.where); +end -- here the game begins diff --git a/themes/Makefile b/themes/Makefile index e055de5..ce1216f 100644 --- a/themes/Makefile +++ b/themes/Makefile @@ -6,6 +6,6 @@ install: for f in *; do \ if [ ! -d $$f ]; then continue; fi;\ install -d -m0755 $(THEMESPATH)/$$f;\ - tar -c -C $$f . | tar -x -C $(THEMESPATH)/$$f;\ + tar --exclude=".svn" -c -C $$f . | tar -x -C $(THEMESPATH)/$$f;\ done diff --git a/themes/Makefile.windows b/themes/Makefile.windows new file mode 100644 index 0000000..b0d02b4 --- /dev/null +++ b/themes/Makefile.windows @@ -0,0 +1,7 @@ +include ../Rules.make + +clean: +all: +install: + for /D %%f in (*) do ( if not exist "..\bin\themes\%%f" mkdir "..\bin\themes\%%f" ) + for /D %%f in (*) do ( copy /Y %%f ..\bin\themes\%%f ) diff --git a/themes/book/book.png b/themes/book/book.png new file mode 100644 index 0000000000000000000000000000000000000000..3b0f5561ac98c8806b049ca9e96e2f3732427e49 GIT binary patch literal 504420 zcmV)OK(@b$P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L04^f{04^f|c%?sf00007bV*G`2iXT7 z4<-W=H0eD6000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}001BWNkl%pAQ{_S*W*(V?7Afhf%*aR&cQZBBqvsqY0M;AhpZ_<%$3OpzKj7!jU%~B!89-nV z5r`N7!)QW;F=2Sz@3@~2j4?3h#Ek?X`0F8H_Me?op*o?eP*u$7e>XD>be!i2)d>S& zY8Z2XzyJ|oKx=~DJ6Hr}2BtftH2?sC(7ONqr5(7n27_NilNP^!!fc}V4r21Jjfvwp z{2HcTKgI9M&qLf`{%#;L5EGaQ=a^6sT4R_EoacZ+&|AZ|A9p+QAOPmCHB$hF8@0D!3z!UFh@$8#f? zD%2FP8%(wC4}kbx{@GL&%fVt6Ev{*d zfpZKn5ts#!bNK6YLZ`xDAOH{ZYf@E=;nz&@WG(I^V(pq4)C`SVyqALF^Y}e5FcVB| zUmYL0p!q@HT|Jc@kyk@&kzRvB#_dnRsB%Zerj@bLHHRyaq9J2Z>0MMiXv7eZ^zRtqy zKG*ks{V`MBW58h0idSq5W{!Vby+(upGC&QjH5^?$UX6i%YiP_M0*>Bs934b}&Iz-8 zZ^Zug&oAcBur~qN@OV5xWH^pn?Z3CTw|eHc+kx>IIL8TLL2IpI6$^VzG}OOa^EC(v zfQkE$HvkQ%8iq0c<{!S{AHJRV_U(?}zCSP~U~zqhv-Z2$^}c3YA-b-Kh6Xi@_>s?u zU^byPYY7kmA_Qp+X#a4H+V=O{TYy2;V5BfpwHBA1YiTvvX zLZeu_`FbWWG3Z6svtxgz!s34?e|;y3p97!vo)DTfghG>GVCSb5yL# zXPD2Ap5ncKc7KK>42t;Szjur7OmW6=>?wnYpNV4(s2P|T(gYN%AkW+UcWZ~gH=$x0 z00<@sS}_XP&Zc&QnbzLPpAuqFoW~UFET3b($j?5y#H_rxl$lrDiaFluvomq!fTj%7 zhxevW z5cV7)b5=70;(VTSLMI}J@$ZAtha#$bo+S^;f^|k*AF@Fvfrx zfymDgH3f*l(!g?n$2ZU6diQm$3L*CUMcdkXioq=(7h{0+4dV^qmxkkZ1A#EcgfQdv z^#wK_m9QQ}xQRgFH>9!E20PCaV+;@o!oajBO5^|{sbXfl^jihvIVRM!f@vn}ObiwV z%rNG}?RcrA)*pyJeVr3T!xyb7%m!eDE{r(`pc6U`%mN)J9(s@DK)@OJOhIN4QnaIE zoWlzwQ;0C6cl0ZbubHOazJz=7;LqjJXk-Gz?R~ zJegx6oFfVn0)!Fw8dU)F-tl;x5!AL|Ngfzy2Al|RndqJ8>1RH3-7{u?ZnrM5xJFf7 zhXus}u888P)gdp<3s8&VL)A~H<7hB5oN+J`fYyAozx_CCZDwF(BG9q!uis;i#KCY5 zRA56SKmIxWcZ@N7{bmt1XC;pNW)u<2@l*dQ}c61f571*WOL88gFZOWtS|J8A%Tj^c!)*y3wZj;$Cni@2iz zNgU)_1--A&OvV*+#z7+n*u+o;!!QMyN?;Jw28g`C$plH&lL9_o{BRdPp^bc3JjMi! z@cMc~KTrq2{qzT5+%Sn?hD<*I2*~`J!2|Cq8#3Bue_3P_mKS+I_XvByai32hzu3|;jbB}~fM9`#pOw0s26FBk$ zT}>+~%3|JB@tBX;r+R(een@9Q0snd4iwJ@z+(eZa<+>o+5?VC~XJUy}xDtUmk`&1J?r0@(5X(ae)W6Bm8pT508+5rb_>2XJ$+rTcQ<(2?s!99zPiV8HjnmgYV!6GlNaNCVa8B!5*&@6sUw=JsHa+HDe1C ztz@yl394dp#S+xL01-H1x@`r*a}t_oVG$H8to4GF6cfzr$>Txm8i5 zmS?V?vm(5$DgXH%_v?92ipVN5cn2T|y#??na!Ka12&Tx$E* zxAkP|dzt)Pz*el}*AdTyqsZ7w&N{2=GZ3wq1&uQ~0P+Or?z3KNanD2;(-imnBc5CS zIdPr?(+pE5EaKEE8W_Fzh@ImiR-|wIBw}1CX2pu?$0xUZH9IicY?@GwF7Mw4bc>De< zTJInb=6qBI)mle0!4%X@QZ+Pq)h6VL#|mJEQy5?Z0{s|~)OHrMepHgyZ#STM_v3ND zLjrxUOm3TRwEO8@5V^HgT){U2O~TaShrrD%{W&H`9g$U4U?>_jwANuZG3V(Ujy>7% z+-E{=ErQA!=r^Mu>=o(#8<-nzoxRgxK<^#j><(t&9170v2`PjLty4WuCW0LdRe{=x z$paQ$B@ypV0S0EP!#BUyn&O;Z-1&wC9uLBpjySXqWRB}W4`^)y)6lyIzH@k0E#io+ zL29$LCSYQyDdw30PcY|zh;O*Zd56df?mB05QalMH_5#EMMFx68>kJX!`1kt*3Qvq# z{I!h*L~Rv(I`ML&Ko1P6QU{ow-y^wIC>vNj5j8XDO{&142p$B&m=klhC?@hy^5@i# zV=F+ko;fx&F#|#tB*)9E2b4L1=^q65fQoiD)Fp%%$ylPDTtwYFgjVsYdihA~$sg5`=} zt166a`;2yh<%|g5-hMc8)xEG9XLKFR_srXQVnp&Y<6h@$a=qp6e9Sux_Y0z#2Z8-^PG`0WSY#=x(Cx<`>dVd@>@IsN`i zZ?$j7866lR{LLT#h&cux=ZVMTj>qGH^Bf?O*ozBQ6(R3z9~Q~Acf1lsr6}@0Ld-n2 zL}FJ6AgXhmKUamb8Fb7ofu%@D;{Bn4cv9^{0Jtev_bm&J-aDEQgilCoIO6+Rgxv2x z(0liDP`D6w0w8UH1w@47IKa$k^1ic_&-iwGiTlHsYqtRKBv=7j-DQH1t@W|LR~8bq zq2%#Cx7!Vm``tUCM37()DDEF#o53*8M+6LDF(bkI{^NnM-G>B{{4*}rNc9rb@K69O z&IpLFCt&-^v)1Ni|1`$YyRXyUSN8)SBh&@*Zm&yZ-T>Tshw8+6I!ey$@9*i#jC%Ed|jnBjZ){Zf7K2A?kd-E!612z!r#8d%7+=JD5-GQyOhT-{56f{|A z?jTw3M|D0_&G&wM{#+MxPR!vs<~as#uP@cj$e;D%n83UNetFIX%Vb6|jB(!p zot2j$fQO-ma}vIv!wZlfKk&c*t>J(DH~%;O&;RdF__zPZU*pI94%LCF19SZ2YpboQ z3>YS8FJJJ7KQ#3A0@aCe4uArs9vZD#gEU4b0-N8cAK!mKd6`lyO@51K@T$Ndc=o@A^I?=&G0LGO38NX+s9?Nz>R zNXJwKsRxY5<58P@j)B&15Q#+DD1y+$sqvt7#G%wc3`}9@c*CjZ>LN73JV#ZVXC!@j zJzl7ct;LB;^1w_uACK4=)2SJc(+e;K=BY4F!~;;WpgRx{n}0_JXC~{4NLGDACe=iQ zqW}pyMg&cb4$O#a1vAD;7n%(ba6YsWK?+otn-{iIXFUrM!Q(NjC2G;h5kmZ|Z!!NNGm%PET|d&dA-FsVX((2Bos_Ir-5zM;pQm+sI|}{naG6C0~>*lSMOB8uaiX_ zDW3|&L7UW-IsCn(HS|ah>N7^*OPT@)#i9_tKqHF+VFu~FHvaACFl+TZTWe5Kf2P7) z(c)b%1_8vCY}A2qc#t`Vcvp`F_eX;naDSYUe5~Z;=m(S-=QyhymIcVsk6Hl^GUT&; zcvrN0OW60}xhQ-|Sqt>J&{%5`@CJ~`Q0@ugLawb)Z^D>opupI=b?mWgE1I^H)IkYp zkVYGQA(HuVI(?HlqLR}*2@Eodjs`%co=C_0FiRwxUV!J}N1&}+>#t)Xupo-K9tWe} z@7LQ6WQNuq$;u?NwT5X{Ep&qwZM1hmZxU2Rj(E8c!rlb8egMSy({De}Z=dk}?Fat+ z4?p8y{MUbh&xhc5KmUYb3T+L)eS5?Ge#dz_(t3ZK-VGkpQO~2-fsZH}UcP>MI_&-H zQw`_C5wy3rJMQ;K6vzv}NUBE_$_kH7f%Ik)15m`PC={436q{!h+{_PTn)C8|b{Y=g zd%C`s-7Z6QY4RXy(!fG6JJ+7w=qu;AqxTkc-_@mOqM*uJby0gi;&(nS1?o;I(i5Hp zZ^cB$la|TxMuGK035Cd4w|fH(bIl~36_Kc)_lL)~MD5K2j9UOfQnfsx9(5+}i3Qn8 zupH=W^|=Y2(0TIZVAx8K?Lw@{IGAT!?s?1nL*925l2VolfA1Y;z~gbR=iYmBWOocd z+nI5m11uI@C60n=fSGVRUaNotsK7N<#d-e$kp{DdIl31B9H>6?B_U2!eCn*<<1r(W zU~W&v^WMop-P62Rs!oAPw0_R%fJHC~4%V$xe+DJG`R|JEUao-zn_fP>JW=7|9B5K& zssI-A1pU@}b@M!4HQa7D7$(m15$oM4>wxD0g5Pf)NYBHDDTD;Q^`OH|oWl!A76AoK ze~;x%(E+AK5wB!B3jW^vWshV|0W6?zFILX;fe{7YrGNn-eB0K#pD}YxaOX>5RK*yRD((RIbZnqyG7jJj2b+rfc;eY;L z{xAG*|MuVEem}wSJC#szWG|#I1qhhXgz>xIea8Rzum2Uke))vPj4>u2=Rm*Rpr&|4 z`$=`;En0{m!h9QE7!Y9$#p7{$FlVPVaG;8h#~FNQ0_0W;eyS~M#HB5?T1A<-WSc45 z)ng1#$^$L%>u?H>2b;43UA`uNZbydmFgeGG&U;JV3JsmcP-JV^)?sJ_)AQ2)C1#xG z1EvJw)rCnqf~sQ129Vg`&M^#1le7vRz2BA=BM|TNJZtl;K(TLtS#kYnx1dlh8c%Lm ziKKexULXCym~T&Q-9+mdYJ4f|if4QO9@lwAANJps#aE*L_w#{r+V)Gk0z+tRW*od+osmq0yelNYMrCo7uvfCN5KqSIOWW=%N5ZE?$75Otc^-tG zILk$&lY2?cqNVFCe3+w8t`E5uf}WW76Z6)Hl*Hjf`i`OniC1D^s zLW_nupixA~(dz!{jues>z0uhk991(G+!dd0&Sj=%`14T0GZW zr$m5`Q8cs4plNm2v#{`3B5@Xs3r~NHS*SRZpFMLsfMJF?tTbh|on6Vh^8$?uEl;`) zeV|(+gx+dZC$SC?ob#2;TI^>6L2=s(mPPx}al2Ap0tK(aw;k)!*M^QEvzod}UZ z+dUA`*mvGzIBKs&IM9nrYXq-DFFAT%(lP|^Z^n7Cda z++WP;^itQBNp)VNMLe55sNHY?LDpJr#%SGtxN&I2R0Ewy?D>Y?UN2{9#!+8`p_njS zK3f-Fv0oJmMe9@@TGu^#agurkkb@tq+vl{@M(WRw8IvZ2B1ThE#uP9GOK6vR7CBVf z3XR-M*y;2iX|lZI=`dNUF${>hyF6d|Lw(K%whoZeY{O7q<=RozK?}ITuixzf9GZ zMh9FJQ0oShSvsDK*WMvMp*qkSSJ%BC4Wf!sx?(O(=Nto50hR+zmJYf!Qy|csu@{{M zVj7(z0PU94!56f*HwULaeMPE(e9wnAwRxVDKuQ+E06;xJ6*XT!vELa49R@MMp@jQ= zV17F>|MVMv{Pu>|{(|3r{X4w9J5q7rZ!7T5LjmtXv0#p2R9jF_bk zt0ln8gV$dY^?KKT@a^Iq=f+>$xPO*y(Y=Xe^#QnSrE%nm_>vHT2%<`OfKv1Kc@;$OC}WS`fiZjV~x+CcBTv zqv#v?95MmA2PKh^t!a(*FoQGu9uPoW(=NOnV`4ns(3;>pPxRiyJixmr9Ess`H_+Gd z3=L9W6qe|KWb&Bnsap3>hvuT5P>3zp?;xkwF9H4-#p%lXn+ZkUQ&n|zaoh8%i_WMN ziT{S+Vy6XFH)5x0kqb{F5zRQ~U6Is-QFT&X|KSKP>2Rc*nzy-!AFNI<8D7M}DWj$e zk`Q>#iPz7c@a^q8e!RWmG)DXM8Qc}KJ6)7nK&_*JQPkU!0z~j-50V_KYaRPA zQCk;H8jLNpMFt%j9Z!SBexD4OF^mP%49WyW1H?baoC<5n!t^&&KCf16tA8{&!F|K*kVDaHFgR!3{k*t zF={sd9y4s)E3LcH1z4eTcmfZ2GJAU|;qg1OfTGwFSO_hXZWy>x={rFH8-t=l8|r27 z)(v8EAg;v7QKYdD$Or?MC67q+_y8H+NP+hY^rTK;U(tj)l1&|sbe8XSItMR!!T zSjT8B#rhg71%sUv6v(}q79+q)kgi1)lmIymiryKwLl~)NL#Z5D1v}yPMVoZR|Wx?+A-Py6YUIap_3GgcfTeO*+gpy7vqO&{lM=0*-yJ ziAZUKM4E$Uw4Duk|KT(`V*)kre9kcdYUt7dwa8t(b0Mw!eeaR@2gR+4fai2pMNr;N zwK8T5zm8_hM5l$u#{qVO4u+2D`avd)#{&|~pp0!T&f?6ORMqni5R`K*tegO0q>}jx z31Qj^I#1Y~xOK*(1D`&91%CqGe*6HnuNbVb`!{sEVe&+}5vbZn8W2=~9b>>S@VlS? z0G!`3ABI2t*`MLmfv;aag*em$$IykwKE}OJ&J;23Ex;N4brMGg-9hFNjy)+*(x}XL zLEa{UggT0CC%OQ=`9nGc@3@RReQOHPQf_a1P;M2to&{9rJTIcKoukShngSV`+?F7i zPyt&pT(C|A)!SO=hN7UEE~k$~h!=h^h#`)5#Zq498TtczOJ6bH$L!<~t`nqd@od~+=_ z6xC!u{PuPVB(?idzQeC*-`4Zc}CG-h3K{3(bTOmbVIRP6Mz^GTfE<0Z0HC@ zFV`3UUIx~75vb<69eRVb2AWYUWngu6#^!pKbe##34rv5cd3vrb);Wsbn!I^0c)Xz4 zIpwN~*PEmF=c!;mqs{!l!7riDxoS6HPF0~@{1>(+(qB9QQ%2(kqkKNiTe(lXV^XIy zkwyX+!PUaeY+t*V&W_HDNx`B7a)|usorpS})eL}b#S@62#!);(QmkGGcorP*%>Ypc zv$xDcT;%(9<7s`K3%lCU4M#kAx>{B_p1kl8Mni`)FZgl z#0+W=Of?8KydI7u|G2+_i17O96K=N~x~~cZNObzQoea z5sN^P{6x`O$+mbrWpd}i=rm|ht$eKjx(VVh?lkf2lbfCBd3O9%f&TJx`I%iDt~M`; zVs)2qImmPfUphnX8oQ-+l3F(+0^_x3ROBL#Zs81?ze}Q@kbuU^%S&czVJZa3 z#wysm^B{xpQFJ2i9U|S6Wu`Fp*?`a3XR=Y3FWSY>??}8KLK9m0()cVKT?>C6bP>@f zsI==W-{*cPrUq?*smG{gq{7BU4W)5J7d&XN>CzgFbP)j!SquUq+~jEwia;qkf~|XZ z?0m#^h1OJhJQu1$eLo+V9Y|m!AQ(l`n(NO}dO!pYV4+wLsejsX8RkukWD_)_W78Wj zf-NyU7iztO>BQT&-yo!z=MQji80tP?7Wd5o`VTcAR91OJgg^c9@A3BMulU*tUw?YR z?>@ic_Szj&D>SuXsA5cis6T)GTJ5PsVdIPm8`J5BI>FJn5JV+qM8oYRtsg;rP3%&n z6p0YvoAZ8ucpIfV>uOA-6O$+Lv zj20iK7RalwWOg$E*~Eu=2zj?@E{>*-=&pD|C>r#Sp$>PaKA?%yVuDV>#3B4s+(d9h zTRa1FYu!5mLSS3=gb9}%+Tt*kvcywW%%H9?`vK!TXg^e2aAvc+R@9*uMU?6%))ym|4 zPcn&C=YojAVleZz{?r*}0g>F8crl)iNGwG^0ThBrOnFB&J&vTq$ezfPO4@cTu4;06 z<8Z5jAm~)yt?=MIHhq9?G|Vh&s)!@5BFpdZDts`pbThg0%qkg$4G>=)QOuUGSa{Qa zwG`(%r++2g6A}pepcABAlvf;SM(Ovgb*ZA?K+te%VHVtu8xHZr`t#?{czJn2lUdg= zV||M>^s>;NMP;Mpcy0%`hyc+|hHY#nqGbbW*b3sb@;(%D5G#f5Do{^E3^6mXE~LH*U||J4W%2ecO(u3)N>JY-FWHjrWdU0W zVYss8v)sA<(zwDKUo1gsX`5;-M#7I7v0Ju+h8Jb<30QDi>$M2JI44y%v&h=vP}DZg zzg?)&Y4*cRXh#P(DeL}pCZaG{FjH6{(i)CZOC*o9lkoR1Kmc238;fR1icSX%v(Agu zWaVq8Ifc#FQu4^GT!khP#0b(`B#T}VNm=&~7%`|Rj`jtn>f-^LLP9He90xRXLE+Q4 z^f@7rx9Ip(ca0cmMh4w28f?yR6^na_rANq4RUn+c?;(L zhhbv@2SVJ8n^-^S5ZdW?a79I!cp zUY76U-3+76v(8aU2bshAdM4;C4bqS0oENsRSjN2IBdp2IfTR%jR*qX~ox6L4nbdTBRV}hljlgHWf zF~Bf%QT)Gu^Vj(0r%(9u((%KF0}#|O^n2|^4pvWIN!uIJ>7?=NKl~Bj{`48Y{KX&e z`=5UXk>d7xV1^Ji#gwE5iU(_{VHhE%Ap)m{A<#h85E+y60w*FViACGcsxU}2X{X|t zP$Aoin6r3-ef3Pv!%^Pb2W|xjDiK5^1e;|n@=(CV8{CDvRPDJ-A+jUe@ftU85H!AB zXdvk%LzSe&skRkQd1^~`RKitb(pj4!1=GX?IS%m4ZCM9K0&fP)@An8Vbm?YfaQ6g5 zBkA$veu!RNe9|ec-b1Ypjtq>Qcq_`bO&*RVLVmC@IfaR#u%o{-3dl}SkHlsj=+S)( z#|@ta(J=!p2Dqp#i~bcHZ4qeDrYwlf`TaQ)d5lgRxs~aZ&AM|dGHfc2-s*cC&zq(r z`5fX);%&x+EMeet0W#^~c7(<-F;Lii`scX?WiM=_$>~4bq9C+zfSb#8i{Xb&wqVP> zMSG#pel4rj%e?_2kl?9`2o!fvxMEzbOyhZ-Gm_GnsSqwK(ho;J0~wlgx|QM_fc1qe z<-JjJ-3cY%k*kAXL8Ic(&+L>qlC?goAP!4X76}UE5^%2h7%2Th?)gmMd`3#}_bZu< z*pybHWgq~joh1Da>;D!B1wzEBylAM@q+sBBHj#+)liQI~#eAJR0>|#c7aaEE)`Frm zAu&ToW8Y2{?;OW`rCS#q{RrD(UI}4y1lmY&yB(Y1gKJZgBfg`tm6URT8ab& zfixXpcV1)HT~;=(@Ho(J*V!bSvyD)@?4#_0q=7NB)p?i2{lPb<69;`H?V^*@zVt61 z%UY*$yrMX}vZGxc0bFNM_+AdJ2yrCgNr98?9Et)t^&(~ZO4}?m0^gRqothWfo=Z@< za{0Ot^jlgPyZan7qo+%vxoFx#WK38fXT{Vwf1kS+s`H6a!OM}4012%Lu{hKUZs?lEO{f95*W3HIjD3%RD2$r)CgZ1+jlF@8+M6hdU*OxES!Yl>mdI zd{KOIfPmb=oR;3=u2&+Fe9uDZogotYc6VMA3e9QSx%y0w>geclxUH35fCM(}|+P^9QlJIc277EeRPwg4>C z7Miv3S)a84@8?Lory*dQrNMznq-%qt$MViqMd?b_ONt3#IER8-a~;l{Fkx?r?i}h} z3`zuRtq?>jp1T(VGj$=6@DdTEcZ_)!?QU6h!nv>_o`f0VIs0K6YNSF@jeV#W_TtK` zg5VVA>*(TyqrONt0p3F92*4!Q^AH)RG0r)>unTvv-EnBGqd4FvmEX8)z+ye`+8y=) zDjQ-{ZD{u7+yBW$2XU%r2;q3mWXUxzad2A*ai3|MOq&}q|MD}s3+L_TFm{QRGDWg)5Vb_uBTf4l-Ip^_(zA&(uP%`h4uMT2%Op+Rp5{ts1aJfx#e_rK5AekU+i5k$at7C*at(iyfYTQ`_(%Rgpyly zi4-(##bwJiV{tEo(#uv!F9jV;_gNskM4}NQ{n7CA;6#c}D_@+aycj?X3}pyWSd@n| zA>xdYw&L#c4242{J;kkA&Gk;&$wFgsOC zgjT07)@-fHiEWK88e<{3*#R#01DE^Lnh}_5a?MYvHQW~cgw7M(8X7NS0SPNy+Z-yB zW|?-@*+n(D-EQfo!lIjO);&a;9)wU?+EKJ1|NN2EvA|M;l@5il%@xVJ&(sVDACWK) z*mTFRF1Hx47_&Lxae1Gw1$rK2NgvGaaQvp+&az|924nHLL_z&d7clR-%mO5gP!_Eu z{%`Z@F*+k_Z)9SQxL4l&b^R`dHf6U&Miql{QQUbrV>l9 zW)~XLPCxbYc42`5gp)}0On z@c~*Iv=JEa;{oY6|1+l}GJ)V288D-D7YF{B6O#PKbj{G^NI?5^w{#Q{0iS7`ct%@Y zFk|Di^ex^{DNSKqs7)xRj;aR7k7^M4F7RS;5miz-_BJZ9CuF?qBSJtur@KH@(pBhc zbTN_+6I09Et*-$#>Ij1Bj4D4ChOM@^d%5wG{p4~8sV+d$Ct`Tu85A_Gz!(8)-C`I6 zDsjjXp;_J+E4LA{8Pht~p+19a*@S&IOtPjd(X9RDb4^mK}3C z4uK5E%d*#VdLGx`!Q??V#hqbM*&cIgF2;ZbG74t&m+l_e6R>H8pcKNe6-%vo_X--^~q=r>cvn;~^X^VgA6buBq^W^1D?%A~T zE?%sj=OgSJmoB2Uqzqa(3AJ+Dabp3jp-+6ZF+IP}C@8`S&U`&Wycm-sK9hy#zVM|l zxy0-UKE9L{a%zRJQ%B6e^J@LMi-@sN%jQPY%Zcyq4ENj}wIb3avQ|a|bF*4TAXVA9 zs)Udi8ks0#BtJ&BeERbm<(YdN2_NlRt7YLyl&P*Qnp^EZhS~rKWy*1m(1H=lt*&JP zY|C={_Hv;04r52xgj%>>J%U0gTZb%=LD`VHt;;DS@6g^wrHSjT?g;|1_t_#`?pPda zerc{~2VjEwTX6$a=)5DH`MhOIq7jy(S1^UsqFU{utt;IPzeucv; zS_rSp&|tgg{v0>%IXPWV)h@KpbzY!c@~j-SyqKID_0{S=cvrx}Z6~L27bVWhvpU7eI;Vp< z*%cvzLc?)g05&iQq;;4*u;Y1ZaZYoX5NLL68dw@yKkyijP58e45G#7?moCr6jvedF za2H8N@6EM%HO@4XIK=SHs|KVC4|xB;|0B-Sc2?@t}lLn7MN*OOdCi; zrJ0iGv@NX*4DWyrfKX$CH#_QJK>_R&+1H$-C|Ye5C6qIj(g81N=R6f6PiDZ8GK0*ureFJPNCGi}Rb7snhpwI~AB zK$Jk(R)B1jNEd-WE@#R9nq?Nii*dpd#x75W%fYZoBd5!xc4qXWm7TKXQ0D+7czbQ; z8oUiw)c^w*{hlvC-0tSqZ$}s+DMm~*&$v2HXLR(|p`1>pz9zqX`2w52f@wgATq8~d zn{irBfcOOA$pwp(ZyGkUKh8V8++Og)1RW1hb89*QVH%ucOoYdDYr(hsy?o69glm%z z$e|Vse0pos0?q74cl4dznJTCF5;;l=Rh(h3E3HN1WH@55QQIs&`)12a6x4{EFgz8# zaZO*}19$6EL+nh|hbhK%_I$r*ii8X0b(`qCY!wmy+SN^=bi3fNL45KxBu`FV>}pHE zq?_fc8G5^gb*q0)cl|)ws*>3f4?AIYvPsYY?A$HQR z&9exW$botQ$Q$0@r5WFjvCtZ^6~;R_y8U80N#3o;>6MWqF9B) z7B(?xaVF-(@?-|YF}0_YX-s_ znuwe-n~o@EigTRhoa6`lrd{9=8k$7ge`z(C$}jk z3E^(&y`+JaFi8PkleV#;noh+^H?obmPRn^Lt+bP-_iWF(&VlIqM=Z?ZWsKq0y=icu z&cV)j#DON~JbFS7D;Dty)~lw9^H zXfGXJP{exg+x#V5x{oYQXYsv7F~DtN&d|-l=Kzt!+$?MY`>m)8Uulp5M|3MwwVN%)M;GovuH#^lx|DFrwPTH*P3;dacI`;5_K~N2v{04KAQs;>f-O%!y*Sv2B5A9EDQ81 zDt&GgpfxXNF$V-AW_r0BW1JZUIwzLFP75=`%h3Sb@%@|P^Vgry`wzSxhF{+RB`u2J zCn3Ca#(?>N+{+vg_;8>(XDRfhHCWi9sVSsWB?H8ab}W&aPbT#M-{DCtNuYDVb!B#? ze-0rsUOZN360F%9#^k~wcCjs)Eb-bZ;fw1^wz02eiEdAFZN#|W%jM#6o{sp5&*?w} z8`yFm;U*V=bkTd{9R;D#h0XD%+Ws*wL{;(W^%ZY#Zxu}YmS`uheXm44VE4sK59&>N z!#gS!t|(zgsBol+QgqpDo5YzgVt9~Sa(u5Arn@kS3mINRo}6~W<@i*BU`b{!yAp68 zRJfsf`5ZK+D3@agGqfyxeXU7b6F(JR;Pu`y&OpJ1pIY2p$s4xeRBl1(0(fpMf+3f< z-_e`kM^cm_%-|RZ$3{2~!8FCG4>VcB#B%76cUl(T^Lc>c)amF#=xstw0g8DWsbQd< zZWel{z3Y%ORCZh8{C(cNrb`R`xq#apTFjO!$ji%1xw147^v*u#XQo4r6vB(3z4V(D zGECW#jDYn#jk&;%Z3c?cT*ITDbPvzYDyoWUR?b^}b8VrgN%HynXD6DnAP#a1a2;V@Pf-!r9XUtYjB(uxYoz&-rc3Z0Lzv4R}YzqDZF} zTAvRbz)Bl-Av<1d*k@=NlA4>094Z&G=(3R&pt<&S?7xACVc5>JY?yoZ+jEQnXW0tK z3O}LfZUz#puEOV%qEP-)TRHM6UXf}x~RZk{@E}1?;pUw{||qUUw<3uEr!)L zxA@;_rR~bCr?P@1cCMxIqA2(bi?ARJ)`FRLGn{i5{5Z5w*>g>MOrEF*S5JD+M7M2o zn~6Zi1oXDtIS7I#JrGB}1n#0G1b>qA0}|K9so<}=IZ$m#jImprk^nlZJ5os6w6b|4 zUXw3N&>YBYnTaHdT9Yvit>1vR$Li9M1UkYSLKO%JW+kLaGgqWPdOWj8OlVnjxqwV9 zY(z8B6yMDBSO*f%#fyA5d-eM7EI0{^j*-Ql1KAq~(ns-T&Jmw0>~DpgM@S(K2G^X0 zER3M(2H`wb#uA+Eh$iP;mnVzDSqE-xu&Clq6=JL2)}jb<88Ga&!bQc|3sEA>$AFlW z)m{xsk}Niyj+DciT5B84!=FPYMLEyFtH53q4etWR6ndj7xUUwXz=(tWvVNW%bDr%6 z_dmO>^Ro^0&VvQ**3U7CH(aNhbTAAffCf`9fYI!AG9YsyH%z}@rJDk&!n|1D7WMq8;6e(~Fl@08&Ld(kM*h;NHaM%hG!H0}6r* ztzr$^3=(hB$)zK5Io!ABxVq@?H909Z2B$6am4@LuhWY+8GS_oKoC~}UHQe^!M|!s% zkb2&?&lccQ=ceJfTKG~KVKAQN&0XGizdw5s_58J>`fQF~7gw~jZ><5u4^OtAK4%V+ z9I7DmE}~}lfvMb&-u(>lln8J0ou1-X=?bGt=E;$0PwC9S#xX7l|XNgHOH zVb!0&Xc+nMRVVsUalYpRIlTCJ?d~(Bc(d#?1-Jnt0k5D;=1eysHwA#;Lc65MV+dYI zFnJe`qp&r&wiC8o6iKb@X*p=mM!4t_p9_%Z{dXB+J5c5fi>0$^ZE1NFka*_;u}_|3 zpNPO_Xs~q#eVA6x5_b8DD55y%$)O8l7=HQb6}Q`8;h+B5@9}nj;PE)|w}1C5e*5FE zIOn2+UPb6;;nS-)#{*`w++>oot7d42I~b*seyE`zF>%;vbC=;5Lg;Qs*P!k80WMs5_TJ4voIvN{g@u_;5pn z%O*Um6?b&2318-4jywX?>)NK(IuEcMGXtc=XI6qGwCSn-ejltw$@_}J0lRw z=8}T~ELy9f8%_0UZN7Cvftp?7j$3grbXk!XH7oh`*b1`E z`EN$o>LbH|OrVJH&RifZP-nciv|b|8z1V+Vx9<#4b|im$uGvwRn4bL%G>EvijrO&; zA=vwX%y;uhp4=nrI#Q=pbYqlGaV5`sDIEVX(}heFm*r`8DmMf?3oFV&#g7YPV837b zL|wbm$m{~Om1zu?KI&pPld}_^io_ZhU=sR;ZFAXNcBkyKcR(>Dk0YU#1HB1O+#?6U zJ42Q-c9FK-|21UQYJPo!B};hk;Pqz0W3DL?TJ+g+uETO3EK`N8a~=cLBTte5q?W6f z##y#T9Z(hH%SmeUe|TC4*I}7d+CPsqywbd9O6JqgKc9I?d)v)z{NH+6qf4UeIyhjI zwk`7qi6Oyky#`k1IudbECbg0_!{L`=I;#h3-jWajjmt{@qyGvp3f*TN z$3ppYZ+d#BaZS$FF}}fNeqmZE3xiILCAp?S|7|Ka!)~JBC_#RQKXLB4#Tr#~VcD zzNl5$BwKE`mKL~Dh*p?WI3;4t3PftB4;2fvaZlWxGra5yi(j51y!yI?JzNwOF$}a^ z+`~D*CWmfeOODLIM#ZIc)F6^cBzn2L#!Jvf;Rk&*0Bt~$zl;$HQ&c0)pY7X3@wrXH zT{PrbEi+F}{PzS0oL$f0jzb!HlMEtWeOt8G$^|OXI4r>$N@z;;nRQ%kc9++-t)W^$ z*Goo3x;MGzhb}Ge8A5#bU-!>Z_Aw&)BLDy(07*naRFbgr16Oj)NHQ5qFYT6H5RF=5 zd2?^o4?sCRdUbC^1TzJlg5q0Nhv})H!8XVU98@Lp$+YwBjvsH|ar^qU95`|)(5#s^ zwgniiAxoMqP2r0z<~~O|XGEmP{3;fFPfPm9aqJ`e>AjfLtrPezxwyEQ(583VI&vib z8Nzy$j3AvZg57=ZfT)~Vaw4=r!^On;u4CRWhsy3IsUYc7vmKTx5z^@an zZPTm4WqF#4057&$2?cWkIn%Q3wLp|yxKHmoNAFYkcFUaWIXbhD zXw{1p4Jh3J-L^LbmGLv&Wbx%M)~2XpU@s>2;&aZ4@893>_VxqP47Z~dJt5!oJkQH; zHs^DXSo0|$w(2ZvP797}VcMqfK3gA${%3EsUM#(-)MHm9mR8Z8)R+RJwytz`u{cre zEaajaR`$Eup)1>Fu7fy@Ao4LP-WT!v{<#|F?XOv4_p*`=i&tP=G>7(IC~)?@V4J3~ zlKki(KO?6AT?V~o0#)|G_{S-@{}>Ic9EvupQrER;twU9F3TN=yKSHdp`)GCAcfs{; zg<8qCMHl@8%I0%&`%L$##28d(IY963LFO3cdbj}s!fwt%TL-sdKIi=wB-s|xiDLqO z`}J248*X2J0-=@bR3?}^*yLaZg^Q23VKghp;zXAztela?7_NKv4%7@? zX>{&Ga8467t0T>r$Z!Euo?W(_b`>T}yaqS#UDLS%TqK*ddrn?whU&P?-$9rn9Iau3 zE?`HR0@)n6$Aoo1f9`ed$IVSmL>dMe=J|k82WW!D>H3jYKX*W!_u9H6(&zn(0P5yx zt*UrD&Or5fQ{U5j4o@XIQV%f)BdvhDFDNTvpNnxGAZjJnoYSYT){V`{+|ZyV(Qu5Q)h|dMFbl6(vnuA=?}lGKz$vo!Zy#x(#>=( zj=IhX&35G&)jUlqN1_MwobGweT!k7o5&pErr~YxC`0dx<@XM#qF|SBs1OS1#<9>f! zTrg7fCk&i(p)=V@%XQ>!Pd^~0TG`N|Z2Z;+8)IAsBNe)nmX)^jB+m{&&%FA4PI>sH z^=byQYV}5<4)f2F>pRz0Ykk{a*C4tM4qS?$sd~{`WS4MPUDm9Qd=Ca#3EcVt2EBJY9*;t({WZ?_%_Lv9!!~IzMdt|={C2zH_4O6E+YKxlLpN>HCphIcg~;c5 zMvU+oDI}55sIU9SW5!UfRt{Cko!&p+dwcCH`j_Zj&1%14qrO-brQ4hoS_MNw3i^~N ze>A=QSzl0d1-7-h+}NDz!f6vc^~2dxt6PFga-Vaavg1gMFGI}sIT$+Kc`>i;JkLcJ z*%0~5gz$|Mei55bMU#GUYI4JdoE%OUny_shjgOx7D*kKoXq@}2^Kb9y$EbnCd2TEV z`{g3J(|6y~4XunU6pUYg{S6|FFJHb~C`He-vFZ@Dpp`!ry|!5gm-8DXxk$@uIA`Ek zPB@EsJ;fS`-YI^_SES)*3q4*!yVw^x?2;%JZ))e!i(~Mx*ZMwWr6{13U))_5biM@%vxC!di3sk1&h`Ljma>%neglzM6UN9ldGwwUhcGop%w{kbL1g48+t{M%2fw$2b`{5F5X%WeN$&m zdiM>!7IlJZA{>q`?x)|517{Q(iEJIcheHB|{izo($I*Z$zUT>PN3ZJH$g1`0Nm*2k z!Z;rfyxb0q^HB%Ed7kLU;X@DmQ4^kHY)**n-Fe3+a>vATCb;Xbg!`2TjU!w%cIpXl z(`#M0c5QdA>Calp*FwmGmrgF)vN+&P&0WmKsIR4~3^Ri}$3V3ah^zBNrG)#Ady53> zq|?2tBk|a$le%BJ3uw7{QK6Jwlo+se9MIw7_@nhGWL5$Ja-qDM;qCAL9xtC>faWtk zRKsz^ocqq)LP!`vxC#lo=qV5r+{2i!f zZIlmTr$X)=&t15icHfZL0bXRBEwUpL{* zb#dIP0?D0%m<8uK!qLt}oj!p%4-y~x*QA9blpAd5RB*Q%hT59oe0zhW)o*Wj%&`Wd zrsEYw@XxqngzrDz@OS_DAMl4i`vrga<#&L&m;16*bUG2UV3^@}eZ?7rHCoVIZ6fp? z-qvc|!o?=3wB%FOx7iXRJzQoaG-~Vlznjh-^N@Tnqr15fvbg1o8Ayq9iLc`8of=9{ z-8piHHkKZ4Ih%#@b`bALVg9b2@^?km1=;3H`iR^8dYA7E&LPJjH!|RykDvlB2f3o_ zWm2(~#8Z7PPbL&xoz-x~qdafZtteb`zyNs%b{1luLmFeUIwc^Z)kP*+&yOkwSq*zj zD`TDR#^?aRENY4ab^dpsXW%xv>7=CQ6X>$K)KT)^Re_f!sy3=vI$CtN1VqHr~h?g{PfcoeER(2 z;9(R+ECeX~z|r;+YdKVI6P5VxMRRL}G0qVCw^(<6&7EC5A6&<psyWxoOh>{2L#flg?r)`ES45p4TG{pNpPJtQ&ESNfR>LUsy zpfw4zBty^QhW7h^mYy!PN7s3AsWA=rNLZw-?vB^w=D=mFU)R5QewafrlTyzT!yjY6 zmiY%^^=aq8xS!Q+H3PnV`;Je){}PnmoH0T%W6lT6(k|pDMe7ZG&N3gEHQ-a-k{)jO zkv6?V4u*a@Zur~(`1kn!F#JD%^Pg}g1sT3R{^mdZ5#PVx0TAxPf!NC=bTzxE{nsI| zdH)NqDYqNC3RQGDwql|!Pj$O?L-zLKh5wmJPE6drMBbeP%>1E%E|UnvA(dQfpZB0> z)ZVrIDyg=uQl><}IYd|aVf6{sm`{VPPzc%HzHXaX`NG4dH8=To95~MtX9)E?kr^&v zHoG`Nx=pUUJ5*cq0c2|GqAmBNflj~Y?wIq4fc502WSip>tmeUdB!*n5^n3oTFkLzw z?|8FYOZ54G$l!6F=Y|McaUz+o!{e|8n{}@Vx(|PP;?gFf3jmMDqn?dZ;TD~#^;Y81 z88&)*2k3SjIDYqg{O2D(@b>nGpFjN`k3gr%4BW^+2Mls_U<@yGSUzm2ruCjb`w`R^ z4?<^H<1VykLnuNFzN1GR#kk;Oy3jL<_Wx7%F3pnUNS5AF0A_w8tC};Mk)B=*hZL^3 z;g94mr3ks94Cl$Ju8iwu0F(=TKmmhCR%b~_<>Nlw-OK=m>N($;d<~(C1O^h1d33*K#wq~8KyW)7A=uJ$D=Xv-9$3)$ z$u+qYqeGUny|O4G>IlZ*ppKDFn3RsxIRr$t=YAPEy@&v zXGs{=I2wM)mpt&*_R-N_pYA1-Y1;RRBzNfMSIO0M$X~j@>z@(~`Zg(Sy#XYL@-b=} zO^&3U?;ifWQM6LYfowPo>E>&(_f$&pDH@j7Kc2bnN(f+NU#wXOTf$iguAL`7Pp<(Z z?Em4uTPLuS*}i07Urqk&jg&HfZ46Ol4F|N>lmM5^SQgRv+-%MB)oy?ll%Qn$c)X?@ zLNt4a`7Nr^eUeK-t9^o-*k^6)$E=9xz9-2ojjdW(~E`_|c+G@xxA#WHvSB%3N50Un#E(bnn-jDM^fc;ap;##%(lOp4M_2RhE;!4^kE*Fgp9*1nSVy8Md7^I4J6z!Nz%-%aI?G}a zZuqFVUOyZAx`;I#Q=L97s^lFms3Z!3tO2ECkrE$ft?x=#dSKzqPXhk9;KvOUq1c;c zJH;P()0>-2tK@>a)osDiYIT{=Dv4Q%oV)RM+}vcest2%ax=HP%5aHGdT$G@_zFzoO z|K{Jg7B*74vKD&`;ItI+&d6t;#>Vr(0L!(*gyUSN36IZr@>dQcUo?S6>eYJqvyHR$ z{+NW!1#)Z#P|%q3Gh7gRENLv>)`DR!C~ZjJ`%2hzSx4SWf6}r}uFuVMNYw)3_4S3;s!#dX=W;!4?7R-^ zBqr_?7A{z4^Q^owK@>lQwEbwy6v-$hrZfe%4r@VJBU;8oQB#1UR^FF+W3$NR4Z^V@NijEI?9wG1NsAbIGbT5suZ72| zqkc>}tUZ;&AInVWyw&f{7k%ymyikGuw%;>M_OmX2 z(%Wu2W~?dg@Au`4zHLOS8EsyKo9b+{CbJeKVyEH=ns;=mCHStow$V2JoJHzk9f{c8 zcpS(+U>&7H)*VB-7G|+al_^aHwRIZfVQL*SK!iULo zc}8{zM44V>_dt+(5*%#`+M4Zi$y1Val;2=;NE)WQK5;%*`pR11^p3}~I>`w2^;+Y_ z!}vDn)kni67;<~B-Zh2G3uTj)Byb4`^fl4&tjgY>$Uu}PG`UPxrC4lsz|mk&=q6)< zj@TSRB29?(p6tOJF*vK}yYhpvf!rE<{S9v1sE>(Blq z6*UzI!wM==Jp3RhMX-WDcOnf@KdOQx?4T0%<3daEBT0x!G?v03w;J_~G(-bTWlB-pkueJ>*_wAlI`uit(^3mO1TpG8rXklYUc2+m3!XWLwW&XF&$7qZ zG$sW+cLH;Le16kjpf{F%wC2mQ=FYk=47!^fK2lN%G-njef@&QCRtZG1F)`N9v-5x@ zX!BB{3c60=MT*s%$&T6c0l`7t(e)ss1k_Rzss%KvFO!0-y9|2Jz<}1t5SiTNE(8xV zC&5v0918OBVD8N=-oZ90z|y_pi4TZvr(z`p*uV2aHz(h?B76MV6_W?o$TFrmCd$s< zHg5yM*vy||Mj&*+k-VcTM-RzSEV3x@oY(H}Dt(GMA*ePz&|x|S`$Qx`EQ9-5}X zLN(V}rwk(Z5v^;VuF1N&tsNp#15@nFT1s)sA1EjE9FN=eu!F%Wsk6c}c8~|ld*){E z(6iBOxfTSmBOPzIbqW-(Pn6X$7`Gl?l1klVG?{SSb?OXFv?|6U|G|__Dbd^|Sh{C% zf+Q2{{+NqfO=Uf1isD?C^*d`>O$ zVz>8D;Lf=SmNPOQ9o8;8ZK*dRl`7JyXEkdE64|cHx}z5DI?|t5?vu21c`dQnm+qlX zhy6ZCu4x~{w;&N~O}m2#(^c^~$uv(o@5~LY6=a!}O8_DzFTUdX^puS0Cz&Oz3@jT> z=Yb0)CBwx7tE@FSY^oHRIdPJM=^z3;8(KrghwbOSyQg9i7^;~E$!aIh=~GvJOm9Bz zGs#JR@%exsOm|9y_^hwb?yZL#4Z~V115PDq!r`k9?g3%3~rY z`>mOib%Kz^LuJ8p@>vhVKXaQ7)n5FvsoM#in>JOl=QX%ZUrpxZ`?>hWhOw74A-j** zLK5GGcod%vj_L5wblpkh_og*ecYe^dDP>abk~3Jti2Xj`rhi{lX4V0HO(Sbe{S*N@ zAkC!Y^elUBC?&Dm_t@Q6a%gAufJVBc)mPoK=OX3FA|Y03=x8Qqr;mypt9{Jy8S9xg zCm@o33qRgr@a@1sG{O%JB`p5O(8!p`f5AIuA&&F7U}|=ZI0Z}%kc0%zcCe7Du!E6! z92ULl-n9 zMT!AU*44EKc9(QbA3Dp@6(8ozxEbY?kjpIn7^%E<`&q#j`9GzuUcyx>e@4i&(hTGeaFm;)*2{_DZPp#AC!{>WrFc~ zz1(CRyVvjcH#jBy`0)eZKYwbsVRVY)LDX|;df(u3NhdMqSX{k}eovoI47}>g9l6&#b-wNK1=< zA18qJ$LMbep{;gEv}fj(i_@g+dH13<8Tmy`=E?e6MUCghjpO;zAy3QwIA>fKF|oDL zTw2$+k;$|Yl57{A>Q{a0VVX1 zu`~wf^TB(59_9I!HLm&Vg2~y!8d>X&`>s>6eQY+f9asrC4gogQ8SlUKd8iUB8jb2}VY39XTJm=y$wZ#X(2d zcoTm9{E72Ch0~rhdXrGT-+ugtpFe-%czvP1Z|{`mEIAGG{}o3*G+f1i#k! z5u8UvKpt#?yHyD3&z+1ars~-P-TpW+%OE;jb zy5jC+DGJl7xiQgQe{O}p;dJl&)`my|cakl(uB) zIIWUuaS1seNGapGF7#f}?uzTW@elvQ4|MLhdq<*-lL{(V^}Ob@4w@>Km8fs?>C4N&hv$wM5@?oM?=-_%PGmpswg$J46tHIN?-nyOVEHQd*gkmK2E%B-f^M8o4K(8JFU^U&rB+Q^SeYu3j;8 z+)b`GX*05vLk=wr92$fNO{x}p9_hr3N6w3S=i=c!9!%o%IZeD7C@IS_+&kJW{=R%B z)Lx;Y6-7UHE#e1dE)GMwcE9Bip2kF;2&59NRodGHL8S7N zBztrLz*(}{I$W}wmlW-IaOlc6H*JT#ut<)LTB6l24fm zG@;$KUO`!&`PxN#Q#5ml@C}9#mjq2L&&>6{KuSLCy`x_@SPwqjrR(3g`&#U>tR`L} zN(tN=Jc_K}+OS9{BnI|W{-lzjHceCgx)$J22{aSoJXLaCC5P@Ik!6zUk_0$8L9sWH zzMn7oy{+Hg@HtAsUw(e$%r+rx0-e!A({cQUN>bS0T_jbB4p4?nmTL1gkif_g(&K$s zwDv|x33q3-PB@Q0U{ydqa246cv@WCcSXv{b$&fiSVrI-9_h9c=0_?e z8b&eho|QUvV^3j6WB>pl07*naR7YXL4_^YIPhDXnX>sp3^88*0^SM7V6YQV!(w$!? zGfo5Hkxj5lwVY`UplZ=%QW)#y4bzpH1QT@fktXe=p#zJKa^t9aeu&sJEX;h~+UV4X zDU&@UF{k{)-%l(dC$mai5*9WPh8a%*`p)Gfk?!U zZoWt%pWP;IeJc8<=O`S);8;h1ctN zyce5dQo=I9(SvWV(*Z3}Qgpu-5KJzANNcxuLn5=OM6C_Sp*(jcyszK&*~@reZ~gBF za(Q{qk>vmo5x%}&;X2aDi_xG$0%;eSws{FVInku;?|qs|ud=t*OSnqlcD^N9hUdJZ z+2`?j>bH~QF*AH)VRty7-A-HRT3I@^$o_*#wd_bHj*}X0TrG*ExATkkp7KBA5HY^b}ji~btl7J12Jt+19yEL zEl5uZr{aO`jFNkM^jusV)% z`U6!;LA}1Eiqry-Hz{lW-%E|k({!?fQ459O1e*fk}b)NI|JX2VaqYh!{t?$Klz z5{MZ|T&r<(w}@dw3yE~3RTg9h!RV8To2eB&a%h2fH3xEd;7qd-G8SpuO0rnZcb*5K zqf|4i-uI0ZL<1g1wULsodh7KNwkw3~I!R8-YawQZB4ByVaTDK~n4J?JWPv(OvSInS z2D3hVm9?z0jR#dF6v)xn@hb|?I@O3p7HtBw9Nuo^ey1Q3L5jYnAIRJDX zKUWQJTnnlwcUZ^xqtN>xP23)gmduz%jxDH=Ec@zMNzKtNe{hlHb$9? zTJhG}qm$2Z%>g|T!yk$o_e-##4zo3QS_i2vyDriRlggBwaTGb&)LPN58)Pyn^QF-U znzJ?58TOqu@bz@MnXNsoLH{}XA=Of_P4-jD5yCDzEEugrjf>rw@yY)%W0LvA^&^Hj z+SJ4jH4)*vdewHIkFnYHsSp}nZETI5t0ZxYbzQ#?n1BsyTKOzV?gOVu&-Fmo`={Yw zzN{;NySdcGsCPM+DNJuClZsN}xDTu{tW0x*W;_!-k(Aa6?S9?C$0YP${S`xw)!RL$ zEqnJ*URCz!O_EfZpG2S79ciygDD)*=Z_oUrT8?U4BVvV+sAdv9f z$BZG+XK&2TgSQ?c9}TA_2MyahGmV32-+XpfzpT$h+ykD{_W^lXrH~YSeU`Bi*U#rZ zH$UcaUm#{7`{_Mw;0A!)X0RU0n&z?1B)z^pkgjCb^*OKxu1sT|mVuEh?|~L5mQ54t zvK>(pNoiNA4-{l`nRRvda;%U-cC4*0xWUKdv*ZC(L zM*)#Eh|TX-az>w;Bi)~8r(pR3gaBg;j7KkLE8mg{J zH$68oN%6BF@y;L3c-|4dQ)Y~%>J*JS6p1IXIDKYW4A55Z-48-+WChGx;8@7S4a7Br zYNm>tP1Hj&#!We!q2^B85aL;pQf6F^xN8yxj%z5cGhJlZi*- zJb7Gpo}W(z)vvmS{+_~hl}XOrEhLo@*u=v+=uu<5EAYJ#TvCb|P18H!i{a{5T8-^% zp*l0Z`=s}ehVwt#RM*eYazNsgM+)XTb^o3+qoQ`&`+nE4WayX1?4A`dz@57FH!7fnc4A= zaG+z&87R{zTXQVwvPSgIpwvB|C$6VCXUX%h&%`z=P5d#FVCwMH;A9OESdPhBL_xz4 zpU+X0wAsW}q-W!qNqIbrM?PI9l0YJB!;lo&oi>OzpPvnOG7em7W8a_B2U^iGY4u5= z%4oPNg=JJLqLQggYbatdou%5b~V4_;pewooH9{a7V$Y;bYOY(!O?^(+&Vo!h~q;M$(7x z+a1_^aRt!r(1p>EvOpa0JcW;wq9@^owwTM^eQ7cz`ao}6eGR+A+wO1?N3RbI;fGH8 zO7hut#60wwWMVB1nR$a)yMOCOw!Y5@3^3XEI-RghvDRyOFSO8(o>VPtBp#OV{>g|) zYZzuYSUfWcvOZ_L@!pJe&91W*lu<%BuC=n+O(wNWC3~;?^+h)p|LjA-+|~^*6fd!7&yM3C)sMf8_x3(Epr#FCp%dMDx1wJg}hNp8i%5C4(LKUVL2TV^hhqh zO0cF4CRyk1`ND>-w5~6^BKv_{T?!@;FPR_wAh@ll>YcA>$L^Q!&FJA^u>SX*{K|46 z9O@E4Bjb}Im5-!p`mo+_{(ICz`TEZFz zkAbT8-%ojJUc|L_M354suaGtFKG}{5x_XEr8(1~7C%?RT`+@Or(x z1K)2}ow#n8o%WmPra;(c9S{b)J8YhJ7km-lS|*jWNjz8Xze)#TZ81HC&;>uE3S0NQ)UWIJapQ-iuAO|rKP;C^&@ z?Evub0qFrDQ^H;EiCE;>LapkdX85*j!YF@VkaKbA)qOP_VNJ2gcuob!QE=Bmdh2@F zX?F$phLlA{1~u9vB69ryKixC3QEYwX1{ zfqohOyOZ#YuucTei%m(I@CjmG%g z<(zTdTF;~uq<1>Spk49Xg1hMN6f8~HbU<5x(nygR1s}d>WbYmwu zjnA$<+oFmh^-qlk@6@y_MQlLVx7WnA-tu|rXKgjj*N@+D{Eb0B-`)c$vS=~ht>Z`S zI9SZoDIe%401in}y(-Qh62V^Eg`5s>l95VD1)PER^^I~QF)5+qJTh7Z&f`mC=n2R1 z!gXEv{=V?z>qM_NjwGnY-+%ud77SQQo{+$Xe1pMWk}#AB#E3)R83YbSxFGw zQF8GcDl5GPltKBxb>GOI)(L=3(Up*+D7Mj*f1I8D5y%JFiF#Fg3Ht4RqnGnXT&5#-{0SQeX5RKO>f#%)1Rk9e@X*Y zdMm}r5Ug?-x}~e3(x#Z>fmY?U>%ogi2{&1gjeq;w-zLMU6gge}2Px=mH6$u0q=d<2 z+G@p-4x#&C7-KDWB}z?fqH3Rs&^-?63M1nvFDZ;^_J#~pcgC7wG~|j&ukoSRPNsuC zIbg}cxv!3rU*O*G{r&s2$r>HZu0u*fma^aVet-KtZSUha4*dN26My>C7rwvW8}HUg zrMCO$$Qd~&Tvt<|1>^NP@%{c5*=nme4k>``cekoC($tX;`CR|@&ws`1d<=h&sN%Z~Z)^Kst`!be(ESlwvI~j3icIX~OFy*O0w4DQ*sQw0lZ? zJxwP+S(_D%UKxoBDr=L*rH3|gAP^HsX@0HR+Fg8|h>|XYh{OZ6HQQQiC`Sp?p@I0m z?+ZsdMgaiP+V@54{rJO8x}sH*$Ib6y#iUTuic`C!km>%rnHkNZ}W0(~$;V`PVDl63FQpW|{Cv?`y? zTWM}773osThq#@1h@4ade}np=H^#`7m<{)hyGUc0(NtF7n`DAzyJvfs_m~pi_w8R# zL?HD7cY*>{1gV=9yUolZFKuu1CN#oaGJ4OtcHf$yom}cGW^AbwjBID16Y&NU5*oNw zP|Cw)O$m6tQ12Txkm~HZW)jo;`}!$T)hv6~;pyXDD67{EP{Zr|4c}F~!}&OnxZxzm z`{&=#`-xI)O4yJyq4f)mGfMdqa#TbQ69HK>E?PrQvL^H@2;5X&D2FyVI4SW_r0z)2 z%snObeaW&|I z=(MAc14v2<=W*aT)Igl_FtViigj{Pw?G1EfB;~tXXiCXt(k$27oRu6o&~ouIuKPkJ z8Q&ny3Bpn17z->c1->n`uh$D*4=N>R9VJNt^?tv{I6Wobto&4%(lUNe)A>_21MvApV zP7))Z=O_zS!p?3AB_rff2-@ajhf@3dC^Z~jqez14e(&w%Y;q3`V`Y3UV)r^vvO#`; zDB?%EN)qko2^#VAL)}y3J)3%EJ?KxEgJ~$kG>7yLV zKEoIaNr_a7GOlY3)WkFk2?w3N99NhofRo#s$%670-->+=Gmi5J^e|P7u#i7jDV`Ux z@n`zbX31bNA(+vF0x`FaS{U@K=^@2h3f61_N6+W3b(L-xc|8!$9c?g)eQMSf^D zl}4JT+)-93>&FJxqx;$F4`e$ulXyjq{$z)?*etWdf8(aFsi*|9ON^fGHHor9GZgHQ zUcoO*j|`z+>lVb2cK)1=nqqpd3hr2;M3Xf00l!d?K`F@SXm{6%H{;g*IA_bWX>O2T zRU{)Io4k=ISmXnYj#e-EJeehAa>TL6mJun*9~W947U_bHUoStoO=i5f?AvM zly%fhNir0G$7oUtbZk>`Q>11ns~(+|$NiM8#G+}vNzIgH2c>mPAHQ}D4fN>x)dX%+!F{bxo(XArdsHyn+x zkq$QssOFg|V{ERz3&z&C_sP_0KX)}Lu14$idj?I2w^EkqKPsi*{eFA++bRnHSd4E9 zwrJ4LoMtLX#2lJ&aV?}rf&J9>QxY`jj+!zhaxWU{F|Lk>5bI#l2OaZXqBZONlNXyi z5>xE5?%iRN(2`8Ak+n!F2V{~SFQ@pD{(1@Yjqnt>zLDH^pW z3D$=L1leRZ94vQ|!Byh1Pvi!2rjPWRF@};^2o}Ig|G3u>@UgkJ9z;ILmZBm4GwOD~7Cu5=!++1EcUQ*4$_KZuzO5MhrYdV9AcF*PZnfL|RW%3Cwem`k=-HWWUiswd$ zEVt6Hm?RTxtW#O`kVGKrlW%RvUz6kaWr7rHTyJObImn?$*rf~?H$GFS!X-o} z#LtFRa*S>gyo{6%k>1X_tgm z4NI%HVw;z+tk9X3?kZ2(_XqmX7F5I{20m_2OSi=27duLi|J-mWi0tj->oo-mR-ND+ zuP^l46-_#)uD4bvpUxy^tvmSiOoS6-|Gm&M;`|`9= z#A|qjK*4#l$As2gF`;`&$m|t~+TZJXYE*QqsNX$Y*IpMh-b57YBHx$*EGr??DzN9!PEr|WqB+*4S7sJ5?KKx zAGmbmv;4avoods>N@A|e-3_Nq}uolnRvCl0AKkYi2 z@*K<)zkzL>(ZTU>6&LvUmoVpPgEO3c1#=;v9tLjv`PcRLb*7?0d=04_6PI~1VF!&} zS2<21*55Y*w8r&i(=l_~7M|m0(j)OU=H$eQ=4w#21NA6O@#xs^)`t20eCGPEYXU`T z%`$=XwN536F}c0A-@|JZnVL({hj|>mEU?xU>QVf1X%s|4(nu>mvbpqheS2$n<9+cExCeI4} z<7o}B>pV%u`R|&5Y$ZL6Y2Rb+lka6Tt4Q~^K`&(;hZDpIZSwp-%41oT9uE>;N{_n2 zd^W77wb*E|dz(FEc_=3`5n8`NJxc+tA=Ogn-s1W7ydr&1gpYNigFlwAKM*a!-ScNm zCimB@5D9zkg7cp4UHE&nwT)r}o*9IU&J7(2VA;Qa|NR@k1%-q(C8beX>+Ma6`Sr2O z$^X-T`p@`J|MCCDKmF4`;$Qvi{{i1W?=j(k)a>l?y)^bk1qGXoz6UA#I@~Gorp~$G z^?Kp1H)<2jdT}X3DD>3KY-m=`aL_SOPT5)SyYQtcsl0b2WaN@?-PfEaQsp&7GxM4w z5Yt}keSx{-JYTr43ymB8{O5nbU;n?KC?)#==QxUoM%khr3ye|p^o>Sbye;09%Nb}5 z#53pp(_*@AAkj!2y9~QUc>Loc$?+R;aPlLG%D&_F4*l~0LSgJ|)3DYOTGuWWW#oLI zwzn9njqYKZ(@ZGmiSK{@3%zE!sbnQX$a}PtJrSd}+q>lVUFD%|@?J}^#LnUSutSA~ zy@`pgKbR@yP9Hg@f-@en)H_PXV| zaX|kIT?PLs4q-P>RU1UnF3XA=p|N2*y%!O9OA2S*bV@0> z>f1?t@An(O{q~zayKmJsi|jP#4DM2B)c$1QkFc%e&zkJZNjdasqIN~9Q>_g@fBwXI zo;c6b@5fc%`YABb%Sj@aJB>A`2i!7kb8liZDN@DOrbFD*;(BWLpTG|ij(j+HBBh}x zmus8?s&*{#hPSs#MU-Df-Td4vn9;m$)Ssq}VFF1O68w}`rB8>C59#HP!_A}6B@GRR z8_yFd@h~2)eGf`d{qHQ9CrH;gFrkK?<6klm7)DE9-+rUR!U^J-|iAa z=ruAbsAW2&oRE*=G-GbGm767RZ}TYT?H*~f#L=uG(vj~E3LLE`yALxZr;<&wuV)lO zXBIWh^173D_`Q+l^`Xhc5)v`G)fL)X829c7GhO|y>mmMkr7hYs<`9((y+;P_nY(zG zM-2oVMHD+yD+2wxMNVE$F_mXq18!-GQgQN>&M)_}-<&}_a+_R1VPvr9jpmI>(tU|6 z6u6HNX2VXW6o{7X4$qf<{x%irEgY~C+I{1F-IH&XG#>@cCh;Q+B&v)ufZu=r8(yy$ z{{6rI_YUW2O>@-DpQ!s3 zASC4Dz}>ox5?`m}xArbXh*m}Wo~1*Sj)L0c5JPI1vw*;yGPr5Ms}F@yHw2|>Dd}06 z+F2K-A@@mISSNizN63?Q0ohKXvN#r}pfHZCp)+j|TI?buHRi+(AxeWLY6HivAe3S; zy4I0qWUnm-a+Px6s+SPIib&X`QKNw{lr`~Nnm4U?@unD^L|k#=#~>1*KuV~+yY$XE z-0d4+@y-Y-=#5k92}ddZSQ=3VdbnG27wmAGIH9B>C;BdAGJ^Sk@-sm-5K_8&JLEl# zO;e;$Qpia$Q)SEO=J_F|UueR88UYw`a6W_vLk&nQm`CbBVstdQhx8o^2}-F$YI3dh zLe7Uw3VYXs+UVM5?L12Nxw?K=u2n*9f|$%j4SQ;o%cY<*6hAp@+{F(7-1ikQpV?oh z1mGRW>A-zeoUhYguLCAF8457~an|5B?IMxOgK{P?OL1GWPD=qC<?@!32Mp<_vYh7ikIZy=@eb*?yH1-0Mkz2ZCzh{uS!b|b)uQIYV}KHCA# z?kS+_fuKt+PU}-~Dw4Z|yE0NPLV;-w_w|iLn9#{47dwu_sZA!;8|HjPL8k1}g7bW# zdYIvtu4P53aqMyrB!cw6f1+zd5Mp#(VO*iZ3GY+jo zwi*3Zc9@X+<~V=I=c0>W%1MccSLJ@S8SU6d zN;yTc%CZJiE=u^xU?ly2NWhooFNka*$r`O1^R75tPUKUzH3Nj1LCiR8-_%1y$r(Lq z!JL{~z3Ew;E_!JEFFKo9Dt%=c$iSHg7ILbDNSDv!SS! zA$#&pGV5o-rpwRLVQ(xN{*z%ZU`6}fhv|dWQ=z_CjdPIecDNkNi+Bq>rVgT*hcP*G=1*?kWZ-{)#u9YxyhhZ&}$c(r+ip)$a!nhJp!dF z(X@YlvO&i3P5yneqLs2FJY&sr%S5>*0_b$Ji$6ko~BgoW(mYG*e5&=aVK0 zi9O_2uo_zKR*%x_^+Ih;uyG2~w{>x_t@}t)4SH1CXgEisY*2Ti!Eutxq&cD7NFck< zHKk~9eiEUEUb=&M-t?>kD;m^*v86GdHdqq>fs7(bpFWN4R|b20h6a0{wqM_V(Iwr< z(ClX#^3*<;L$RmFA*8k5I!Zo~ie|s)vm3kA=@FPUci&chv27yqnLNk*Hqnwo7?1Cb zzkl_H#YtD3rsT!LH0}|6FyN2uB1_UOwk{{QSIZE+V8;7>;V*yr3;x|d{f{_~@{sJr zL)N-x+jCitW75v=((8XEwP>w|>DrtdV}7Yfm$HLx@?zg6zA4=E{c&X%p@dsd5l{#m1m`bVGHO3eJDuUqMI4?p1Q@!f!TR=>j&%tLdIOlod= z8NQ$)|Bd*0o0txdo8fwC4YMCud?F_f5)tlt=>Zxb6p4-Cj;1OWYy*hHb+XBqHfzuG z(99JMla!b>5)a)b*&De!2EjKvl~d!;(OEF�}i!_aC|7zON9XEeCOq&noF5JzifP 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

    V>@q~ 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

    #0FZ;gx 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℞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 O0000 literal 0 HcmV?d00001 diff --git a/themes/book/theme.ini b/themes/book/theme.ini new file mode 100644 index 0000000..e9f7bab --- /dev/null +++ b/themes/book/theme.ini @@ -0,0 +1,33 @@ +; $Name:Книга (800x600)$ +scr.w = 800 +scr.h = 600 +scr.gfx.bg = book.png +scr.col.bg = white + +scr.gfx.x = 18 +scr.gfx.y = 36 +scr.gfx.w = 344 +scr.gfx.h = 410 +scr.gfx.mode = float + +win.x = 400 +win.y = 18 +win.w = 350 +win.h = 550 + +win.col.fg = #000000 +win.col.link = #a02c00 +win.col.alink = #606060 + +menu.button.y = 576 + +inv.x = 30 +inv.y = 460 +inv.w = 320 +inv.h = 100 + +inv.col.fg = #000000 +inv.col.link = #902c00 +inv.col.alink = #606060 + +inv.mode = horizontal diff --git a/themes/default-large/theme.ini b/themes/default-large/theme.ini new file mode 100644 index 0000000..1db8e63 --- /dev/null +++ b/themes/default-large/theme.ini @@ -0,0 +1,8 @@ +; $Name: Стандартная (800x600)$ +scr.w = 800 +scr.h = 600 +win.h = 568 +inv.h = 568 +scr.gfx.h = -1 +menu.button.y = 576 + diff --git a/themes/default/click.ogg b/themes/default/click.ogg new file mode 100644 index 0000000000000000000000000000000000000000..e87eb91cd1374b6fe37575b217f0db73b52239e8 GIT binary patch literal 5637 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 literal 0 HcmV?d00001 diff --git a/themes/default/click.wav b/themes/default/click.wav new file mode 100644 index 0000000000000000000000000000000000000000..af3e8d45af6830c166c336714de2a43f26805f42 GIT binary patch literal 14136 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 F{{xu-c|rgH literal 0 HcmV?d00001 diff --git a/themes/default/theme.ini b/themes/default/theme.ini index ba0e726..13c6989 100644 --- a/themes/default/theme.ini +++ b/themes/default/theme.ini @@ -1,9 +1,12 @@ +; $Name: Стандартная (800x480)$ scr.w = 800 scr.h = 480 scr.gfx.bg = bg.png scr.col.bg = white scr.gfx.use = use.png scr.gfx.pad = 16 +scr.gfx.mode = embedded +win.gfx.h = -1 ;unlim win.x = 48 win.y = 8 @@ -11,12 +14,11 @@ win.w = 500 win.h = 448 win.fnt.name = sans.ttf win.fnt.size = 16 -win.gfx.h = 200 win.gfx.up = aup.png win.gfx.down = adown.png -win.col.fg = #000000 -win.col.link = #0000FF -win.col.alink = #FF0000 +win.col.fg = black +win.col.link = #b02c00 +win.col.alink = #606060 inv.x = 620 inv.y = 8 @@ -26,19 +28,22 @@ inv.fnt.name = sans.ttf inv.fnt.size = 16 inv.gfx.up = aup.png inv.gfx.down = adown.png -inv.col.fg = #FFFFFF +inv.col.fg = #CCCCCC inv.col.link = #CCCCCC inv.col.alink = goldenrod +inv.mode = vertical -menu.col.bg = #FFFFFF -menu.col.fg = #000000 -menu.col.link = #0000FF -menu.col.alink = #FF0000 -menu.col.alpha = 180 -menu.col.border = #000000 +menu.col.bg = white +menu.col.fg = black +menu.col.link = blue +menu.col.alink = red +menu.col.alpha = 220 +menu.col.border = black menu.bw = 1 menu.fnt.name = sans.ttf menu.fnt.size = 15 menu.gfx.button = menu.png -menu.buttonx = 776 -menu.buttony = 456 +menu.button.x = 776 +menu.button.y = 456 + +snd.click = click.wav ; click.ogg diff --git a/themes/original/theme.ini b/themes/original/theme.ini new file mode 100644 index 0000000..1d7000a --- /dev/null +++ b/themes/original/theme.ini @@ -0,0 +1,7 @@ +; $Name:Старая (800x480) +win.col.fg = black +win.col.link = blue +win.col.alink = red +scr.gfx.mode = fixed +scr.gfx.h = 200 +