aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backends/platform/ds/arm9/makefile.in350
-rw-r--r--backends/platform/symbian/res/scummvm.cer21
-rw-r--r--backends/platform/symbian/res/scummvm.key15
-rw-r--r--backends/platform/wince/README-WinCE.txt616
-rw-r--r--common/keyboard.h266
-rw-r--r--dists/pred.dic7986
-rwxr-xr-xdists/slackware/scummvm.SlackBuild.in58
-rw-r--r--engines/agi/wagparser.cpp229
-rw-r--r--engines/agi/wagparser.h288
-rw-r--r--engines/lure/fights.cpp583
-rw-r--r--engines/lure/fights.h111
-rw-r--r--engines/lure/sound.cpp37
-rw-r--r--engines/lure/sound.h41
-rw-r--r--sound/rate_arm.cpp431
-rw-r--r--sound/rate_arm_asm.s692
15 files changed, 11724 insertions, 0 deletions
diff --git a/backends/platform/ds/arm9/makefile.in b/backends/platform/ds/arm9/makefile.in
new file mode 100644
index 0000000000..e7a7da4a59
--- /dev/null
+++ b/backends/platform/ds/arm9/makefile.in
@@ -0,0 +1,350 @@
+#BUILD_PLUGINS = 1
+#libndsdir = $(DEVKITPRO)/libnds
+libndsdir = /home/neil/devkitpro/libnds
+
+# Select the build you want by uncommenting one of the following lines:
+
+DS_BUILD_A = 1
+#DS_BUILD_B = 1
+#DS_BUILD_C = 1
+#DS_BUILD_D = 1
+
+# Uncomment the following line to build in support for MP3 audio
+# using libmad:
+USE_MAD = 1
+
+# Uncomment the following line to enable support for the
+# ace DS Debugger (remembering to make the same change in the arm7 makefile):
+#USE_DEBUGGER = 1
+# NOTE: The header and libs for the debugger is assumed to be in the libnds
+# folder.
+
+VPATH = $(srcdir)
+
+# Command to build libmad is:
+# ./configure --host=arm-elf --enable-speed --enable-sso -enable-fpm=arm CFLAGS='-specs=ds_arm9.specs -mthumb-interwork'
+
+
+ifdef DS_BUILD_A
+ DEFINES = -DDS_SCUMM_BUILD -DDS_BUILD_A
+ LOGO = logoa.bmp
+ DISABLE_HE = 1
+ #DISABLE_SCUMM = 1
+ DISABLE_SCUMM_7_8 = 1
+ DISABLE_AGOS = 1
+ DISABLE_SKY = 1
+ DISABLE_SWORD1 = 1
+ DISABLE_SWORD2 = 1
+ DISABLE_QUEEN = 1
+ DISABLE_SAGA = 1
+ DISABLE_KYRA = 1
+ DISABLE_GOB = 1
+ DISABLE_LURE = 1
+ DISABLE_CINE = 1
+ DISABLE_AGI = 1
+ DISABLE_TOUCHE = 1
+ DISABLE_PARALLACTION = 1
+ BUILD=scummvm-A
+endif
+
+ifdef DS_BUILD_B
+ DEFINES = -DDS_NON_SCUMM_BUILD -DDS_BUILD_B
+ LOGO = logob.bmp
+ DISABLE_HE = 1
+ DISABLE_SCUMM = 1
+ DISABLE_SCUMM_7_8 = 1
+ DISABLE_AGOS = 1
+ #DISABLE_SKY = 1
+ DISABLE_SWORD1 = 1
+ DISABLE_SWORD2 = 1
+ #DISABLE_QUEEN = 1
+ DISABLE_SAGA = 1
+ DISABLE_KYRA = 1
+ DISABLE_GOB = 1
+ DISABLE_LURE = 1
+ DISABLE_CINE = 1
+ DISABLE_AGI = 1
+ DISABLE_TOUCHE = 1
+ DISABLE_PARALLACTION = 1
+ BUILD=scummvm-B
+endif
+
+ifdef DS_BUILD_C
+ DEFINES = -DDS_NON_SCUMM_BUILD -DDS_BUILD_C
+ LOGO = logoc.bmp
+ DISABLE_HE = 1
+ DISABLE_SCUMM = 1
+ DISABLE_SCUMM_7_8 = 1
+ #DISABLE_AGOS = 1
+ DISABLE_SKY = 1
+ DISABLE_SWORD1 = 1
+ DISABLE_SWORD2 = 1
+ DISABLE_QUEEN = 1
+ DISABLE_SAGA = 1
+ #DISABLE_KYRA = 1
+ #DISABLE_GOB = 1
+ DISABLE_LURE = 1
+ DISABLE_CINE = 1
+ DISABLE_AGI = 1
+ DISABLE_TOUCHE = 1
+ DISABLE_PARALLACTION = 1
+ BUILD=scummvm-C
+endif
+
+ifdef DS_BUILD_D
+ DEFINES = -DDS_NON_SCUMM_BUILD -DDS_BUILD_D
+ LOGO = logoc.bmp
+ DISABLE_HE = 1
+ DISABLE_SCUMM = 1
+ DISABLE_SCUMM_7_8 = 1
+ DISABLE_AGOS = 1
+ DISABLE_SKY = 1
+ DISABLE_SWORD1 = 1
+ DISABLE_SWORD2 = 1
+ DISABLE_QUEEN = 1
+ DISABLE_SAGA = 1
+ DISABLE_KYRA = 1
+ DISABLE_GOB = 1
+ DISABLE_LURE = 1
+ #DISABLE_CINE = 1
+ #DISABLE_AGI = 1
+ DISABLE_TOUCHE = 1
+ DISABLE_PARALLACTION = 1
+ BUILD=scummvm-A
+endif
+
+
+ARM7BIN := -7 $(CURDIR)/../../arm7/arm7.bin
+ICON := -b ../../../logo.bmp "ScummVM;By Neil Millstone;"
+
+CC = arm-eabi-gcc
+CXX = arm-eabi-g++
+
+CFLAGS = -Wno-multichar -Wall -Os\
+ -Wno-multichar -mcpu=arm9tdmi -mtune=arm9tdmi \
+ -mcpu=arm9tdmi -mtune=arm9tdmi -fomit-frame-pointer\
+ -ffast-math -mthumb-interwork
+
+ifdef USE_DEBUGGER
+ DEFINES += -DUSE_DEBUGGER
+ CFLAGS += -g
+endif
+
+CXXFLAGS= $(CFLAGS) -Wno-non-virtual-dtor -Wno-non-virtual-dtor \
+ -fno-exceptions -fno-rtti
+
+ASFLAGS = -mcpu=arm9tdmi -mthumb-interwork
+DEFINES += -D__DS__ -DNDS -DARM9 -DNONSTANDARD_PORT -DDISABLE_FANCY_THEMES -DDISABLE_DEFAULT_SAVEFILEMANAGER
+ifdef USE_MAD
+ DEFINES += -DUSE_MAD
+endif
+
+
+LDFLAGS = -specs=ds_arm9.specs -mthumb-interwork -mno-fpu -Wl,-Map,map.txt
+
+INCLUDES= -I./ -I$(portdir)/$(BUILD) -I$(srcdir) -I$(srcdir)/common -I$(portdir)/source -I$(portdir)/source/compressor -I$(portdir)/source/fat \
+ -I$(srcdir)/backends/fs -I$(srcdir)/backends/fs/ds -I$(portdir)/data -I$(libndsdir)/include -I$(portdir)/../commoninclude\
+ -I$(srcdir)/scumm -I$(libndsdir)/include -I$(libndsdir)/include/nds -I$(srcdir)/engines -I$(portdir)/source/mad\
+ -I$(portdir)/source/libcartreset
+
+
+LIBS = -lm -L$(libndsdir)/lib -L$(portdir)/lib -lnds9
+ifdef USE_MAD
+ LIBS += -lmad
+endif
+ifdef USE_DEBUGGER
+ LIBS += -ldsdebugger -ldswifi9
+endif
+
+#-Lscumm -lscumm -Lbase -lbase -Lcommon -lcommon -Lgraphics -lgraphics -Lgui -lgui -Lsound -lsound
+EXECUTABLE = scummvm.elf
+PLUGIN_PREFIX =
+PLUGIN_SUFFIX = .plg
+PLUGIN_EXTRA_DEPS = plugin.x plugin.syms scummvm.elf
+PLUGIN_LDFLAGS = -nostartfiles -Wl,-q,-Tplugin.x,--just-symbols,scummvm.elf,--retain-symbols-file,plugin.syms -L$(ronindir)/lib
+MKDIR = mkdir -p
+RM = rm -f
+RM_REC = rm -rf
+AR = arm-eabi-ar cru
+RANLIB = arm-eabi-ranlib
+OBJCOPY = arm-eabi-objcopy
+AS = arm-eabi-as
+HAVE_GCC3 = true
+DISABLE_SCALERS = true
+
+ifdef BUILD_PLUGINS
+DEFINES += -DDYNAMIC_MODULES
+PRE_OBJS_FLAGS = -Wl,--whole-archive
+POST_OBJS_FLAGS = -Wl,--no-whole-archive
+endif
+
+PORT_OBJS := $(portdir)/source/blitters.o $(portdir)/source/cdaudio.o $(portdir)/source/dsmain.o \
+ $(portdir)/../../../fs/ds/ds-fs.o $(portdir)/source/gbampsave.o $(portdir)/source/scummhelp.o\
+ $(portdir)/source/osystem_ds.o $(portdir)/source/portdefs.o $(portdir)/source/ramsave.o\
+ $(portdir)/source/scummconsole.o $(portdir)/source/touchkeyboard.o $(portdir)/source/zipreader.o\
+ $(portdir)/source/dsoptions.o $(portdir)/source/keys.o
+
+DATA_OBJS := $(portdir)/data/icons.o $(portdir)/data/keyboard.o $(portdir)/data/keyboard_pal.o $(portdir)/data/default_font.o
+
+
+COMPRESSOR_OBJS := $(portdir)/source/compressor/lz.o
+
+FAT_OBJS := $(portdir)/source/fat/disc_io.o $(portdir)/source/fat/gba_nds_fat.o\
+ $(portdir)/source/fat/io_fcsr.o $(portdir)/source/fat/io_m3cf.o\
+ $(portdir)/source/fat/io_mpcf.o $(portdir)/source/fat/io_sccf.o\
+ $(portdir)/source/fat/io_m3sd.o\
+ $(portdir)/source/fat/io_nmmc.o $(portdir)/source/fat/io_scsd.o \
+ $(portdir)/source/fat/io_scsd_asm.o \
+ $(portdir)/source/fat/io_njsd.o \
+ $(portdir)/source/fat/io_mmcf.o \
+ $(portdir)/source/fat/io_sd_common.o \
+ $(portdir)/source/fat/io_m3_common.o \
+ $(portdir)/source/fat/io_dldi.o \
+ $(portdir)/source/fat/m3sd.o
+
+
+# $(portdir)/source/fat/io_cf_common.o $(portdir)/source/fat/io_m3_common.o\
+# $(portdir)/source/fat/io_sd_common.o $(portdir)/source/fat/io_scsd_s.o \
+# $(portdir)/source/fat/io_sc_common.o $(portdir)/source/fat/io_sd_common.o
+
+LIBCARTRESET_OBJS := $(portdir)/source/libcartreset/cartreset.o
+
+
+
+OBJS := $(DATA_OBJS) $(LIBCARTRESET_OBJS) $(PORT_OBJS) $(COMPRESSOR_OBJS) $(FAT_OBJS)
+
+
+
+MODULE_DIRS += .
+
+ndsall:
+ @[ -d $(BUILD) ] || mkdir -p $(BUILD)
+ make -C ./$(BUILD) -f ../makefile scummvm.nds
+
+include $(srcdir)/Makefile.common
+
+clean:
+ $(RM) $(OBJS) $(EXECUTABLE)
+ rm -fr $(BUILD)
+
+plugin_dist :
+ find . -name '*.plg' | while read p; do \
+ sh-elf-strip -g -o "`basename \"$$p\" | tr '[:lower:]' '[:upper:]'`" "$$p"; \
+ done
+
+dist : SCUMMVM.BIN plugins plugin_dist
+
+
+#---------------------------------------------------------------------------------
+# canned command sequence for binary data
+#---------------------------------------------------------------------------------
+#define bin2o
+# bin2s $< | $(AS) -mthumb -mthumb-interwork -o $(@)
+# echo "extern const u8" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_raw_end[];" > `(echo $(<F) | tr . _)`.h
+# echo "extern const u8" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_raw[];" >> `(echo $(<F) | tr . _)`.h
+# echo "extern const u32" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`_raw_size";" >> `(echo $(<F) | tr . _)`.h
+#endef
+
+
+define bin2o
+ bin2s $< | $(AS) -mthumb -mthumb-interwork -o $(@)
+ echo "extern const u8" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_end[];" > `(echo $(<F) | tr . _)`.h
+ echo "extern const u8" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"[];" >> `(echo $(<F) | tr . _)`.h
+ echo "extern const u32" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`_size";" >> `(echo $(<F) | tr . _)`.h
+endef
+
+
+#define bin2o
+# @echo $(*)
+# cp $(<) $(*).tmp
+# $(OBJCOPY) -I binary -O elf32-littlearm -B arm \
+# --rename-section .data=.rodata \
+# --redefine-sym _binary_$(subst .,_,$(subst /,_,$(*)))_tmp_start=$(notdir $*)\
+# --redefine-sym _binary_$(subst .,_,$(subst /,_,$(*)))_tmp_end=$(notdir $*)_end\
+# $(*).tmp $(@)
+# echo "extern const u8" $(notdir $*)"[] __attribute__ ((aligned (4)));" > $(*).h
+# echo "extern const u32" $(notdir $(*))_size[]";" >> $(*).h
+#
+# echo $(*).h
+# rm $(*).tmp
+#endef
+
+##############
+# Replacement rule for the one in makefile.common
+##############
+ifndef HAVE_GCC3
+# If you use GCC, disable the above and enable this for intelligent
+# dependency tracking.
+.cpp.o:
+ $(MKDIR) $(*D)/$(DEPDIR)
+ $(CXX) -Wp,-MMD,"$(*D)/$(DEPDIR)/$(*F).d2" $(CXXFLAGS) $(CPPFLAGS) -c $(<) -o $*.o
+# $(ECHO) "$(*D)/" > $(*D)/$(DEPDIR)/$(*F).d
+ $(CAT) "$(*D)/$(DEPDIR)/$(*F).d2" >> "$(*D)/$(DEPDIR)/$(*F).d"
+ $(RM) "$(*D)/$(DEPDIR)/$(*F).d2"
+else
+# If you even have GCC 3.x, you can use this build rule, which is safer; the above
+# rule can get you into a bad state if you Ctrl-C at the wrong moment.
+# Also, with this GCC inserts additional dummy rules for the involved headers,
+# which ensures a smooth compilation even if said headers become obsolete.
+.cpp.o:
+ $(MKDIR) $(*D)/$(DEPDIR)
+# $(CXX) -Wp,-MMD,"$(*D)/$(DEPDIR)/$(*F).d",-MQ,"$@",-MP $(CXXFLAGS) $(CPPFLAGS) -c $(<) -o $*.o
+ $(CXX) -MMD -MF "$(*D)/$(DEPDIR)/$(*F).d" $(CXXFLAGS) $(CPPFLAGS) -c $(<) -o $*.o
+endif
+
+
+#---------------------------------------------------------------------------------
+
+#---------------------------------------------------------------------------------
+%.o : %.pcx
+#---------------------------------------------------------------------------------
+ @echo $(notdir $<)
+ @$(bin2o)
+
+#---------------------------------------------------------------------------------
+%.o : %.bin
+#---------------------------------------------------------------------------------
+ @echo $(notdir $<)
+ @$(bin2o)
+
+#---------------------------------------------------------------------------------
+%.o : %.raw
+#---------------------------------------------------------------------------------
+ @echo $(notdir $<)
+ @$(bin2o)
+
+#---------------------------------------------------------------------------------
+%.o : %.pal
+#---------------------------------------------------------------------------------
+ @echo $(notdir $<)
+ @$(bin2o)
+
+#---------------------------------------------------------------------------------
+%.o : %.map
+#---------------------------------------------------------------------------------
+ @echo $(notdir $<)
+ @$(bin2o)
+
+#---------------------------------------------------------------------------------
+%.o : %.mdl
+#---------------------------------------------------------------------------------
+ @echo $(notdir $<)
+ @$(bin2o)
+
+#---------------------------------------------------------------------------------
+%.nds: %.bin
+ @echo ndstool -c $@ -9 scummvm.bin $(ARM7BIN) -b ../../$(LOGO) "$(shell basename $@);ScummVM @VERSION@;DS Port"
+ ndstool -c $@ -9 scummvm.bin $(ARM7BIN) -b ../../$(LOGO) "$(shell basename $@);ScummVM @VERSION@;DS Port"
+ dsbuild $@ -l ../ndsloader.bin
+
+ padbin 16 $(basename $@).ds.gba
+
+#---------------------------------------------------------------------------------
+%.bin: %.elf
+ $(OBJCOPY) -S scummvm.elf scummvm-stripped.elf
+ $(OBJCOPY) -O binary scummvm-stripped.elf scummvm.bin
+
+#%.o: %.s
+# $(MKDIR) $(*D)/$(DEPDIR)
+# $(CXX) -Wp,-MMD,"$(*D)/$(DEPDIR)/$(*F).d",-MQ,"$@",-MP $(CXXFLAGS) $(CPPFLAGS) -c $(<) -o $*.o
+
diff --git a/backends/platform/symbian/res/scummvm.cer b/backends/platform/symbian/res/scummvm.cer
new file mode 100644
index 0000000000..70b765e6b4
--- /dev/null
+++ b/backends/platform/symbian/res/scummvm.cer
@@ -0,0 +1,21 @@
+-----BEGIN CERTIFICATE-----
+MIIDXTCCAxqgAwIBAgIBADALBgcqhkjOOAQDBQAwgZIxEDAOBgNVBAoTB1NjdW1t
+Vk0xfjB8BgNVBAMTdVNjdW1tVk0gUzYwdjM3OThiOTk0MDg2OTFhZThlZWM2N2Zl
+NGUxYmZjOTQ1YTI0YjRmYjZmMTlmMGJiNzE2N2FjYWEwYzBlNjc0OTM3MmEyY2Qw
+YjNiMmY5MWRmMGQyNTQwZjdlYzc0YzllNzhhYWJlMzkwZTAeFw0wNzA2MTAxOTQ4
+NTJaFw0wODA2MDkxOTQ4NTJaMIGSMRAwDgYDVQQKEwdTY3VtbVZNMX4wfAYDVQQD
+E3VTY3VtbVZNIFM2MHYzNzk4Yjk5NDA4NjkxYWU4ZWVjNjdmZTRlMWJmYzk0NWEy
+NGI0ZmI2ZjE5ZjBiYjcxNjdhY2FhMGMwZTY3NDkzNzJhMmNkMGIzYjJmOTFkZjBk
+MjU0MGY3ZWM3NGM5ZTc4YWFiZTM5MGUwggG3MIIBKwYHKoZIzjgEATCCAR4CgYEA
+ydXBoDldKAiq3DmfGPwReY9qHEMEh4AyuK5N4M7PvCSYUWU6sWp9PQJ1DDXOm54o
+k8IicM9/dmNdQVAGah2Oi5wizbaYV3HkFufLQOQdaOFg7uclJKp+4cnPsG8lz4DS
+j6o9kRxANZ9vJgE7qxWG5HnEPNm/l0mDbyWbtbAT//sCFQDCZT2JjR+U+o2orfUL
+tcojrwdLSQKBgGdx5eoIaGOxIXgP7ttNdL+7qOYMJD2wI93o5eRiLOaTme276pr3
+oYv3VVRZJa6UXD298b705ia/XQqO6KA9QJgPMjJnwD/8ydcZyZqmX6sNpv6dc7AN
+y/6BJN6DO0xUc9BTkQr4cYBhfkc1mYTBzxOj7bi4aATBjcCXzDXXyT2bA4GFAAKB
+gQCXsapLABnAVfz60pOQt+Kcl3x+/Rz+vXoItLg3O8cVjooi/q0uaaXF/AnO2njb
+lLHbQX3zmv/+tvD2PSyFtgNgscyTf/EECqWMK94Lb0/Jw1rvdNO86eWzsW7UzArF
+5KjJbUn64+PTSU8m7GTqGN4NFh6yFBk//Z2ljy+Zt0WZBDALBgcqhkjOOAQDBQAD
+MAAwLQIUJUCWx57QyGsiPM5w5qvX3ZYF0/kCFQC47QWyrzi4dr2y2iDNWsln7La4
+Qw==
+-----END CERTIFICATE-----
diff --git a/backends/platform/symbian/res/scummvm.key b/backends/platform/symbian/res/scummvm.key
new file mode 100644
index 0000000000..62e3d3858c
--- /dev/null
+++ b/backends/platform/symbian/res/scummvm.key
@@ -0,0 +1,15 @@
+-----BEGIN DSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: DES-EDE3-CBC,AA4358B4EE40C19C
+
+OyPKZgptp6jQoGEckxKO4fHS9IL72F0rHduv4qguYHdKeyjREgWDN6+/QhI3SQWu
+9bch/oyo/mhO6ZcLjOukBVaygYNw8VTnuEUITmPPrLo7Hcrs12y5jr6MCJ1XBho8
+K0eBwJpqEYFlRZcGqLhJVcPbREEZAOY522MsnT4V3Sa2yerK0AWMSXSTjWRPVxlo
+RdqB7vdU/zp3FZvV1gXp+aAOb0WoUbZZYo5r4JnHS+6DGHJfWtXucz4VhcrYxLa8
+xNE3WvTvnIyudG1Yc4J5pl0fpS7wBHQHFtqv2ncRWhY49r9RNR6bfMLZULZj8mwo
+QRYkUeaAkdEkTiYlVl/KQ1i3Hh1qupaQwxF/WqCtfbvLA6KlzYLllTnGwsRHujid
+f97fGt1z8uWGtzDWQzKW3nY0I2psAA/bCYwL88G1aOPEyp4Ql1lkyxRm4Tw7Zu5M
+pF09dAgkFVvPH5Bn7o05ZS9ruNhF5K/5QNg3WTVDhZEqkqiXWRGXaEhc6ZfoK/+H
+ne1d3+QfKEX8rxAtjX1hVNkNG1ivmIExpa45wUmSE2pOIj31ny0gK1tCv4mdgEDL
+elR3M/oAw0BdxBn9LqmDaQ==
+-----END DSA PRIVATE KEY-----
diff --git a/backends/platform/wince/README-WinCE.txt b/backends/platform/wince/README-WinCE.txt
new file mode 100644
index 0000000000..856afd45ab
--- /dev/null
+++ b/backends/platform/wince/README-WinCE.txt
@@ -0,0 +1,616 @@
+ScummVM Windows CE FAQ
+Last updated: $Date: 2007-06-11 02:38:33 -0600 (Mon, 11 Jun 2007) $
+Release version: 0.10.0
+------------------------------------------------------------------------
+
+New in this version
+-------------------
+
+0.10.0:
+Major improvements have taken place in this version, mostly for behind-
+the-scenes stuff. First, we have migrated to GCC for building the Windows
+CE port. This helped take care of some obscure compiler bugs which were
+in there for quite a long time. It has also lead to efficient code
+generation due to GCC's advanced capabilities and consequently increased
+runtime speed. The second important change was the overhaul of the SDL
+library port. The benefits from this are twofold: The real-time code paths
+have been optimized, including contributed ARM assembly code for critical
+functions. Further, the screen display and mouse/keyboard input code has
+been partially rewritten to allow for increased compatibility across all
+devices.
+Due to the update of keyboard handling code, the keycodes have changed
+slightly. Running this version of ScummVM will overwrite your key bindings
+with the new defaults. See the section on how to play on Smartphones and
+Pocket PCs below for the new default keybindings.
+
+------------------------------------------------------------------------
+
+This document is intended to give common answers to specific ScummVM
+issues on Windows CE, in 3 sections
+ * "General questions" : browse this section to get started and see
+ general issues
+ * "Game specific questions" : lists some common game specific issues
+ * "Support and links" : how to get support if you're still puzzled
+
+------------------------------------------------------------------------
+General questions
+------------------------------------------------------------------------
+
+Which devices are supported ?
+-----------------------------
+
+Official build
+--------------
+
+The official build is based on the ARM architecture and should work with any
+Pocket PC 2000, Pocket PC 2002, Pocket PC 2003, Pocket PC 2003 SE, Smartphone
+2002, Smartphone 2003 or Windows Mobile based device.
+
+Support for old ARM architectures (Handheld PCs, Palm Size PCs) and other CPUs
+(MIPS, SH3) is discontinued. Feel free to generate builds for these
+architectures and contact us to include them on ScummVM website.
+
+Games supported
+---------------
+
+The Windows CE port of ScummVM supports all available game engines.
+
+ScummVM distinguishes devices based on two characteristics: Type and resolution.
+Supported types of devices are Smartphones (usually no stylus) and Pocket PCs
+(stylus). The supported resolutions are 176x220 (Smartphone), 240x240 (QVGA
+square), 240x320 (QVGA), 320x240 (QVGA landscape), 480x640 (VGA). Devices with
+resolutions larger than VGA should also be supported with automatic screen
+centering.
+
+* Low resolution Smartphones (176x220)
+
+Support is only provided for all 320x200 or 320x240 games. The font can get
+hard to read (you should prefer talkie games, or wear glasses :-P)
+Games with 640x480 resolution such as COMI or BSWORD cannot be scaled down
+to this resolution and still be playable.
+
+* QVGA square devices (240x240)
+
+Only 320x200 or 320x240 games are supported due to lack of downsampling scaler.
+
+* QVGA Pocket PCs or Smartphones (240x320 or 320x240)
+
+All games are playable in these devices. Landscape devices may not be able to
+rotate the screen around.
+
+* VGA (640x480) or higher Pocket PCs
+
+All non VGA games should work properly on these devices. They can be resized
+with different scalers. Moreover, VGA games will be displayed in true VGA mode.
+
+Partial / Discontinued support
+------------------------------
+
+Support for the following devices is not complete, not working properly or
+discontinued because the device is now obsolete. Feel free to contribute and
+improve the port for your favorite device, or use the last release built with
+the previous port architecture (0.5.1) which was less resource hungry and
+supported more exotic devices.
+
+* "Paletted" devices (non "true color")
+
+These devices will be supported through the GDI layer which will slow down the
+games a lot. You can try to disable the music/sound effects to get a better
+game experience.
+
+* "Mono" devices
+
+I don't even think anything will be displayed on these devices :) you can try
+and report your success ...
+
+* MIPS/SH3 devices with QVGA resolution (240x320), "true color"
+
+Some devices may be a bit too slow, especially if direct screen access (GAPI)
+is not supported on these devices.
+
+* ARM/MIPS/SH3 devices with VGA resolution (640x480) (Palm Size PC / Handheld
+ PC platform)
+
+True VGA games will probably be too slow to run properly on these devices even
+if they can support them ...
+
+* ARM/MIPS/SH3 devices with desktop resolution (800x600) (Handheld PC platform)
+
+No, there will never be ANY scaler supporting 800x600 resolution, because
+320x200 games CANNOT be resized to a 800x600 by a simple operation.
+
+And the device will probably be too slow to perform any kind of graphic
+transform anyway :)
+
+How do I install ScummVM for Windows CE ?
+-----------------------------------------
+
+Simple! Unpack the release package on your desktop pc, then copy all its contents
+to a folder on your device. Typically, you should at least have scummvm.exe,
+modern.ini and modern.zip in the same directory. Finally, upload your beloved games
+and fire it up :-)
+
+Some devices (like Pocket PC 2000) require GAPI to be present.
+
+How do I install a game ?
+-------------------------
+
+You'll at least need to copy all the data files from your game, in a
+sub-directory of your game directory.
+
+You'll need to put the data files in a directory named after ScummVM game
+name (see "Supported Games" section in ScummVM readme) for the games having
+"generic" data files (.LFL files). Recent games can be put in any directory.
+
+You can compress the multimedia files (sound/video) as described in the
+ScummVM readme.
+
+You can compress the audio tracks of Loom or Monkey Island 1 as described in
+the ScummVM readme. If you are running these games on a slow device with Ogg
+Vorbis compression, it's recommended to sample the files to 11 kHz (this sample
+rate is not supported by other versions of ScummVM).
+
+If you need more details, you can check SirDave's mini-manual online available
+at: http://forums.scummvm.org/viewtopic.php?t=936
+and at: http://www.pocketmatrix.com/forums/viewtopic.php?t=8606
+
+How do I run a game ?
+---------------------
+
+If it's the first time you're running ScummVM for Windows CE, have installed or
+removed games, you need to rescan your game directory.
+ * Select Add Game, tap the root directory of your games, and tap "Yes" to begin
+ an automatic scan of the installed games.
+
+Usually all games are detected and you can start playing right away. If your
+game is not detected check its directory name and your data files.
+
+To play a game, tap on its name then tap the "Start" button or double tap its
+name.
+
+How do I play a game on a Pocket PC or Handheld PC device ?
+-----------------------------------------------------------
+
+The stylus is your mouse cursor, and a tap is a left mouse button click.
+
+As the Pocket PC lacks some keys, a toolbar is displayed at the bottom of the
+screen to make the most common functions just a tap away
+ * The disk icon opens ScummVM options menu to save your game, or change your
+ current game settings (depends on the game)
+ * The movie icon skips a non interactive sequence, the current dialog or
+ behaves like the ESC key on a regular keyboard (depends on the game)
+ * The sound icon turns all sound effects and music off and on
+ * The key icon allow you to map a key action to a device button
+ * The monkey icon switches between portrait, landscape and inverse landscape
+ mode (depends on the display drivers)
+
+You can map additional actions on your device hardware buttons using the
+"Options" / "Key" menu in the ScummVM options menu. To associate an action to
+a key, tap the action, then the "Map" button and press the hardware key.
+The following actions are available :
+
+ * Pause : pause the game
+ * Save : open ScummVM option menu
+ * Quit : quit ScummVM (without saving, be careful when using it)
+ * Skip : skip a non interactive sequence, the current dialog or
+ behaves like the ESC key on a regular keyboard
+ * Hide : hide or display the toolbar
+ * Keyboard : hide or display the virtual keyboard
+ * Sound : turns all sound effects and music off and on
+ * Right click : acts as a right mouse button click
+ * Cursor : hide or display the mouse cursor
+ * Free look : go in or out of free-look mode. In this mode, you can tap
+ the screen to look for interesting locations without walking.
+ * Zoom up : magnify the upper part of the screen for 640x480 games
+ rendered on a QVGA device.
+ * Zoom down : magnify the lower part of the screen for 640x480 games
+ rendered on a QVGA device.
+ * Multi Function : this key performs a different function depending on the game
+ : Full Throttle -> win an action sequence (cheat)
+ : Fate of Atlantis -> sucker punch (cheat)
+ : Bargon -> F1 (start the game)
+ : All AGI games -> bring up the predictive input dialog
+ * Bind keys : map a key action to a device button
+ * Up,Down,Left :
+ Right, : emulate mouse/stylus behavior
+ Left Click :
+
+The default key bindings for Pocket PCs are (note that not all keys are mapped):
+ * Up, Down, Left, Right : (dpad) arrow keys
+ * Left Click : softkey A
+
+If you start a game when a Right click mapping is necessary, ScummVM will ask
+you to map one of your hardware key to this action before playing. Just press
+the key you want to map if you see this message.
+
+Notes:
+- THE TOOLBAR CAN BE CYCLED BY DOUBLE TAPPING (SEE BELOW)
+- YOU MUST HIDE THE TOOLBAR TO SCROLL THROUGH THE INVENTORY IN ZAK
+- YOU MUST DISPLAY THE KEYBOARD TO FIGHT IN INDIANA JONES 3
+- YOU MUST MAP THE RIGHT CLICK ACTION TO PLAY SEVERAL GAMES
+
+How do I hide the toolbar ?
+---------------------------
+
+Note: THIS IS A VERY USEFUL AND SOMETIMES NECESSARY SHORTCUT
+
+Double tapping the stylus at the top of the screen will switch between a
+visible toolbar panel, a virtual keyboard, and hiding panel. If any part of
+the screen is obscured by the toolbar (like the load/save game dialogs) you can
+use the invisible panel mode to get to it. For 320x200 games on QVGA Pocket
+PCs, when the panel is hidden the game screen is resized to 320x240 (aspect
+ratio correction) for better gaming experience.
+
+How do I play a game on a Smartphone device ?
+---------------------------------------------
+
+On non-stylus devices, the mouse cursor is emulated via a set of keys.
+The cursor will move faster if you keep the key down. You can tweak this
+behaviour in the configuration file described below.
+
+Here is
+the list of available actions for Smartphones:
+
+ * Up,Down,Left :
+ Right, : emulate mouse/stylus behavior
+ Left Click :
+ Right Click :
+ * Save : open ScummVM option menu
+ * Skip : skip a non interactive sequence, the current dialog or
+ behaves like the ESC key on a regular keyboard
+ * Zone : switch between the 3 different mouse zones
+ * Multi Function : this key performs a different function depending on the game
+ : Full Throttle -> win an action sequence (cheat)
+ : Fate of Atlantis -> sucker punch (cheat)
+ : Bargon -> F1 (start the game)
+ : All AGI games -> bring up the predictive input dialog
+ * Bind keys : map a key action to a device button
+ * Keyboard : hide or display the virtual keyboard
+ * Rotate : rotate the screen (also rotates dpad keys)
+ * Quit : quit ScummVM (without saving, be careful when using it)
+
+The "Zone" key is a *very* valuable addition allowing you to jump quickly
+between three screen zones : the game zone, the verbs zone and the inventory
+zone. When you switch to a zone the cursor will be reset to its former location
+in this zone.
+
+The default key map for these actions is:
+
+ * Up, Down, Left, Right : (dpad) arrow keys
+ * Left Click : softkey A
+ * Right Click : softkey B
+ * Save : call/talk
+ * Skip : back
+ * Zone : 9
+ * Multi Function : 8
+ * Bind keys : end call
+ * Keyboard : (dpad) enter
+ * Rotate : 5
+ * Quit : 0
+
+You can change the key mapping at any time by bringing up the key mapping menu
+(Bind keys action).
+
+How do I tweak the configuration of ScummVM ?
+---------------------------------------------
+
+See the section regarding the configuration file (scummvm.ini) in ScummVM
+README file - the same keywords apply.
+
+Some parameters are specific to this port :
+
+Game specific sections (f.e. [monkey2]) - performance options
+
+ * high_sample_rate bool Desktop quality (22 kHz) sound output if set.
+ 11 kHz otherwise. The default is 11 kHz.
+ If you have a fast device, you can set this to
+ true to enjoy better sound effects and music.
+ * FM_high_quality bool Desktop quality FM synthesis if set. Lower
+ quality otherwise. The default is low quality.
+ You can change this if you have a fast device.
+ * sound_thread_priority int Set the priority of the sound thread (0, 1, 2).
+ Depending on the release, this is set to 1
+ internally (above normal). If you get sound
+ stuttering try setting this to a higher value.
+ Set to 0 if your device is fast enough or if
+ you prefer better audio/video synchronization.
+ * Smush_force_redraw int Force a Smush frame redraw every X missed
+ frames. Mainly used for Full Throttle action
+ sequences. Setting it lower gives more
+ priority to screen redraws. Setting it higher
+ gives more priority to stylus/keyboard input.
+ The default is 30.
+
+Game specific sections (f.e. [monkey2]) - game options
+
+ * landscape int 0: Portrait, 1: Landscape, 2: Inverse Landscape
+ You can also use this in the [scummvm] section
+ in QVGA Pocket PCs to display the launcher in
+ landscape, for example, at startup.
+
+[scummvm] section - keys definition
+
+You usually do not wish to modify these values directly, as they are set
+by the option dialog, and are only given here for reference.
+
+ * action_mapping_version int Mapping version linked to ScummVM version.
+ * action_mapping string Hex codes describing the key associated to
+ each different action.
+ * debuglevel int Debug Level 1 is used by the WinCE port
+ for reporting diagnostic output in the
+ scummvm_stdout.txt and scummvm.stderr.txt
+ files in the current working directory.
+
+[scummvm] section - mouse emulation tuning
+
+You can tweak these parameters to customize how the cursor is handled.
+
+ * repeatTrigger int Number of milliseconds a key must be held to
+ consider being repeated.
+ * repeatX int Number of key repeat events before changing
+ horizontal cursor behaviour.
+ * stepX1 int Horizontal cursor offset value when the key is
+ not repeated.
+ * stepX2 int Horizontal cursor offset value when the key is
+ repeated less than repeatX.
+ * stepX3 int Horizontal cursor offset value when the key is
+ repeated more than repeatX.
+ * repeatY int Number of key repeat events before changing
+ vertical cursor behaviour.
+ * stepY1 int Vertical cursor offset value when the key is
+ not repeated.
+ * stepY2 int Horizontal cursor offset value when the key is
+ repeated less than repeatY.
+ * stepY3 int Vertical cursor offset value when the key is
+ repeated more than repeatY.
+
+------------------------------------------------------------------------
+Game specific questions
+------------------------------------------------------------------------
+
+---------------
+-- All Games --
+---------------
+
+I need to press a special key
+-----------------------------
+
+Bring up the virtual keyboard. On Smartphones take a look at the Keyboard action above.
+On Pocket PCs it's easier to double-tap at the top of the screen.
+
+The panel is obscuring the playfield area
+-----------------------------------------
+
+Double tap at the top of the screen to hide it. As an aside, the aspect ratio
+correction scaler will kick in if the game/device combo is appropriate.
+
+How do I name my save games ?
+-----------------------------
+
+Use the virtual keyboard (Keyboard action).
+
+ScummVM is stuck for some reason
+--------------------------------
+
+Bind and use the quit action to quit.
+
+I cannot rotate the screen to landscape/inverse landscape
+---------------------------------------------------------
+
+Depending on the video driver, ScummVM may opt to not provide such functionality.
+In general, when ScummVM starts in normal "portrait" orientation, the device driver
+reports better display characteristics and you should consider launching from portrait.
+
+I'm having problems. Is there diagnostic output available ?
+-----------------------------------------------------------
+
+Insert a line in the [scummvm] section of scummvm.ini with the following:
+debuglevel=1
+Run ScummVM. When it closes scummvm_stdout.txt and scummvm_stderr.txt files will be
+available at the program directory (see section above).
+
+ScummVM crashes and returns to desktop
+--------------------------------------
+
+File a bug report including diagnostic output (see previous question).
+
+--------------------------
+-- Beneath a Steel Sky --
+--------------------------
+
+Introduction movie is too slow or never ends ...
+-------------------------------------------------
+
+Skip it :)
+
+How can I open the inventory in Beneath a Steel Sky ?
+---------------------------------------------------
+
+Tap the top of the screen. Check your stylus calibration if you still cannot
+open it.
+
+How can I use an item in Beneath a Steel Sky ?
+----------------------------------------------
+
+You need to map the right click button (see the General Questions section).
+
+----------------------------
+-- Curse of Monkey Island --
+----------------------------
+
+How can I open the inventory in Curse of Monkey Island ?
+------------------------------------------------------
+
+You need to map the right click button (see the General Questions section).
+
+I'm experiencing random crashes ...
+------------------------------------
+
+This game has high memory requirements, and may crash sometimes on low
+memory devices. Continue your game with the latest automatically saved
+game and everything should be fine.
+You can consider removing the music and voice files (VOXDISK.BUN, MUSDISK.BUN)
+to lower these requirements.
+
+Sound synchronization is lost in Curse of Monkey Island videos
+--------------------------------------------------------------
+
+Use a faster device :-(
+
+--------------------
+-- Full Throttle --
+--------------------
+
+I'm experiencing random crashes ...
+------------------------------------
+
+This game has high memory requirements, and may crash sometimes on low
+memory devices. Continue your game with the latest automatically saved
+game and everything should be fine.
+You can consider removing the voice file (MONSTER.SOU) and disable the
+music to lower these requirements.
+
+----------------------------------------
+-- Indiana Jones and the Last Crusade --
+----------------------------------------
+
+How can I fight in Indiana Jones and the Last Crusade ?
+-----------------------------------------------------
+
+You need to map the keyboard button (see the General Questions section).
+
+---------------
+-- Sam & Max --
+---------------
+
+How can I change the current action ?
+-------------------------------------
+
+You need to map the right click button (see the General Questions section).
+
+How can I exit a mini game ?
+----------------------------
+
+Use the skip toolbar icon (see the General Questions section).
+
+-------------------
+-- Simon 1 and 2 --
+-------------------
+
+How can I save or quit in Simon ?
+--------------------------------
+
+"Use" (use the use verb :p) the postcard. The ScummVM option dialog is disabled
+in Simon games.
+
+On Smartphone, you'll need to push the Action button (center of the pad) to
+quit the game.
+
+-------------
+-- The Dig --
+-------------
+
+I'm experiencing random crashes ...
+------------------------------------
+
+This game has high memory requirements, and may crash sometimes on low
+memory devices. Continue your game with the latest automatically saved
+game and everything should be fine.
+You can consider removing the music and voice files (VOXDISK.BUN, MUSDISK.BUN)
+to lower these requirements.
+
+--------------------
+-- Zak Mc Kracken --
+--------------------
+
+How can I scroll through my inventory items in Zak Mc Kracken ?
+---------------------------------------------------------------
+
+You need to map the hide toolbar button (see the General Questions section) or
+double tap at the top of the screen (from 0.8.0+)
+
+------------------------
+-- Broken Sword 1 & 2 --
+------------------------
+
+I've installed the movies pack but they are not playing/they are slow
+---------------------------------------------------------------------
+
+MPEG 2 playback takes too much memory in the current release, and may prevent
+movies from playing in VGA mode. Consider changing to the DXA cutscene pack
+which is many times faster.
+
+---------------
+-- Gobliiins --
+---------------
+
+How do I enter a code ?
+-----------------------
+
+Use the virtual keyboard.
+
+-------------------
+-- Bargon Attack --
+-------------------
+
+How do I start the game (F1 : Game, F2 : Demo)
+----------------------------------------------
+
+Use the Multi Function action.
+
+----------------------
+-- AGI engine games --
+----------------------
+
+Do you expect me to play these games on keyboard less devices ?
+---------------------------------------------------------------
+
+Sure we do :-)
+If you want to get some mileage on your stylus you can use the virtual keyboard.
+There is a very useful alternative though, the AGI engine's predictive input dialog.
+It requires a dictionary to be present. Just tap on the command line or use the
+Multi Function action to bring it up. On Smartphones, when the dialog is shown
+all key mapping is disabled temporarily (including mouse emulation). Input is
+performed either by pressing the phone's numeric keypad keys and dpad enter to
+close the dialog, or by navigating the buttons using the dpad arrows and pressing
+with dpad enter. Check the main Readme file for more information on this.
+
+------------------------------------------------------------------------
+Support
+------------------------------------------------------------------------
+
+Help, I've read everything and ...
+-----------------------------------
+
+Luckily, as there is a huge variety of Windows CE devices, a specific forum
+is dedicated to this ScummVM port. You can ask your question on the WinCE
+ScummVM forum available at http://forums.scummvm.org/viewforum.php?f=6
+
+Some older questions and very nice tutorials are still available on the historic
+PocketMatrix forum at http://www.pocketmatrix.com/forums/viewforum.php?f=20
+where the community is always glad to help and have dealt with all the bugs for
+many years now :)
+
+I think I found a bug, ScummVM crashes in ...
+---------------------------------------------
+
+See the "Reporting Bugs" section in ScummVM readme.
+
+If you have a Pocket PC or Handheld PC, be sure to include its resolution (obtained
+on the second dialog displayed on the "About" menu) in your bug report.
+
+If you cannot reproduce this bug on another ScummVM version, you can cross
+post your bug report on ScummVM forums.
+
+I want to compile my own ScummVM for Windows CE
+-----------------------------------------------
+
+Take a look at:
+http://wiki.scummvm.org/index.php/Compiling_ScummVM/Windows_CE
+
+
+------------------------------------------------------------------------
+Good Luck and Happy Adventuring!
+The ScummVM team.
+http://www.scummvm.org/
+------------------------------------------------------------------------
diff --git a/common/keyboard.h b/common/keyboard.h
new file mode 100644
index 0000000000..dfc47af1ce
--- /dev/null
+++ b/common/keyboard.h
@@ -0,0 +1,266 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL: https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/branches/gsoc2007-fsnode/common/keyboard.h $
+ * $Id: keyboard.h 27654 2007-06-23 10:06:39Z fingolfin $
+ *
+ */
+
+#ifndef COMMON_KEYBOARD_H
+#define COMMON_KEYBOARD_H
+
+#include "common/scummsys.h"
+
+namespace Common {
+
+enum KeyCode {
+ KEYCODE_INVALID = 0,
+
+ KEYCODE_BACKSPACE = 8,
+ KEYCODE_TAB = 9,
+ KEYCODE_CLEAR = 12,
+ KEYCODE_RETURN = 13,
+ KEYCODE_PAUSE = 19,
+ KEYCODE_ESCAPE = 27,
+ KEYCODE_SPACE = 32,
+ KEYCODE_EXCLAIM = 33,
+ KEYCODE_QUOTEDBL = 34,
+ KEYCODE_HASH = 35,
+ KEYCODE_DOLLAR = 36,
+ KEYCODE_AMPERSAND = 38,
+ KEYCODE_QUOTE = 39,
+ KEYCODE_LEFTPAREN = 40,
+ KEYCODE_RIGHTPAREN = 41,
+ KEYCODE_ASTERISK = 42,
+ KEYCODE_PLUS = 43,
+ KEYCODE_COMMA = 44,
+ KEYCODE_MINUS = 45,
+ KEYCODE_PERIOD = 46,
+ KEYCODE_SLASH = 47,
+ KEYCODE_0 = 48,
+ KEYCODE_1 = 49,
+ KEYCODE_2 = 50,
+ KEYCODE_3 = 51,
+ KEYCODE_4 = 52,
+ KEYCODE_5 = 53,
+ KEYCODE_6 = 54,
+ KEYCODE_7 = 55,
+ KEYCODE_8 = 56,
+ KEYCODE_9 = 57,
+ KEYCODE_COLON = 58,
+ KEYCODE_SEMICOLON = 59,
+ KEYCODE_LESS = 60,
+ KEYCODE_EQUALS = 61,
+ KEYCODE_GREATER = 62,
+ KEYCODE_QUESTION = 63,
+ KEYCODE_AT = 64,
+
+ KEYCODE_LEFTBRACKET = 91,
+ KEYCODE_BACKSLASH = 92,
+ KEYCODE_RIGHTBRACKET= 93,
+ KEYCODE_CARET = 94,
+ KEYCODE_UNDERSCORE = 95,
+ KEYCODE_BACKQUOTE = 96,
+ KEYCODE_a = 97,
+ KEYCODE_b = 98,
+ KEYCODE_c = 99,
+ KEYCODE_d = 100,
+ KEYCODE_e = 101,
+ KEYCODE_f = 102,
+ KEYCODE_g = 103,
+ KEYCODE_h = 104,
+ KEYCODE_i = 105,
+ KEYCODE_j = 106,
+ KEYCODE_k = 107,
+ KEYCODE_l = 108,
+ KEYCODE_m = 109,
+ KEYCODE_n = 110,
+ KEYCODE_o = 111,
+ KEYCODE_p = 112,
+ KEYCODE_q = 113,
+ KEYCODE_r = 114,
+ KEYCODE_s = 115,
+ KEYCODE_t = 116,
+ KEYCODE_u = 117,
+ KEYCODE_v = 118,
+ KEYCODE_w = 119,
+ KEYCODE_x = 120,
+ KEYCODE_y = 121,
+ KEYCODE_z = 122,
+ KEYCODE_DELETE = 127,
+
+ // Numeric keypad
+ KEYCODE_KP0 = 256,
+ KEYCODE_KP1 = 257,
+ KEYCODE_KP2 = 258,
+ KEYCODE_KP3 = 259,
+ KEYCODE_KP4 = 260,
+ KEYCODE_KP5 = 261,
+ KEYCODE_KP6 = 262,
+ KEYCODE_KP7 = 263,
+ KEYCODE_KP8 = 264,
+ KEYCODE_KP9 = 265,
+ KEYCODE_KP_PERIOD = 266,
+ KEYCODE_KP_DIVIDE = 267,
+ KEYCODE_KP_MULTIPLY = 268,
+ KEYCODE_KP_MINUS = 269,
+ KEYCODE_KP_PLUS = 270,
+ KEYCODE_KP_ENTER = 271,
+ KEYCODE_KP_EQUALS = 272,
+
+ // Arrows + Home/End pad
+ KEYCODE_UP = 273,
+ KEYCODE_DOWN = 274,
+ KEYCODE_RIGHT = 275,
+ KEYCODE_LEFT = 276,
+ KEYCODE_INSERT = 277,
+ KEYCODE_HOME = 278,
+ KEYCODE_END = 279,
+ KEYCODE_PAGEUP = 280,
+ KEYCODE_PAGEDOWN = 281,
+
+ // Function keys
+ KEYCODE_F1 = 282,
+ KEYCODE_F2 = 283,
+ KEYCODE_F3 = 284,
+ KEYCODE_F4 = 285,
+ KEYCODE_F5 = 286,
+ KEYCODE_F6 = 287,
+ KEYCODE_F7 = 288,
+ KEYCODE_F8 = 289,
+ KEYCODE_F9 = 290,
+ KEYCODE_F10 = 291,
+ KEYCODE_F11 = 292,
+ KEYCODE_F12 = 293,
+ KEYCODE_F13 = 294,
+ KEYCODE_F14 = 295,
+ KEYCODE_F15 = 296,
+
+ // Key state modifier keys
+ KEYCODE_NUMLOCK = 300,
+ KEYCODE_CAPSLOCK = 301,
+ KEYCODE_SCROLLOCK = 302,
+ KEYCODE_RSHIFT = 303,
+ KEYCODE_LSHIFT = 304,
+ KEYCODE_RCTRL = 305,
+ KEYCODE_LCTRL = 306,
+ KEYCODE_RALT = 307,
+ KEYCODE_LALT = 308,
+ KEYCODE_RMETA = 309,
+ KEYCODE_LMETA = 310,
+ KEYCODE_LSUPER = 311, // Left "Windows" key
+ KEYCODE_RSUPER = 312, // Right "Windows" key
+ KEYCODE_MODE = 313, // "Alt Gr" key
+ KEYCODE_COMPOSE = 314, // Multi-key compose key
+
+ // Miscellaneous function keys
+ KEYCODE_HELP = 315,
+ KEYCODE_PRINT = 316,
+ KEYCODE_SYSREQ = 317,
+ KEYCODE_BREAK = 318,
+ KEYCODE_MENU = 319,
+ KEYCODE_POWER = 320, // Power Macintosh power key
+ KEYCODE_EURO = 321, // Some european keyboards
+ KEYCODE_UNDO = 322 // Atari keyboard has Undo
+};
+
+/**
+ * List of certan special and some fake 'ascii' values used in keyboard events.
+ * The values for the function keys listed here are based on what certain SCUMM
+ * games expect in their scripts.
+ * @todo Get rid of the function key values, and instead enforce that engines use
+ * the keycode value to handle these.
+ */
+enum {
+ ASCII_BACKSPACE = 8,
+ ASCII_TAB = 9,
+ ASCII_RETURN = 13,
+ ASCII_ESCAPE = 27,
+ ASCII_SPACE = 32,
+
+ ASCII_F1 = 315,
+ ASCII_F2 = 316,
+ ASCII_F3 = 317,
+ ASCII_F4 = 318,
+ ASCII_F5 = 319,
+ ASCII_F6 = 320,
+ ASCII_F7 = 321,
+ ASCII_F8 = 322,
+ ASCII_F9 = 323,
+ ASCII_F10 = 324,
+ ASCII_F11 = 325,
+ ASCII_F12 = 326
+};
+
+/**
+ * Keyboard modifier flags, used for Event::kbd::flags.
+ */
+enum {
+ KBD_CTRL = 1 << 0,
+ KBD_ALT = 1 << 1,
+ KBD_SHIFT = 1 << 2
+};
+
+/**
+ * Keyboard status, as used in the Event struct.
+ */
+struct KeyState {
+ /**
+ * Abstract key code (will be the same for any given key regardless
+ * of modifiers being held at the same time.
+ * For example, this is the same for both 'A' and Shift-'A'.
+ * @todo Document which values are to be used for non-ASCII keys
+ * like F1-F10. For now, let's just say that our primary backend
+ * is the SDL one, and it uses the values SDL uses... so until
+ * we fix this, your best bet is to get a copy of SDL_keysym.h
+ * and look at that, if you want to find out a key code.
+ */
+ KeyCode keycode;
+
+ /**
+ * ASCII-value of the pressed key (if any).
+ * This depends on modifiers, i.e. pressing the 'A' key results in
+ * different values here depending on the status of shift, alt and
+ * caps lock.
+ */
+ uint16 ascii;
+
+ /**
+ * Status of the modifier keys. Bits are set in this for each
+ * pressed modifier
+ * @see KBD_CTRL, KBD_ALT, KBD_SHIFT
+ */
+ byte flags;
+
+ KeyState(KeyCode kc = KEYCODE_INVALID, uint16 asc = 0, byte f = 0) {
+ keycode = kc;
+ ascii = asc ? asc : (uint16)kc;
+ flags = f;
+ }
+
+ void reset() {
+ keycode = KEYCODE_INVALID;
+ ascii = flags = 0;
+ }
+};
+
+} // End of namespace Common
+
+#endif
diff --git a/dists/pred.dic b/dists/pred.dic
new file mode 100644
index 0000000000..131aeff9ef
--- /dev/null
+++ b/dists/pred.dic
@@ -0,0 +1,7986 @@
+222 cab
+2222243 cabbage
+222243 cabbie
+222253 babble
+22229 cabby
+2223 babe
+2223537283 accelerate
+22237 babes
+222377 access
+222378 accept
+22243368 accident
+2224336825 accidental
+22246 cabin
+2224638 cabinet
+22246387 cabinets
+222467 cabins
+2225 back
+2225224 backbag
+22253 cable
+22253667 backdoor
+222537 cables
+22257433 backside
+22257666 backroom
+222578243 backstage
+222587 backup
+2225877 backups
+2226366 abandon
+222636633 abandoned
+222652337 accolades
+22266 bacon
+222665 acamol
+222673466 accordion
+222674669 cacophony
+222678 accost
+2226868 account
+2226868268 accountant
+22283742 bacteria
+22284 cacti
+222844 cactii
+2228685283 accumulate
+222887 cactus
+2229 baby
+22293655 babydoll
+22297 babys
+223 abe bad cad
+2232837 cadaver
+22328377 cadavers
+2233 cafe
+22333463 caffeine
+223343 caddie
+223383742 cafeteria
+22343 badge
+2234522 cadilac
+22345522 cadillac
+223666 badoom
+2238 abet
+223828466 abduction
+22382867 abductor
+223828677 abductors
+224 bag cag
+2243 acid cage
+22433 caged
+2243676547 acidopolis
+22437 cages
+2243837 acheter
+2244243 baggage
+224433 bagged
+224443 baggie
+2245 bail
+2245489 ability
+2245568 caillou
+22455689 cailloux
+22467 bains
+2247 bags
+2247473 bagpipe
+224773 caisse
+2247737 caisses
+2248 bait
+22483 bague
+224833 baited
+2248546 caitlin
+2248596 caitlyn
+2252623 balance
+2252669 balcony
+2252852867 calculator
+2253 bake cake calf able
+22536327 calendar
+22536337 calender
+22537 baker cakes
+225379 bakery
+2254226 caliban
+22543 calif
+2254367642 california
+2255 ball call
+2255268463 ballantine
+2255464 calling
+22557 balls calls
+225576468 ballpoint
+2256 calm
+225837 calves
+2258787233 balustrade
+226 can
+22624 bambi
+22625 canal
+226262 banana
+2262627 bananas
+226279 canary
+2263 band cane
+2263262 bandana
+22632662 bandanna
+22633 abode
+2263352272 candelabra
+2263423 candice
+226348 bandit
+2263487 bandits
+22635 camel
+226353 candle
+2263532272 candleabra
+226353465337 candleholder
+2263534653377 candleholders
+2263537 candles
+22635378425 candlestick
+226372 camera
+2263727 cameras
+22639 candy
+2264 bang
+226463 canine
+22647837 banister canister
+226478377 banisters canisters
+2265 bank
+226537 banker
+22656683 banknote
+226637 banner
+2266377 banners
+2266462253 abominable
+226666 cannon
+2266667 cannons
+226679 canopy
+2267 camp cans
+22673473 campfire
+22676 acorn
+226767 acorns
+22678 abort
+226787 campus
+226827 canvas
+22683 above
+2268336 canteen
+226837 banter
+22687842 acoustic
+22688 about
+226966 canyon
+2269667 canyons
+227 bar bas cap car
+22722227 barabbas
+22722232272 abracadabra
+2272233 cascade
+22722337 cascades
+2272277 carcass
+227227737 carcasses
+227233 barbed
+22723738867 carberettor
+22724247 barchair
+227242477 barchairs
+2272426 abraham
+22724267 abrahams
+22727466 abrasion
+2272826 caravan
+2272873867 carburetor
+22728738867 carburettor
+2273 barf base cape card care case
+22732255 baseball
+22734625 cardinal
+22736368 basement
+22736574 bardolph
+22737 cards cases
+22737568 cardslot
+227377 caress
+227382537 caretaker
+2274 bash cash
+2274224 cashbag
+2274246 bargain
+22743 barge
+2274347 casheir
+2274437 cashier
+22746 basin cargo
+227464 casing
+2274652 cashola
+227466 casino
+2274662842 cashomatic
+2275 bark cask
+2275337 barkeep
+227533737 barkeeper
+227538 basket casket
+2275382255 basketball
+2275387 baskets
+227539 barley
+227546 carlin
+227567 carlos
+22756884 carlotti
+22757 casks
+2275866 carlton
+22758667 carltons
+2276 barn
+2276243 barmaid carnage
+227625 carnal
+227626 barman
+227636 barmen
+227648673 carnivore
+2276486737 carnivores
+22765 carol
+227657 carols
+22766 baron
+227677 across
+22769637 barowner
+2277 bars bass cars
+227735 barrel
+2277355 barrell
+2277357 barrels
+227738 carpet
+2277387 carpets
+227742233 barricade
+22774243 carriage
+2277437 barrier carrier
+22774373 barriere
+22774377 barriers
+2277678 carport
+227768 carrot
+2277687 carrots
+2277853 capsule
+22778537 capsules
+22778665 barstool
+227786657 barstools
+22779 carry
+2278 bart cart cast
+2278246 captain
+22782467 captains
+2278273 bastard
+22783 carte carve
+227836337 bartender
+227837 carter
+2278464 carving
+22784647 carvings
+2278473 acquire
+227847625 baptismal
+2278478 baptist
+227853 castle
+2278537 castles
+2278626 bartman
+227866 carton
+227867 captor
+22787 carts
+227874343 cartridge
+2278743437 cartridges
+2278873 capture
+22797325 carwreck
+228 act bat cat
+228226627 catacombs
+22824 catch
+2282437 catcher
+22824464 catching
+2283 cave
+228346 cavein
+2283626 caveman
+2283636 cavemen
+22837 bates caves
+228376 cavern
+2284 bath
+22843 bathe
+228433725 cathedral
+228466 action
+22847 baths
+22847666 bathroom
+22848283 activate
+228482867 activator
+22848437 cavities
+2284882 bathtub
+228489 cavity
+22853766 cauldron
+228548837 catlitter
+228626 batman
+228627 catnap
+228646466 batminion
+22866 baton
+228662453 batmobile
+228667 batons
+2287 bats cats
+22873 abuse cause
+228737 causer
+228768733 abtsotree
+2287842 acustic
+22882457 cattails
+2288283 actuate
+22882867 actuator
+228837437 batteries
+2288379 battery
+228853 battle cattle
+2289255 catwalk
+229 bay
+2293667 baydoor
+22936677 baydoors
+2296638 bayonet
+2297 bays
+22977 abyss
+23 cd be
+23224 beach
+232266 beacon
+2322873 because
+23237 beads
+23242 adaga
+23245 cecil
+2325 beck
+232537 beaker
+2325377 beakers
+23259 becky
+2326 adam beam bean
+232637 beamer
+232663 become
+23267 adams beams beans
+232678255 beanstalk
+2327 bear
+23273 beard cease
+232737 beards
+2327464 bearing
+23277 bears
+23277546 bearskin
+23278 beast
+23278626 beastman
+232787 beasts
+2328 beat
+232837 beaver
+2328377 beavers
+232884385 beautiful
+232887 beatup
+233 add bed bee
+2332426237 bedchamber
+233273 befare
+2333 beef
+23337263 bedframe
+2334243 affiche
+23347628483 affirmative
+23348466 addition
+23349 affix
+2336 been
+23366 addon
+233667 addons
+233673 before
+2337 beds beep beer bees
+23372273 beercase
+233722737 beercases
+2337377 address
+233742 cedric
+2337433 bedside
+2337464 beeping
+23376224463 beermachine
+2337666 bedroom
+23377 beeps
+233777323 bedspread
+233846836 beethoven
+233853 beetle
+234 beg
+234284687 behaviour
+234323 behead
+23436684 behemoth
+234366847 behemoths
+23437483 adhesive
+234427 beggar
+2344277 beggars
+234437 begger
+2344377 beggers
+23446 begin
+234463 behind
+2345464 ceiling
+23454647 ceilings
+23464 being
+234647 beings
+234653 behold
+234663 begone
+2349 afix
+235 ael cel
+23522368 adjacent
+235327283 celebrate
+235378425 celestial
+235433 belief
+235436 aelien
+2355 bell cell
+235527 cellar
+23557 cells
+235574663 cellphone
+23558527 cellular
+23559 belly
+2356644647 belongings
+23568 belov
+23569 below
+2358 belt
+23587 belts
+235878 adjust
+2358786368 adjustment
+236 bem ben
+23624 bench
+2362437 benches
+236247 benchs
+2363 bend
+2363284 beneath
+236368 cement
+23638279 cemetary
+23638379 cemetery
+2364647837 administer
+23646478728483 administrative
+23648 admit
+23652646 benjamin
+23653 adolf
+2365372368 adolescent
+23664 benni
+23668274 cenotaph
+23669 benny
+236697 bennys
+2367 bems
+23673 adore
+236746 bensin
+23676 adorn
+236766 benson
+2368 bent cent
+236837 center
+2368373653 centerfold
+2368725 central
+236873 centre
+2368786 centrum
+2368873 centure
+237 cds
+237225 cdrack
+23723787 cerberus
+2372642 ceramic
+237325 cereal
+2373257 cereals
+237433 beside
+23745263 bergland
+2376 afro
+23762736 bernardo
+23764726 aerogram
+237675263 aeroplane
+237743 berrie
+2377437 berries
+23779 berry
+2378246 certain
+2378328 cerveau
+23783553 cervelle
+23784 berth
+2378423 cervice
+23784279 bestiary
+23784342283 certificate
+237843422837 certificates
+237869 bestow
+238 bet
+238242 betcha
+2382437 betcher
+2382629 betamax
+238368873 adventure
+23837 after
+23837243 beverage
+2383759 beverly
+238376666 afternoon
+2383774283 aftershave
+238378473 advertise
+2383784736368 advertisement
+23837847363687 advertisements
+23837847464 advertising
+238378476368 advertisment
+2383784936368 advertizement
+238423 advice
+2389336 between
+2423 chad
+2424 bich
+24246 again chain
+242467 chains
+24246729 chainsaw
+2424678 against
+24247 chair
+242473 chaise
+2424737 chaises
+242477 chairs
+24253 bible
+242538 chalet
+2425423 chalice
+24255 chalk
+2425525683 chalkcloud
+2425526273 chalkboard
+242623 chance
+2426237 chamber
+2426273 chambre
+2426335437 chandelier
+242643 change
+2426433 changed
+24264464 changing
+2426625 channal
+2426635 channel
+24266357 channels
+242672463 champagne
+24268 chant
+2427 chap char
+242722837 character
+24272625 charcoal
+242727645 charbroil
+24273 chase
+242735 chapel
+242743 charge
+2427433 charged
+2427437 charger
+24274464 charging
+2427468 chariot
+24275363 charlene
+2427537 charles
+24275377 charless
+2427539 charley
+24276 charm chasm
+242766 charon
+242767 chasms
+24277 chaps
+24278 chart
+2427837 charter
+242787 charts
+2428 chat
+24287738837 chaussettes
+242883 chauve
+2428837 chatter
+2429253 bicycle
+24292537 bicycles
+243 aid
+24323 ahead
+24325 check
+2432576468 checkpoint
+24327 cheap
+24328 cheat
+243287 cheats
+2433 biff chef
+243357 cheeks
+24337 cheer chefs
+243373 cheese
+243373253874437 cheesebleurgher
+243373287437 cheeseburger
+24337532337 cheerleader
+243375323377 cheerleaders
+2435464 cieling
+243546464 cielining
+24364225 chemical
+243642257 chemicals
+24366 bidon
+24368 agent
+24373 biere
+24377 chess
+24377437 cherries
+2437774323 chesspiece
+243779 cherry
+2437792662 cherrybomb
+24377926627 cherrybombs
+24378 chest
+243787 chests
+243795 cheryl
+2439 chew
+243933 chewed
+2439464 chewing
+244 agi big cig
+244236 chicen
+24425 chick
+2442536 chicken
+2442536534 chickenleg
+24425367 chickens
+244257 chicks
+244268866 bigbottom
+24427 cigar
+24427324 bigbrech
+244273883 cigarette
+2442738837 cigarettes
+244277 cigars
+24433 chief
+24436 chien
+2444263 agigame
+244437 bigger
+244443 ciggie
+2444437 ciggies
+24449 ciggy
+244497 ciggys
+24453 child
+244536 chiken
+244537367 childrens
+24455 chill
+244554 chilli
+2445546 chillin
+2446 chin
+24462 china
+24463 chime
+2446369 chimeny
+2446373 chinese
+24465 chink
+2446639 chimney
+24468 chiot
+2447 chip cigs
+244735 chisel
+24476865 chipmunk
+24477 chips
+2448 chit
+24482428 chitchat
+2453 bike
+24537 biker bikes
+24537225 bikerack
+245464 biking bikini
+2455 bill
+245526273 billboard
+2455273 billard
+24552737 billards
+24553653 billfold
+245542737 billiards
+2455427382253 billiardtable
+24557 bills
+24559 billy
+24568 bijou
+246 aim bin
+24626 bimbo
+246265283 chocolate
+246265283777323 chocolatespread
+2463 bind
+246337 cinder
+2463464 binding
+24634647 bindings
+246362 cinema
+24637 binds
+24639 cindy
+246423 choice
+24658646372368 bioluminescent
+246628527 binocular
+2466285277 binoculars
+24667 chomp
+246673 choose
+24667377 chompers
+2467 bins chop
+24673 chore
+24677 chops
+2467737 chopper
+24677377 choppers
+2469 chow
+247 air
+24724 birch
+247253 circle
+2472667737767 aircompressor
+24727238 aircraft
+2472848 circuit
+247288426273 circutiboard
+2473 bird
+24732243 birdcage
+24733333 birdfeed
+247336368 agreement
+247345837 airfilter
+24736378 birdnest
+24737 birds
+24737333 birdseed
+247373337 birdseeds
+247376378 birdsnest
+24739 birdy
+2474 biri
+24747 chris
+247477 chriss
+2474779 chrissy
+247478 christ
+24747867437 christopher
+247478674377 christophers
+24753 aisle
+2475625 airlock
+2476 biro
+2476275 airmask
+24775263 airplane
+2477678 airport
+2477867 airpump
+2478265 airtank
+2478376 cistern
+24784 birth
+24784329 birthday
+248 bit
+248229 chubby
+24825 chuck
+2482553 chuckle
+248259 chucky
+24828466 citation
+2483 ague bite
+24837 bites
+2484 chug
+2484946 citizin
+24865 chunk
+2487 bits
+248724 church
+24876 churn
+248787 citrus
+24883 chute
+248837 bitter
+2489 city
+2492773 bizarre
+2493 agwe
+252 bla
+2522 blab
+25225 black
+2522526273 blackboard
+25225464 blacking
+252255225 blackjack
+2522576484 blacksmith
+2522867 albator
+25228767 albatros
+25233 blade
+2523337 bladder
+25242 alaga
+252466 albino
+25252926 alakazam
+2526 clam
+2526237 clamber
+2526437 clanger
+2526465 alcohol
+252646542 alcoholic
+25265 blank
+2526538 blanket
+25265387 blankets
+25267 clams
+252674355 clamshell
+252683 alcove
+2527 clap
+2527463 clarine
+25274772 clarissa
+252747727 clarissas
+25275 clark
+25276 alarm
+25277 class
+252776283 classmate
+2527762837 classmates
+252777666 classroom
+25278 blast
+2527837 blaster
+25278377 blasters
+2528342 claudia
+25283427 claudias
+2528437 clavier
+25286 album
+25287 claus
+2528837 clatter
+25289 blatz
+2529 ajax claw clay
+25293 blaze
+25297 claws
+2529768 claypot
+253 ale cle
+253224 bleach
+25325 ckeck
+25326 clean
+2532633 cleaned
+25326464 cleaning
+2532673 cleanse
+25327 clear
+253272623 clearance
+25327464 clearing
+2532792837 clearwater
+253283 cleave
+2532837 cleaver
+2533 clef
+25338 cleft
+25363 blend
+2536337 blender
+2537424 aldrich
+253749626 clergyman
+25375 clerk
+25377 bless
+253874437 bleurgher
+2538744377 bleurghers
+253926337 alexander
+2539263377 alexanders
+2539263768 alexandrov
+254 ali
+2542 alga
+25423 algae
+2542537 clicker
+25427464 aliasing
+25432 algea
+25433 cliff
+254337 cliffs
+25436 alien
+254367 aliens
+25442867 aligator
+254448 alight
+25462 climb
+25462464 climbing
+25463 blind
+254637 blinds
+25465464 blinking
+2547 clip
+254726273 clipboard
+25477 bliss clips
+2547737 clipper
+25477377 clippers
+25477464 clipping
+254774647 clippings
+2548 clit
+25486747 clitoris
+25487378 algusest
+255 all
+25524 allah
+25536 allen
+25539 alley
+255442867 alligator
+2554428677 alligators
+2556728787 allosaurus
+2557 alls
+25574448 allright
+2559 ally
+2562237 clobber
+25622437 blobbies
+256229 blobby
+25625 block cloak clock
+256257 blocks
+2563 clod
+256376 bjoern
+2563767 bjoerns
+25653 bloke
+256537 blokes
+25663 blond blood clone
+256633 blonde
+256637 cloner clones
+25663782467 bloodstains
+256639 bloody
+25664 along
+2566464 cloning
+2566646 bloomin
+25666464 blooming
+256678 almost
+2566927 bloozar
+25673 close
+2567359 closely
+256738 closet
+2567387 closets
+2567766 blossom
+25677667 blossoms
+2568 blot
+25683 cloud
+256835263 cloudland
+256837 clouds clover
+25684 cloth
+256843 clothe
+2568437 clothes
+256843737937 clothesdryer
+25684375463 clothesline
+25684437 clothier
+25684464 clothing
+25687 blots
+256873 blouse
+2568837 blotter
+2569 blow
+25693474 blowfish
+2569562 blowjob
+25696 clown
+256962568437 clownclothes
+25696688348 clownoutfit
+256967848 clownsuit
+25697 blows
+256987 bloxur
+2573239 already
+25742238 alphabet
+25742723 alphapad
+2574448 alright
+2582 club
+25825 cluck
+25827 altar
+2583 blue
+258323779 blueberry
+25833 bluff
+2583332 alteeda
+25833327 alteedas
+258337 bluffs
+25834366 bludgeon
+2583529 bluejay
+25837 alter blues
+258463837 altimeter
+25868 blunt
+25874 blush
+25949 clxix
+26 am an cm
+262 boa bob cob
+2622 coca
+26224 coach
+262246 cocain
+2622463 cocaine
+26225378663 cobblestone
+262253786637 cobblestones
+26229 bobby
+26235436 coaelhen
+26237 amber
+262377 ambers
+2624368 ancient
+262467 anchor
+2625 anal coal
+26252866 cockatoo
+262528667 cockatoos
+26254653 coalhold
+2625748 cockpit
+262576224 cockroach
+26258245 cocktail
+2625973 analyse
+2625993 analyze
+2626 coco
+2626688 coconut
+26266887 coconuts
+2626887 cocnuts
+2627 boar bobs
+26272 cobra
+26273 board
+262737 boards
+262739255 boardwalk
+26277 amass
+26278 coast
+2628 boat coat
+2628426437 coathanger
+2628465337 coatholder
+262852623 ambulance
+26285283 ambulate
+2628626 boatman
+26287 boats coats
+2628762538 coatpocket
+26287625387 coatpockets
+262932 cobweb
+2629327 cobwebs
+2629464 amazing
+263 and
+2633 code
+26332273 codecard
+263333 coffee
+263346 coffin
+263353 coddle
+263373 coffre
+263437 bodies
+2637233 andrade
+263739 andrew
+2637397 andrews
+26374226 american
+2637643 android
+26384978 amethyst
+2639 andy body
+26392845337 bodybuilder
+26397 bodys
+264 ani bog
+26435 angel
+2643537 angeles
+26443 angie
+2645 boil coil
+26453 angle
+264537 boiler
+2645464 boiling
+26457 coils
+2646 coin
+264622 cognac
+264625 animal
+2646257 animals
+264628466 animation
+264637 cogner
+26467 coins
+26467388767568 coinreturnslot
+26467568 coinslot
+26479 angry
+26483 boite
+264837 boites
+2649 coiw
+265 bol
+2652 boka cola
+265232 colada
+26527 colas
+26527465 colargol
+26529 colby
+2653 coke cold
+26537 cokes
+2653767426 coldsorian
+265527 collar
+26553 ankle colle
+2655328 collect
+265532822537 collectables
+2655328466 collection
+2655328677 collectors
+2655343 college
+265537 ankles
+2655467 collins
+2656463 cologne
+265662 coloma
+26567 color
+2656733 colored
+26567385 colorful
+265677 colors
+265687 colour
+2658 bolt
+265866 column
+2658667 columns
+26587 bolts
+266 ann boo com coo
+2662 anna bomb boob comb
+266228 combat
+2662325 conceal
+266232533 concealed
+26624 conch
+2662437 boobies
+26624628466 combination
+2662463 combine
+26625 cnock
+26626 combo
+26627 bombs bonar boobs
+26627383 concrete
+2663 anne bond bone come cone
+26632285283 confabulate
+26633426 comedian
+266337 confer
+2663377 confess
+2663448728466 configuration
+266344873 configure
+2663463 confine
+2663473 bonfire
+266348466 condition
+266366 condom
+2663667 condoms
+266367 condor
+2663678 comfort
+266367837 comforter
+26637 bonds bones
+266382867 conductor
+2663848 conduit
+26638487 conduits
+26639 comfy
+2664 bong
+26642 booga comic
+266427 comics
+266439 boogey
+2664425283 annihalate
+266443 boogie
+2664437 boogier
+2664445283 annihilate
+266473428466 congregation
+2665 bonk book cook cool
+26652273 bookcase
+266522737 bookcases
+26652665 cookbook
+266526657 cookbooks
+266533 cooked
+266537 cooker cooler
+2665374663 cookerhood
+2665379 cookery
+266537988367457 cookeryutensils
+266543 cookie
+2665437 cookies
+2665464 booking cooking cooling
+2665464475263 cookingisland
+266546462837425 cookingmaterial
+266546472643 cookingrange
+266546478683 cookingstove
+266546488367457 cookingutensils
+2665465 comlink
+26657 books
+26657243 bookpage
+26657353 bookself
+266574353 bookshelf
+26657435837 bookshelves
+26657666 bookroom
+2666 ammo boom
+26662559 anomally
+2666259 anomaly
+2666263 command
+26662636368 commandment
+266626363687 commandments
+2666269 boombox
+2666328 connect
+2666328466 connection
+2666372425 commercial
+266638 bonnet
+26664 among
+266648 commit
+266648833 committee
+2666633 commode
+266666 common
+266686236368 announcement
+2666862363687 announcements
+26668642283 communicate
+266686422867 communicator
+266686489 community
+26669464 annoying
+2667 comp coop
+2667228 compact
+266722867 compactor
+266724 bonsai
+266724687 conscious
+2667248733 bonsaitree
+2667269 company
+2667274766 comparison
+2667277 compass
+26672786368 compartment
+266727863687 compartments
+26673 coord
+2667345 conseil
+26673457 conseils
+26673462837 coordinates
+266737 coords
+26673848466 competition
+26674 boorh
+26674337 consider
+266752468 complaint
+26675383 complete
+2667539 complex
+266765 consol
+2667653 console
+26676537 consoles
+2667657 consols
+2667678 compost
+26676863 compound
+26677 coors
+2667737767 compressor
+26678 boost
+2667837 booster
+2667858 consult
+266785828466 consultation
+2667863 compund consume
+26678637 consumer
+26678742867 constrictor
+266787828 construct
+266787828466 construction
+2667878284667 constructions
+26678837 computer
+266788374263 computergame
+266788377 computers
+266788637 constumes
+2668 boot
+2668228 contact
+266824637 container
+2668246377 containers
+2668363373 contendere
+26683643623 convenience
+26683662 anntenna
+26683675283 contemplate
+2668367528464 contemplating
+26683687 contents
+2668377283 conversate
+266837728466 conversation
+26683773 converse
+2668378 contest
+2668378377 converters
+266837867 convertor
+26683787 contests
+26683937 conveyer
+266839372358 conveyerbelt
+26683967 conveyor
+26684 booth
+2668428 convict
+2668437 another
+26684683 continue
+266847 booths
+2668648466 ammunition
+266868 amount
+26687 boots
+2668722378483 contraceptive
+26687278466 contraption
+2668742883 contribute
+26687482623 contrivance
+2668765 control
+26687653 controle
+266876537 controles
+2668765474 bootpolish
+2668765537 controller
+26687655377 controllers
+26687657 controls
+26687657666 controlroom
+26689 booty
+26693 booze
+267 amp cms cop
+2672 corb
+26725 coral
+267263453 corcodile
+26729 corby
+2673 bore cord core
+267335 bordel
+2673355 bordell
+26733556 bordello
+267337 border
+26737 cords
+2674 borg
+267437 copier copies
+2675 cork
+267526273 corkboard
+267543437 amplifier
+2676 corn
+2676262 corncob
+267634353 cornfield
+2676352537 cornflakes
+267637 corner
+26766 bosom
+267662 corona
+2676637 coroner
+267666288 cosmonaut
+267667 bosoms cosmos
+2677 boss cops corr
+267725 corral
+267737 copper
+26774367 corridor
+267743677 corridors
+267766 bossom
+2677667 bossoms
+267767487 corrosius
+267769 borrow
+267773 corpse
+2677737 corpses
+267837 copter
+26783883 corvette
+26785283 copulate
+2678863 costume
+26788637 costumes
+2679 copy
+267937 answer copyer
+267937464 answering
+2679628 copymat
+268 ant bot cnu cot
+26824 couch
+2682437 couches
+26827326 antarean
+2683 ante cove
+26832426237 antechamber
+2683276 antfarm
+26836268 covenant
+2683632 antenea
+2683662 antenna
+26837 cover
+2683733 covered
+26837464 covering
+268377 covers
+2684 both
+268436 anthem
+268437 bouger
+26844 cough
+268447 boughs
+26845 anvil
+2684669 anthony
+2684783 antique
+26847837 antiques
+26853 could
+2685337 boulder
+26853377 boulders
+268537 antler
+2685377 antlers
+268538 amulet
+268623 bounce
+2686237 bouncer
+26863 bound
+26863279 boundary
+26868 count
+26868362623 countenance
+268683696 countdown
+2686837 counter
+268683722852 countdracula
+26868373348 counterfeit
+26868377278 counterpart
+268683772787 counterparts
+2686837867 countertop
+2686879 country
+268689 bounty
+2687 ants anus cots
+2687266 bourbon
+26872687 couscous
+268736368 amusement
+268753 couple
+2687538 couplet
+268754647 couplings
+268766 coupon
+2687667 coupons
+268773 course
+268774766 antprison
+26878 court
+2687838 bouquet
+2687846873 courthouse
+268787666 courtroom
+268789273 courtyard
+2688243 cottage
+268853 bottle
+2688537 bottles
+268853762538 bottlerocket
+2688537625387 bottlerockets
+268866 bottom bouton cotton
+2688667 boutons
+2688667433 bottomside
+268887437 couturier
+2689 antz
+269 any bow box boy cow
+269273 coward
+26935 bowel
+26937 boxer boxes
+269374363 boyfriend
+2693743637 boyfriends
+2693774678 boxershort
+2695 bowl
+26957 bowls
+269626 bowman
+2696632666 bozoofamoo
+26969 a6969
+2697 boxs boys cows
+269929 anyway
+2699297 anyways
+26996 bozzo
+2699673 anyword
+27 as
+272 ara bra
+2722 crab
+27223 brace
+272232 arcada
+272233 arcade
+27223538 bracelet
+27224643 arachnid
+27225 crack
+2722533 cracked
+2722538 bracket
+272257 cracks
+272353 cradle
+272363 ascend
+272368 ascent
+27238 craft
+2724 arch brag crag
+272437 arches
+2724432687 archidamus
+2724483 archive
+27244837 archives
+27246 brain
+272467 brains
+27247 archs
+2724929 archway
+27253 brake
+272537 brakes
+272624 branch
+2726243 branche
+27262437 branches
+2726247 branchs
+27262537 brambles
+272626 braman
+27263 brand crane
+27263464 branding
+272639 brandy
+2726486 cranium
+27265 crank
+272657 cranks
+2727 arcs bras crap
+27273 arbre
+272737 arbres
+27274 crash
+2727433 crashed
+2727437 brasier
+27277 brass
+272774373 brassiere
+272779 crappy
+27278 apart
+272786368 apartment
+2727863687 apartments
+27283 crate
+272837 crater crates
+27289778 bratwrst
+272898778 bratwurst
+27293673 crawford
+2729437 brazier
+27295 crawl
+27295464 crawling
+272966 crayon
+27299 crazy
+273 ape are
+2732 area
+273224 breach
+27323 bread
+27324 brech
+27325 break
+2732532623 breakdance
+273253278 breakfast
+273257 breaks
+27326 cream
+27327 areas
+273278 breast
+2732787 breasts
+27327875283 breastplate
+273283 create
+273284 breath
+2732843 breathe
+27328437 breather
+273284464 breathing
+27328477729 breathspray
+2732867 creator
+27328873 creature
+273288737 creatures
+27333 breed
+273337 breeds
+273348 credit
+2733487 credits
+27335 creek
+27337 creep
+2733737 creeper
+27337377 creepers
+273379 creepy
+273393 breeze
+27362 arena
+273624 brench
+27362437 brenches
+27363 creme
+27368 brent
+2737 apes
+27377537 bressler
+27378873 aperture
+27382773 crevasse
+2738423 crevice
+27384237 crevices
+2738473 crevise
+2739 brew crew
+2739626 crewman
+2739636 crewmen
+2739737766 crewperson
+2739759 brewsky
+274 ash
+2742 crib
+274226 ashcan
+2742267 ashcans
+27423 bribe
+27425 brick
+27425626 brickman
+274257 bricks
+274259675 brickwork
+274277 briars
+274325 bridal
+27433 bride
+274332273 briefcase
+27433464 briefing
+274343 bridge
+2743437 bridges
+27435 ariel
+274353 bridle
+27437 ashes cries
+2744 brig
+274448 bright
+27444859 brightly
+27463 crime
+27464 bring
+27464625 criminal
+274646257 criminals
+274678663 brimstone
+2747453 ashpile
+27476347422 aphrodisiac
+2747753 cripple
+2747825 cristal
+27478257 cristals
+274786853 aristotle
+27483 argue
+27486368 argument
+2748729 ashtray
+2748837 critter
+27488377 critters
+275 ark ask
+27522688 askabout
+27523 asjad
+276 arm bro
+2762 croc
+2762263 armband
+27623 broad
+27623929 broadway
+27624247 armchair
+27624873 brochure
+276248737 brochures
+276263453 crocodile
+2762634537 crocodiles
+27626368 armament
+27627 crocs
+27645 broil
+276536 broken
+276556 apollo
+276564437 apologies
+276564473 apologise
+276564493 apologize
+2766 ason
+276624 brooch
+27663 crone
+276637 cromer crones
+2766377 cromers
+276647 armoir
+2766473 armoire
+27665 brook crook
+27665596 brooklyn
+276657 crooks
+27666 broom
+2766678425 broomstick
+27667 armor
+276687 armour
+2766879 armoury
+2767 arms crop
+27677 crops cross
+2767737 crosses
+276779255 crosswalk
+276824 crouch
+27684 broth
+2768435 brothel
+2768437 brother
+27684377 brothers
+276863 around
+2769 army crow
+27691227 crow_bar
+2769227 crowbar
+27692277 crowbars
+27693 crowd
+27696 brown crown
+276963 browne
+27696464 browning
+27697 crows
+276973 browse
+276976378 crowsnest
+277245 assail
+2772643 arrange
+277272887 apparatus
+2772735 apparel
+2772748466 apparition
+27727746283 assassinate
+2772858 assault
+2773625 arsenal
+27736253 assemble
+27736259 assembly
+277363243 appendage
+2773632437 appendages
+27737668 arseroot
+277378 arrest
+2773849464 appetizing
+2774258 asphalt
+27742858 asphault
+2774466368 assignment
+277478 assist
+2774782623 assistance
+277478268 assistant
+2775283 applaud
+27753 apple
+277537 apples
+27754228466 application
+277542623 appliance
+2775426237 appliances
+27759 apply
+2776468 appoint
+27764686368 appointment
+27766 apron
+277667 aprons
+27769 arrow
+277697 arrows
+277734363 apprehend
+27776224 approach
+27776825 approval
+2778937 appuyer
+278 art cpu cru
+27823 bruce
+27824349 crucifix
+27824349466 crucifixion
+2782627463 aquamarine
+27827486 aquarium
+2783 aque
+278336336747 artedmedoris
+27833828 aqueduct
+27835 cruel
+27836336747 artemedoris
+27836436747 artemidoris
+27837643 asteroid
+278376437 asteroids
+27842537 articles
+2784285283 articulate
+27843228 artifact
+2784342425 artificial
+27846 bruin
+278462842 asthmatic
+27846436747 artimidoris
+2784645426 aquinilian
+27846454267 aquinilians
+278473 aquire cruise
+2784737 cruiser
+278487 arthur
+27853 crule
+27862 crumb
+278624 crunch
+278624437 crunchies
+2786249 crunchy
+2786253 crumble
+278627 crumbs
+2787 arts
+278725 astral
+27874 brush crush
+2787437 crusher
+278749663 brushwood
+27876 astro
+278766288 astronaut
+278768873 astroturf
+278825493 brutalize
+2789675 artwork
+27896757 artworks
+279 cry
+279464 crying
+27978 crypt
+2797825 crystal
+27978257 crystals
+279787 crypts
+28 at
+28222 bubba
+282253 bubble
+2822537 bubbles
+28229 cubby
+282294653 cubbyhole
+2822946537 cubbyholes
+2823 cube
+2824253 cubicle
+28249 cubix
+2825 buck
+282529643 buckazoid
+2825296437 buckazoids
+282538 bucket
+282553 buckle
+2825667 cuckoos
+282566725625 cuckoosclock
+28257 bucks
+282827 avatar
+283 bud cue
+2833 buff cuff
+2833256 buffalo
+283333 cuffed
+28334478 buddhist
+283353 cuddle
+28337 cuffs
+28339 buddy
+28343 budge
+283435 cudgel
+28343623 audience
+2834867486 auditorium
+283683 avenue
+2837 cues
+283934737 budweiser
+284 bug
+28453 build
+2845337 builder
+28453464 building
+284534647 buildings
+28453842 athletic
+2847 bugs
+2847463 cuisine
+284746377 buisiness
+2852 bulb
+28527 bulbs
+2853 cuke
+2855 bull
+2855364 bulldog
+285538 bullet
+28553846 bulletin
+2855384626273 bulletinboard
+285538467 bulletins
+2855387 bullets
+2855538 bulllet
+28557 bulls
+2858 cult
+286 bum bun cum
+28624 bunch
+286353 bundle
+28642569 bungalow
+28643 avoid
+28644653 bunghole
+2865 bunk
+2865233 bunkbed
+28652337 bunkbeds
+28657 bunks
+28664546487 cunnilingus
+2866493 atomize
+2866774373 atmosphere
+28669 bunny
+2867 atop bump buns
+286737 bumper
+2867377 bumpers
+286766 bunson
+287 bus cup
+2872 curb
+28726273 cupboard
+287262737 cupboards
+2873 cure
+287328 bureau
+2873287 bureaus
+2874 bush
+287425 burial
+28743 cupid
+287433 buried
+287437 burger bushes cupids
+28743756468 burgerjoint
+2874377 burgers
+2874466 cushion
+28744667 cushions
+28745263 bushland
+287453 burgle
+28746377 business
+2876 burn
+287633 burned
+287637 burner
+2876464 burning
+2877 burp cups cuss
+28773629 currency
+2877368 current
+28773687 currents
+2877464 burping
+287769 burrow
+28778 burst
+2878 bust
+2878246 curtain
+28782467 curtains
+2878246763 curtainrod
+2878273 bustard custard
+28783 curve
+287847 curtis
+2878477 curtiss
+287863426 custodian
+28786637 customer
+287866377 customers
+2879 bury
+288 but ctu cut
+288224 attach
+288225 attack
+2882437 butcher
+288246 attain
+288278 ctucru
+2883 cute
+288363268 attendant
+2883678 attempt
+288368466 attention
+28842 attic
+288467 author
+288467489 authority
+288473 attire
+28848833 attitude
+2885379 cutlery
+2886 auto
+2886628 autonav
+288662842 automatic
+28866284428466 autonavigation
+288662866 automaton
+2886662453 automobile
+28866624537 automobiles
+28867 autos
+288674568 autopilot
+2887 cuts
+2887228466 attraction
+2888 butt
+288837 butter cutter
+28883724876 butterchurn
+28883734353 butterfield
+28883735437 butterflies
+288837359 butterfly
+288837688 butternut
+2888377 cutters
+28884653 butthole
+288866 button
+2888667 buttons
+288869 buttox
+28887377 buttress
+2888737737 buttresses
+289 buy
+28937 buyer
+2899273 buzzard
+28992737 buzzards
+289937 buzzer
+29 ax by
+29253 cycle awake
+292536 awaken
+2925464 cycling
+29256737 cyclopes
+2925677 cyclops
+292567737 cyclopses
+2926 cyan
+29273 award
+292737 awards
+2927426 azarian
+2929 away
+293 axe bye
+293293 byebye
+2937 axes
+2947 axis
+29546337 cylinder
+295463377 cylinders
+296464 awning
+297663 awsome
+2978263377 bystanders
+322233 facade
+3223 face
+32237 faces
+3224 each
+322425 facial
+3224548437 facilities
+32245489 facility
+322742 fabric
+322742283 fabricate
+3227427 fabrics
+3228 fact
+3228679 factory
+323 dad
+32337 fader
+323377 faders
+32339 daddy
+323396 daddyo
+323397 daddys
+3237 dads
+324 fbi dbg fag
+3243553 echelle
+324437 dagger
+324468 faggot
+32447 dbggr
+32453 eagle
+3246 echo
+3247 fags
+3247437 daisies fairies
+32479 dairy daisy fairy
+324797 fairys
+32484 faith
+324847 faiths
+325 dak
+3253 dale fake
+3255 fall
+32557 falls
+32573 false
+326 dam dan fan
+32623 dance
+3262335667 dancefloor
+326237 dancer
+3262377 dancers
+326243 damage
+3262464 dancing
+3263 dame fame
+3264 dang
+326435 daniel
+3264357 daniels
+326437 danger
+326437687 dangerous
+326453 dangle
+32645437 families
+326459 family
+3264597 familys
+3266 damn
+326633 damned
+326648 dammit
+3266669 economy
+32669 danny
+3267 fans
+326735 damsel
+326736 dampen
+32682 fanta
+327 ear far
+32726 ecran
+327267 ecrans
+3273 fare fase
+32737 farer
+32739355 farewell
+3274 dash
+327426273 dashboard
+327473 ecrire
+3275 dark
+32756377 darkness
+32757666 darkroom
+32759 early
+3276 darn farm
+327637 farmer
+327646873 farmhouse
+32765263 farmland
+3277 ears
+3277464 earring
+32774647 earrings
+3278 dart east fart fast
+327826273 dartboard
+327836 fasten
+327836377 fasteners
+327837 faster
+3278378 fastest
+32784 darth earth
+3278459 earthly
+3278482337 darthvader
+327849676 earthworm
+3278626 dartman
+32787 darts
+32788476937 dartthrower
+3278867737 darttosser
+328 eat fat
+3282 data
+32822265 databank
+328238 faucet
+3282387 faucets
+328269 fatboy
+328274663 dataphone
+3283 date dave
+32836 eaten
+32836879 daventry
+32837 eater
+328373767 eavesdrop
+3283737677464 eavesdropping
+328377 eaters
+32839 davey
+32843 david davie
+3284323 fathead
+328437 father
+32843766 davidson
+3284377 fathers
+32844837 daughter
+328448377 daughters
+328464 eating
+32847 davis
+32858 fault
+328587 faults
+32862 fauna
+32867 favor
+3287 eats
+328837 fauves
+32889 fatty
+3289 davy
+329 day
+329233 daybed
+3296 fawn
+32967 fawns
+3297 days
+33 de ed ff
+33225 fecal
+3322728283 decapatate
+3322748283 decapitate
+332283 debate
+3322848283 deactivate
+3323 dead
+33232733 deceased
+3323537283 decelerate
+33237 feces
+33247437 decipher
+33247466 decision
+3325 deal deck
+3325273 declare
+332537 dealer
+3325377 dealers
+3325463 decline
+3325464 dealing decking
+3326 dean
+3326337 decoder
+332668264628466 decontamination
+33267283 decorate
+3326728466 decoration
+3327 dear fear
+33273273 decrease
+332747 debris
+33278 feast
+3328 debt
+33284 death debug
+3328437 feather
+33284377 feathers
+33284729843 deathscythe
+33284847328 deaththreat
+3328873 feature
+333223 deface efface
+333253 feeble
+3333 feed
+33332283 defecate
+333328 effect
+3333464 feeding
+3333673 defense
+333463 fefine
+3335 feel
+3335283 deflate
+3335464 feeling
+3337 deep deer
+3337379464 deepfrying
+33377546 deerskin
+3338 feet
+3339 eddy
+3343 edge
+3343423 edifice
+334733 degree
+3347337 degrees
+3348466 edition
+33484667 editions
+3349372833 dehydrated
+33542283 delicate
+335424687 delicious
+335463 feline
+3354837 deliver
+33548379 delivery
+33548737 delivrer
+3355 dell
+33552 fella
+335527 fellas
+33552846 fellatio
+335569 fellow
+3355697 fellows
+335669 felony
+335746742 delphoria
+3358287 deltaur
+336 den fem fen
+3362 fenc
+33623 fence
+336237 fences
+336253 female
+3362537 females
+3363873 fenetre
+33638737 fenetres
+33646463 feminine
+336473 denise
+336476 deniro
+3366 demo femo
+33663 femme
+33665328527493 demolecularize
+33665474 demolish
+33666 demon
+336667 demons
+3369 deny
+337 eds
+3372363 descend
+337236373 descendre
+337237 fesces
+33727478466 description
+337278 depart
+33727833 departed
+3372786368 department
+337363368 dependent
+337378 desert
+337446 design
+33744628466 designation
+337473 desire
+337478 desist
+3375 desk
+33757 desks
+3375867 desktop
+3376 fern
+337633 derned
+337637 fermer
+3376748 deposit
+3377377 depress
+3377377466 depression
+3377425 derrick
+33774257 derricks
+33774373 derriere
+337746437 derringer
+337786 ferrum
+33779 ferry
+33779626 ferryman
+3378 dept
+33784 depth
+3378453 fertile
+337845493 fertilize
+3378454937 fertilizer
+337847 depths
+33786238 dervocet
+3378769 destroy
+33787828 destruct
+33787828466 destruction
+337887 festus
+337889 deputy
+338224 detach
+33822437 detacher
+338228466 education
+338245 detail
+338278283 devastate
+33832867 detector
+338328677 detectors
+33835673 develope
+33835676368 development
+33837 deter
+338374368 detergent
+338423 device
+33845 devil
+3384565 dethlok
+33846283 detinate
+338687 devour
+33874887 detritus
+339 dew
+339273 edward
+3392737 edwards
+34 dg eh ei fi
+3424667842 diagnostic
+34246678427 diagnostics
+3424726 diagram
+34247267 diagrams
+3425 dial dick
+3425328 dialect
+34254323 dickhead
+34255377 dickless
+34256483 dialogue
+34257 dials dicks
+342623 fiance
+3426233 fiancee
+34262337 fiancees
+3426237 fiances
+3426663 diamond
+342666328 diconnect
+34266637 diamonds
+34273 fibre
+342737 diaper
+34274726 diaphram
+34277432 diarrhea
+34279 diary
+3428466 fiction
+343 did die
+343337368 different
+3433428589 difficulty
+343353 fiddle
+34353 field
+343537 fields
+34363 fiend
+34379 fiery
+34384 fifth
+344 dig egg
+34436 eigen
+344378 digest
+344378466 digestion
+344437 digger
+34448 eight fight
+3444825 digital
+3444837 fighter
+344484 eighth
+3447 eggs
+344873 figure
+3448737 figures
+34487463 figurine
+34524 filch
+34526368 filament
+3453 file
+34532273 filecase
+3453269 filebox
+34536 dildo
+34537 files
+345484486 dilithium
+3455 fill
+34553 fille
+345533 filled
+34553883 fillette
+3455464 filling
+3456 film
+345837 filter
+34584 filth
+346 dim din ego
+346262425 financial
+346262437 financier
+34626483 dinamite
+3463 dime dine find fine
+34637 dimes diner
+3464 ding
+346437 finger
+3464377 fingers
+346464 dining
+34646482253 diningtable
+346464822537 diningtables
+346474 finish
+346478 finist
+346543 dinkie
+3466 egon
+34662 dhooa
+346637 dinner
+34667287 dinosaur
+34669787 dionysus
+347 dip dir dis fir
+3472 disc
+3472253 disable
+3472273 discard
+3472376 discern
+347242743 discharge
+34726 disco
+347262255 discoball
+3472637 discoer
+3472666328 disconnect
+347268379 discovery
+347268773 discourse
+347276 disarm
+347277327 disappear
+3472776468464 disappointing
+3472777683 disapprove
+3472877 discuss
+3472877466 discussion
+3473 fire
+34732625 firecock
+3473273 disease
+34732737 diseases
+3473276 firearm
+34732767 firearms
+347328466 direction
+34732867 director
+347328679 directory
+3473398464847437 fireextinguisher
+34734673 firehose
+34734766 fireiron
+347362275 disembark
+3473626935 disembowel
+347364243 disengage
+34737 fires
+3473748 firepit
+347375223 fireplace
+34737584 fireplug
+347376537 firepoker
+34737828466 firestation
+34739663 firewood
+34739675 firework
+347396757 fireworks
+3474 dish fish
+34742663 fishbone
+347437 dishes fishes
+347437626 fisherman
+3474464 fishing
+34744645463 fishingline
+3474464763 fishingrod
+34744647653 fishingpole
+3474464822553 fishingtackle
+3474666437 fishmonger
+347468347283 disintegrate
+34747663 fishpond
+34748473 disguise
+3474878 disgust
+34749 fishy
+347492 fishx2
+3474927437 dishwasher
+3475 disk
+34753883 diskette
+347562283 dislocate
+34756343 dislodge
+3475662 diploma
+34756627 diplomas
+34762 firma
+347626368 firmament
+347626853 dismantle
+347636237 dismember
+34766868 dismount
+34772824 dispatch
+3477282437 dispatcher
+347736253 dissemble
+347736737 dispenser
+347743 dipsie
+347743368 dissident
+34775223 displace
+3477529 display
+34775297 displays
+3477623 disrobe
+347767 fissop
+34776725 disposal
+34778 first
+3477873 fissure
+34778737 fissures
+3477878 disrupt
+347787837 disrupter
+347787867 disruptor
+34779 dipsy
+3478 dirt
+34782255 dirtball
+34782623 distance
+34784648474 distinguish
+3478678466 distortion
+347874288466 distribution
+3478872 disturb
+34789 dirty
+34824 ditch
+34826 divan
+3483 dive five
+348433 divide
+34843464 dividing
+34847466 division
+34886 ditto
+349 fix
+34926 diwan
+34933 fixed
+3498873 fixture
+34988737 fixtures
+35 dj el
+352285283 ejaculate
+3524 flag
+3524355283 flagellate
+35245 flail
+352463 elaine
+35247 flags
+35247653 flagpole
+352478233 flagstaff
+35253 flake
+35263 flame
+352637 flames
+3526444 flamgig
+3526464 flaming
+3527 flap
+35273 flare
+35274 flash
+3527437 flasher
+35274464 flashing
+3527454448 flashlight
+35275 flask
+352757 flasks
+3527842 elastic
+3528 flat
+35287 flats
+3528836 flatten
+353 ele elf
+35328 eject
+3532872 electrc
+35328742 electric
+3532874225 electrical
+35328742489 electricity
+3532874289 electricty
+3532876624 electromag
+3532876642 electronic
+35328766427 electronics
+3532876763 electrorod
+35328767763 electroprod
+3533 flee
+35337 elder
+3533759 elderly
+35362 elena
+3536368279 elementary
+35363687 elements
+35374 flesh
+35374268 elephant
+35382867 elevator
+353828677 elevators
+353836 eleven
+35387 fleur
+353877 fleurs
+35425 flick
+3542537 flicker
+3542537464 flickering
+35437 flies
+354448 flight
+35464 fling
+354646283 eliminate
+35468 flint
+3547 flip
+35473567 flipflop
+35478 flirt
+35492 eliza
+354922384 elizabeth
+3549223847 elizabeths
+354927 elizas
+354947 elixir
+355378 ekkert
+35625 flock
+35628 float
+35628464 floating
+356287 floats
+3564 flog
+35667 floor
+3566726273 floorboard
+35667262737 floorboards
+3566726837464 floorcovering
+35667464 flooring
+35667628 floormat
+356677 floors
+3567 flop
+35672 flora
+356738 floret
+3567387 florets
+35674935 florizel
+356779 floppy
+35687 flour
+3569 flow
+356937 flower
+3569377 flowers
+356937768 flowerpot
+358243283 elucidate
+3583 flue
+35833 elude fluff
+35837 elves
+35843 fluid
+35874 flush
+3587437 flusher
+35883 flute
+359 fly
+35937 flyer
+359464 flying
+36 do fm
+362 dna doc
+36237 ember
+362377 embers
+362426837 enchanter
+36245 email
+3625 dock
+3625464 docking
+362567873 enclosure
+36257 docks
+3626 foam
+3627 docs
+3627223 embrace
+36286368 document
+362863687 documents
+362867 doctor
+3628677 doctors
+362925673342 encyclopedia
+363 dod doe end
+3633 doff
+363337 fodder
+363337633 dodderned
+36343 dodge
+3636 dodo
+363637 doener
+3636437 enemies
+3636469 enenimy
+36369 enemy
+3637253 emerald
+36374362437 emergencies
+363743629 emergency
+36374473 energise
+36374493 energize
+363749 energy
+364 dog fog
+364243 engage
+364443 doggie
+364463 engine
+36446337464 engineering
+3644637 engines
+36449 doggy
+3645243 foilage
+364636 eminem
+36464 doing
+3647 dogs
+364723353 dogpaddle
+364728464 engraving
+364853 engulf
+3652 fola
+3652743 enlarge
+3653 fold
+365333 folded
+365337 folder
+3653377 folders
+36537 folds
+3653837 enlever
+36539 dokey
+3654243 foliage
+3655 doll
+365527 dollar
+3655272455 dollarbill
+3655277 dollars
+365569 follow
+36556937 follower
+365569464 following
+36557 dolls folks
+36559 dolly
+36569 enjoy
+3657446 dolphin
+36574467 dolphins
+366 don doo
+36618 don't
+3662 emma
+366243 doobie
+366253 donald
+366283 donate
+3663 dome done fone food foof
+366323 doodad
+366353 fondle
+366366 doodoo
+36637 domes doner foods
+366378833 foodstuff
+3663788337 foodstuffs
+3664 dong
+36642453 domicile
+366437 donger
+366442539 doohickey
+3665 fool
+366539 donkey dooley
+3665397 donkeys
+3665474 foolish
+366637 donner
+36669 donny
+3667 door
+36672 door2
+36672355 doorbell
+366723557 doorbells
+3667539 doorkey
+36675625 doorlock
+3667626 doorman
+3667628 doormat
+36676287 doormats
+36677 doors
+36677837 doorstep
+3667929 doorway
+36679297 doorways
+3668 dont font foot
+36682255 football
+366844 enough
+36684455 foothill
+366844557 foothills
+36684667 emotions
+3668562537 footlocker
+36687284 footpath
+36687837 footstep
+366878377 footsteps
+367 for
+36723 force
+3672334353 forcefield
+367237 forces
+3673 dope ford
+36736253 ensemble
+36737 doper
+36737546 foreskin
+367377 dopers
+367378 forest
+3674 dosh
+36743 forge
+367446 ensign
+36746 ensin
+3675 dork fork
+367569 employ
+36756933 employee
+3675696368 employment
+36757 forks
+3676 dorm form
+367628 format
+367628466 formation
+3676284667 formations
+367648679 dormitory
+36767 dorms forms
+36767486 emporium
+367735 dossel
+3677626 forsman
+3678 fort
+36784 forth
+3678473 enquire
+36787 forts
+36787377 fortress
+3678737737 fortresses
+3678863835537 fortuneteller
+36789 empty
+367893687 fortyfour
+36789749 fortysix
+36789896 fortytwo
+3679273 forward
+36792737 forwards
+368 dot
+368253 double
+36828 doubt
+36835673 envelope
+36837 enter
+3683782466368 entertainment
+368423 entice
+36844 dough
+3684736668 enviremont
+36847666368 environment
+3685 foul
+36868246 fountain
+3687 four
+368715323 four-leaf
+36872457 entrails
+36872623 entrance
+368726237 entrances
+36873 douse
+368737 entrer
+36875323 fourleaf
+36878336 fourteen
+368784 fourth
+368789 fourty
+3687893687 fourtyfour
+368789749 fourtysix
+368789896 fourtytwo
+36879 entry
+36879929 entryway
+369 fox
+3693 doze
+36935 dowel
+36936 dozen
+36937 foyer
+3695 fowl
+3696 down
+36964455 downhill
+36965623 download
+36967473 downpipe
+369677688 downspout
+3696782477 downstairs
+36969273 downward
+37 dr fs
+372 f72
+372252867 escalator
+372273 escape
+37228466 fraction
+3722852 dracula
+37228873 fracture
+372342283 eradicate
+3724 drag
+3724446 fraggin
+37244464 fragging
+37246 drain
+37246243 drainage
+37246368 fragment
+372463687 fragments
+3724637 drainer
+372464653 drainhole
+372466 dragon
+372467 drains
+372467473 drainpipe
+37253 drake
+372537 drakes
+3726227 escobar
+372624726 francisco
+37263 frame
+372633 framed
+372637 frames
+37265 frank
+372653678346 frankenstein
+372659 franky
+37273 drape erase
+372737 drapes eraser
+3727379 drapery
+3727486473 escritoire
+3728 frat frau
+3729 draw
+372937 drawer
+3729377 drawers
+3729452867 frazilator
+3729464 drawing
+37294647 drawings
+37325 freak
+3732546 freakin
+37325464 freaking
+373257 freaks
+37326 dream
+37328466 erection
+3733 epee fred free
+373337425 frederick
+37333745 frederik
+373337457 frederiks
+37337 freds
+373378953 freestyle
+3733929 freeway
+373393 freeze
+3733937 freezer
+37339464 freezing
+373444837 freighter
+373624 french
+3736925 frenzal
+37377 dress
+3737733 dressed
+3737737 dresser
+37377377 dressers
+37378368 frequent
+3742 eric
+37422 frica
+37433 dried
+374343 fridge
+374363 friend
+3743637 friends
+37437 fries
+37438 drift
+3744 frig
+3744372867 frigerator
+3744446 friggin
+37444464 frigging
+3745 erik
+37455 drill
+3745546486937 drillingtower
+37455464869377 drillingtowers
+37465 drink
+3746537 drinker
+37465377 drinkers
+37465464 drinking
+374656224463 drinkmachine
+374657 drinks
+3747 drip
+37475 frisk
+37477 drips
+3748274 epitaph
+37482747 epitaphs
+37483 drive
+3748346 drivein
+374837 driver
+3748377 drivers
+37483929 driveway
+374839297 driveways
+3748464 driving
+3748836 fritten
+375466 eskimo
+37546644678 eskimoghost
+375466774748 eskimospirit
+3764 frog
+37643 droid
+376437 droids
+376542 frolic
+3766 from fron
+37663 frond
+376637 fronds
+37667 frons
+37668 front
+3767 drop
+37672 erosa
+376727 erosas
+3767466 erosion
+37675425 dropkick
+3767633 dropoff
+37677 drops
+376774647 droppings
+37678 frost
+376789 frosty
+3767967 dropzor
+37683 drove
+376936 frozen
+37696464 drowning
+3773623 essence
+37767 error
+3779 espy
+378 fst
+378225474 establish
+37825 equal
+3784 drug
+37847 drugs equip
+378476368 equipment
+37848 fruit
+37848464 fruiting
+378487 fruits
+3786 drum
+37865 drunk
+37865273 drunkard
+37865379466 drunkerwion
+378657 drunks
+3786637 drummer
+37867 drums
+378678425 drumstick
+3788279 estuary
+379 dry fry
+37937 dryer
+379377 dryers
+379464 drying frying
+3798543 erzulie
+38 et ft
+382 eva
+3822597887 eucalyptus
+3823 dube
+38233 evade
+3824373 etagere
+38243737 etageres
+3825 duck fuck
+382537 fucker
+3825464 fucking
+38257 ducks
+3828 duct
+38287 ducts
+383 eve
+3833 dude
+38337 dudes
+3833883 dudette
+3835 fuel
+383539 fudley
+3836 even
+3836464 evening
+38368 event
+3837 duds ever eves
+3837625 eternal
+38376489 eternity
+38379 every
+3837984464 everything
+384 dui
+38433623 evidence
+3843742 etheria
+3845 evil
+3847237283 eviscerate
+3855 full
+385866 fulton
+386 fun
+3862 dumb
+386224 funbag
+3862247 funbags
+38627837 dumbster
+3862924837 dumbwaiter
+3863 dune fund
+3863464 funding
+38637 dunes fumes funds
+3864 dung
+3864366 dungeon
+38644 fungi
+386444 fungii
+386453 etoile
+3864537 etoiles
+386487 fungus
+38659 funky
+3866437 dummies
+38669 dummy dunny funny
+3867 dump
+3867464 dumping
+38677837 dumpster
+387 ets fur
+3872255 furball
+3873 fuse
+3873269 fusebox
+38737 fuses
+387542283 duplicate
+3875422837 duplicates
+3876223 furnace
+3876474 furnish
+3876474464 furnishing
+38764744647 furnishings
+387648873 furniture
+387672 europa
+38779 furry
+3878 dust
+3878246 dustbin
+387825683 dustcloud
+387837 duster
+3878683 dustove
+38866 futon
+388872 futura
+388873 future
+3889 duty
+3899 fuzz
+39 dx ex
+39228283 excavate
+392372473 excercise
+39242643 exchange
+3925 eyal
+3926463 examine
+39264637 examiner
+3926753 example
+39273 dwarf
+392737 dwarfs
+3927383 excrete
+3927837 dwarves
+392873 excuse
+393 dye eye
+3932255 eyeball
+39322557 eyeballs
+393225584464 eyeballthing
+3932255844647 eyeballthings
+3932769 eyebrow
+3932883 execute
+3934653 eyehole
+3935537 dweller
+39355464 dwelling
+3937 ewer eyes
+39372473 exercise
+39374323 eyepiece
+393743237 eyepieces
+39384464 eyething
+393844647 eyethings
+394 dwi
+3942878 exhaust
+39464 dying
+39465437 dwinkies
+39478 exist
+394783623 existence
+3948 exit
+394863 exhume
+39529 exlax
+3953 dyke
+39626483 dynamite
+397267466 expansion
+39732867283 expectorate
+39735 expel
+3973743623 experience
+3973746368 experiment
+397374636825 experimental
+397374636828466 experimentation
+397378 expert
+397473 expire
+3974733 expired
+3975246 explain
+3975648 exploit
+3975673 explore
+397567483 explosive
+3975674837 explosives
+3976863 expound
+3977377 express
+39836337 extender
+398363377 extenders
+3983636 extendo
+39837467 exterior
+39837625 external
+39837646283 exterminate
+3984648474 extinguish
+398464847437 extinguisher
+39872 extra
+3987228 extract
+3987283773787425 extraterrestrial
+39872837737874257 extraterrestrials
+4131 i.d.
+4155 i'll
+416 i'm
+42 gb
+422 gab hac
+4224828 habitat
+4225 hack
+42272 haara
+423 ice
+4232374 iceberg
+42323747 icebergs
+42324378 icechest
+423269 icebox
+42337 hades
+423438 gadget
+4234387 gadgets
+424 gag hag
+4242842 hagatha
+424453 haggle
+4245 hail
+4247 hags hair
+42477 hairs
+4247746 hairpin
+42479 hairy
+425 gal
+42522867 galactor
+42529437 galaxies
+425299 galaxy
+4253 gale half
+42533278 halffast
+4255 hall
+425539 galley
+42557 halls
+4255929 hallway
+4258 halt
+42583 halve
+426 h2o ham
+426253 gamble
+42625377 gamblers
+426253874437 hambleurgher
+42625464 gambling
+426287437 hamburger
+4263 game hand
+4263269 gameboy
+42632833 handcuff
+4263283333 handcuffed
+426328337 handcuffs
+4263385 handful
+426344 gandhi handig
+4263486 handgun
+42634867 handguns
+426353 handle
+426353724433 handkerchief
+4263688 handout
+42636887 handouts
+42637 games hands
+42637245 handrail
+426372457 handrails
+4263738 handset
+4263742 ganesha
+42637663 handsome
+4264 gang hang
+426437 hanger
+4264464 hanging
+42645866 hamilton
+4264636237 gangmember
+42646362377 gangmembers
+426474 hamish
+4265 hank
+42652 ganja
+426538 hamlet
+42659 hanky
+4265972659 hankypanky
+4266225 hammack
+426637 hammer
+42663733 hammered
+426637334323 hammeredhead
+4266625 hammock
+427 gap gas has
+4272 garb hara
+42722343 garbadge
+4272243 garbage
+4272243226 garbagecan
+427242 garcia
+427243 garage
+4272433667 garagedoor
+4272434283 garagegate
+42725474 harakiri
+427266 garcon
+427266638 garconnet
+427267 harbor
+4272687 harbour
+427277 harass
+4273 gape hard hare
+427336 garden
+4273367 gardens
+427346 gardin
+42737 gases
+42739273 hardware
+4274 gash hash
+4274474 hashish
+427453 gargle
+427539 harley
+427568 harlot
+4276 harm
+4276368 garment
+42763687 garments
+427638 garmet
+4276387 garmets
+427653 harold
+42765377 harmless
+42765463 gasoline
+4276669 harmony
+4277 gaps gars gasp
+427736 happen
+42773633 happened
+42774 harri
+4277437 harpies
+4277464 gasping
+42777424673 harpsichord
+42779 happy harpy harry
+4278 harv
+42783 haste
+427837837 harvester
+427839 harvey
+42784 garth
+4278537 hastler
+428 hat
+42824 hatch
+4282438 hatchet
+42824929 hatchway
+4283 gate hate have
+4283533737 gatekeeper
+42837 gates
+4283929 gateway
+42843 gauge
+428437 gather
+428437464 gathering
+4285 haul
+42867 gator
+4286833 haunted
+4287 hats
+4287225 hatrack
+42877626 haussman
+4288 haut
+429 hay icy
+429273 hazard
+4293 gaze haze
+429326 gazebo
+42934353 hayfield
+4295 gawk hawk
+42978225 haystack
+43 gd he id if
+4323 head
+432326273 headboard
+43234327 headgear
+432354448 headlight
+4323562 headjob
+4323627837 headmaster
+43237 heads
+432378278377 headquarters
+432378663 headstone
+4323786637 headstones
+4325 heal
+432537 healer
+432553 heckle
+432584 health
+4325849 healthy
+4327 gear heap hear
+4327464 hearing
+432774438 gearshift
+43278 heart
+432784 hearth
+4328 heat
+43283 heave
+432836 heaven
+4328367 heavens
+432837 heater
+43289 heavy
+4332 idea
+43343 hedge
+433437 hedges
+43343769 hedgerow
+4335 geek
+43368434228466 identification
+43368439 identify
+4338 heft
+433937 geezer
+4346 hein
+43468 idiot
+4347 heir
+435 gel
+43536 helen
+4354 heli
+4354267837 helicopter
+4355 hell
+435546863 hellhound
+43556 hello
+435638 helmet
+4357 help
+43571 help!
+436 gem geo hen
+4362336784 henceforth
+43624626 henchman
+43624636 henchmen
+43633 geode
+436337 geodes
+4363725 general
+43637283 generate
+4363728387 generateur
+436372867 generator
+4363728677 generators
+43637287423 generatrice
+436374257 hendricks
+4363782 genesta
+436382542 genetalia
+43643 genie
+43648257 genitals
+4365625 hemlock
+4366234 gennadi
+43662349 gennadiy
+4366239 gennady
+4367 gems gens henp
+436734 geordi
+436743 george
+43678663 gemstone
+4368 gent
+436824 hentai
+436853626 gentleman
+436853636 gentlemen
+437 her ids
+4372 herb
+4372378 herbert
+43727 herbs
+4373 here
+4374237887 hephaestus
+4376 hero
+437626 german
+437643 geroge
+437646 heroin
+43764663 hermione
+437648 hermit
+437648243 hermitage
+4377 herr hers
+43773 herpe
+4377353 herself
+4377464 herring
+4378873 gesture
+438 get het
+438376 hetero
+43876 hetro
+4388464 getting
+439 gey hey
+4392 heya
+439737 geyser
+44 ii hh hi
+44268 giant
+44268377 giantess
+4433 hide
+44331688 hide-out
+4433687 hideous
+4433688 hideout
+44339 hidey
+4433946 hideyho
+4434 hifi
+4437645974427 hieroglyphics
+4438 gift
+443886 ghetto
+4438862527837 ghettoblaster
+444 iii
+4444 high
+444424247 highchair
+44447533737 highsleeper
+4444929 highway
+444687466 ghinusion
+4446874667 ghinusions
+4452 hija
+445225 hijack
+4453 hike
+4455 hill
+44557 hills
+446 gin him
+4463 hind
+44643 ginie
+44643727323 gingerbread
+446483 ignite
+4464837 igniter
+44648466 ignition
+44663 gimme
+446643 gimmie
+4467353 himself
+44678 ghost
+446787 ghosts
+4468 hint
+44685 ghoul
+446857 ghouls
+44687 hints
+447 hip his iis
+4475 girl
+447524 hislah
+44753 girle
+4475374363 girlfriend
+44753743637 girlfriends
+44757 girls
+4477 hips hiss
+4477437 hippies
+447797 hippys
+4478679 history
+448 git hit
+44824 hitch
+448244453 hitchhike
+4482444537 hitchhiker
+44824464 hitching
+4483 give hive
+448437 hither
+448464 giving
+448537 hitler
+4485377 hitlers
+4492 hiya
+44929 hiway
+452623 glance
+45273 glare
+45277 glass
+452772243 glasscage
+452772273 glasscase
+4527737 glasses
+452779675 glasswork
+45326 gleam
+45326464 gleaming
+453267 gleams
+45433 glide
+4546637 glimmer
+4546637464 glimmering
+45466377 glimmers
+4546773 glimpse
+45468 glint
+4547836464 glistening
+45478367 glistens
+4548837 glitter
+4548837464 glittering
+45488377 glitters
+455 ill
+4553425 illegal
+4558646283 illuminate
+45623 globe
+45683 glove
+456837 gloves
+4569 glow
+4569464 glowing
+45699 glowy
+4583 glue
+4584 glug
+4588866 glutton
+46 go hn ho im in
+462248 hobbit
+4622484653 hobbithole
+46224846873 hobbithouse
+462253 gobble
+46226828466 incantation
+4623673 incense
+462423 imbibe
+46243 image
+462437 images
+462462546 hobgoblin
+4624625467 hobgoblins
+4625 goal
+462546 goblin
+4625463 incline
+4625467 goblins
+4625833 include
+4626 hobo
+46269 inbox
+46273273 increase
+4628 goat
+462833 goatee
+46287 gnats hocus
+4629 gnaw
+463 god hoe
+463268 infant
+4633264 goddang
+4633266 goddamn
+463326633 goddamned
+463348 hoddit
+4633484653 hoddithole
+46334846873 hoddithouse
+4633626 hoffman
+46336267 hoffmans
+46337 infer
+463373633623 independence
+4633766 inferno
+4634843825 individual
+4635282253 inflatable
+4635283 inflate
+463583623 influence
+4636 info
+463668437 godmother
+463676 inform
+46367628466 information
+4637 gods
+4637228466 infraction
+4638237 inducer
+46387879 industry
+464 hog
+4642248268 inhabitant
+46422482687 inhabitants
+4642528466 inhalation
+464253 inhale
+464344 hohegh
+464352 ingela
+464378 ingest
+464453 goggle
+4644537 goggles
+46464 going
+4647 hogs
+4647334368 ingredient
+46473343687 ingredients
+46478 hoist
+464787 hoists
+4648 init
+4648425493 initialize
+46484257 initials
+4648473 inguire
+465 ink
+4652 hola
+4653 gold hold hole
+465327633 goldarned
+465328 inject
+46533474 goldfish
+465336 golden
+465337 holder
+4653464 holding
+4653468439255 holeinthewall
+46536725 goldorak
+46537 holer holes
+4654329 holiday
+46546842 golgotha
+46552 holla
+465537 holler
+465569 hollow
+4656 holm
+4656345645 holodilnik
+46564726 hologram
+46564727442 holographic
+4657837 holster
+465873 injure
+465879 injury
+4659 holy
+466 goo hoo inn
+466237 gonads goober
+4662737 innards
+466283 inmate
+4663 good home hood
+46632 honda
+4663238376666 goodafternoon
+466329 goodby
+4663293 goodbye
+4663329 goodday
+46633836464 goodevening
+4663437 goodies
+466346343353 hoodindiddle
+46635377 homeless
+4663626 goodman
+466366 hoodoo
+46636676464 goodmorning
+46637 goner goods homer homes inner
+46639 gomez goody honey
+466392662 honeycomb
+46639527 honeyjar
+466396666 honeymoon
+466464 homing
+4665 hook
+466533737 innkeeper
+466537 hooker
+4665377 hookers
+46657 hooks
+4666 goon homo
+46662368 innocent
+46663 gnome homme
+46667 goons honor
+466672253 honorable
+466687 honour
+4667 hoop
+467 hop imp
+467247 impair
+46727423 inscribe
+46727478466 inscription
+467274784667 inscriptions
+467278 impart
+4673 gore hope hose
+467328 insect
+4673287 insects
+46735 impel
+46737 hoses
+46737425 imperial
+46737473 hosepipe
+46737626 horesman
+467378 insert
+46743 gorge
+467433 inside
+46743687 gorgeous
+467464 goring
+4674667 gorgons
+4674966 horizon
+4674966825 horizontal
+467536368 implement
+4675363687 implements
+4675467 hopkins
+4676 horn
+4676263493 gormandize
+467638 hornet
+4676387 hornets
+467639 horney
+46767 horns
+467678268 important
+46769 horny
+4677 horq
+46773 horse
+4677328 inspect
+467737 hopper horses
+467743 horsie
+467747 gossip
+46774766 imprison
+46774825 hospital
+4678 host
+4678255 install
+4678268 instant
+4678473 inquire
+46784888466 institution
+4678573 impulse
+46787 horus
+467872623 insurance
+467878284667 instructions
+4678786368 instrument
+46787863687 instruments
+468 got hot inv
+4682337 invader
+46835 hotel hovel
+46836 inven
+4683682473 inventaire
+468368466 invention
+46836867 inventor
+468368679 inventory
+46837 hover
+46837228 interact
+46837228483 interactive
+46837268773 intercourse
+4683727238 hovercraft
+468373373 interfere
+46837378 interest
+4683742522842 intergalactic
+46837467 interior
+468376257 internals
+46837638 internet
+4683766368 government
+468377328 intersect
+468377328466 intersection
+46837764283 interrogate
+46837773837 interpreter
+468377738464 interpreting
+468377878 interrupt
+468378 invest
+46837833 inverted
+46837844283 investigate
+468378463 intestine
+4683784637 intestines
+468474245489 invisibility
+468474253 invisible
+4684828466 invitation
+46848284667 invitations
+4686 goto into
+46863 hound
+4686367 hounfor
+46863687 hounfour
+4686426 houngan
+46869422833 intoxicated
+4687 hour
+46873 house
+46873359 housefly
+468734653 household
+4687366943357 houseonwheels
+468737 houses
+4687464 housing
+46876 intro
+468843 hottie
+468882 hottub
+4689473 hotwire
+469 how
+46939 howdy
+4696 gown
+46967 gowns
+4697 hows
+47 is hq
+4722 grab
+47222 isaac
+47233 grade
+47233484 graffiti
+472334847 graffitis
+472334884 graffitti
+47233489 graffity
+4723484 grafiti
+47234884 grafitti
+4723489 grafity
+472426 graham
+47242617 graham's
+4724267 grahams
+47246 grain
+472467 grains
+47263 grand
+472633 grande
+47263328437 grandfather
+47263374266 grandepiano
+4726362 grandma
+47263668437 grandmother
+4726372 grandpa
+4726374266 grandpiano
+4726483 granite
+472669 granny
+47268 grant
+4727 gras
+472737 grapes
+4727442 graphic
+4727635 grapnel
+47277 grasp grass
+4727737 grasses
+4727753 grapple
+472775464 grappling
+472779 grassy
+4728 grav
+47283 grate grave
+47283344437 gravedigger
+472835 gravel
+472837 grates graves
+472837483 gravesite
+4728378663 gravestone
+47283786637 gravestones
+472839273 graveyard
+4728392737 graveyards
+4728464 grating
+47284647 gratings
+4728489 gravity
+4729 gray
+473273 grease
+47328 great
+47336 green
+4733653222 greenkebab
+4733653227 greenkebap
+47338 greet
+473384647 greetings
+4736233 grenade
+47362337 grenades
+4739 grey
+4743 grid
+4743346 griffin
+47433467 griffins
+474467 grigor
+4744674 grigori
+47455 grill
+47455243 grillage
+474553 grille
+4745537 grilles
+4745539675 grillework
+474557 grills
+4746 grim grin
+47463 grind
+47466464 grinning
+47467 grins
+4746737 grimper
+474677666 grinspoon
+4747 grip
+475263 island
+4752637 islands
+4753 isle
+47537 isles
+47538 islet
+476237437 groceries
+4762379 grocery
+47646 groin
+4766 iron
+476683 groove
+4766837 grooves
+476689 groovy
+47673 grope
+476783783464 grostesteing
+476863 ground
+4768637 grounds
+4768637533737 groundskeeper
+47687 group
+476886 grotto
+4769 grow
+476984 growth
+4782 grub
+4784687 isthmus
+48 it iv
+4817 it's
+482 hub
+4822 huba
+482226653 guacamole
+4826 ivan
+48273 guard
+482737 guards
+482737245 guardrail
+483 hue iud
+483329 guffaw
+4836 item
+48367 items
+48377 guess
+48378 guest
+483787 guests
+484 4th hug huh
+4843 huge
+48433 guide
+4845568463 guillotine
+484589 guilty
+48466377 guinness
+484827 guitar
+4848273 guitare
+484827478 guitarist
+48524 gulch
+4853 gulf
+48546 hulio
+485467 hulios
+4855 gull
+485538 gullet
+48557 gulls
+4857 gulp
+486 gum gun hum
+4862358 gunbelt
+48626 human
+486267 humans
+48629 gumby
+486326 gundam
+4863733 hundred
+486479 hungry
+4865 hunk
+486637 hummer
+4866464 humming
+48664647 hummings
+48667478 humorist
+486687 humour
+4867 gums guns hump hums
+48674448 gunsight
+4867467 gunshop
+486769337 gunpowder
+48678673 gunstore
+48679 ivory
+4868 hunt
+486837 hunter
+487 its
+4872263 husband
+48722637 husbands
+487353 hurdle
+4874 hush
+4875 hurl
+487742263 hurricane
+48779 hurry hussy
+4878 guru gust hurt
+488 hut
+48824 hutch
+4882437 hutches
+4882446766 hutchinson
+488362374 gutenberg
+4887 guts huts
+488837 gutter
+489 guy ivy
+4897 guys
+489953 guzzle
+49 ix
+4937268 hydrant
+493728466 hydration
+496 gym
+496627486 gymnasium
+49737 hyper
+4973777333 hyperspeed
+497379277 hyperwarp
+4976 gyro
+4976337642 hypodermic
+4993466 gwydion
+522 jab lab
+522237 jabber
+52234 laadi
+52235 label
+522357 labels
+522466 labion
+5225 jack
+522522 laalaa
+522538 jacket
+5225387 jackets
+5225426637 jackhammer
+5225766 jackson
+52257667 jacksons
+5226728679 laboratory
+5227664 jabroni
+522867 labtop
+5228994 jacuzzi
+523 lad lae lcd
+523337 ladder laffer
+5233377 ladders
+52343 ladie
+523437 ladies
+52353 ladle
+5239 lady
+524 jah
+5243 laid
+52437 jager lager
+5245 jail
+5245362374 kahlenberg
+52453623747 kahlenbergs
+524537 jailer
+52457 jails
+52458 lahku
+524666 lagoon
+5247 lair
+5248546 kaitlin
+5248596 kaitlyn
+5253 jake lake
+5254 kali
+5257272 kalsarc
+52572727 kalsarcs
+526 jam lam
+5262 jamb
+52623 lance
+526237 lancer
+5263 jane land lane
+52633455 landfill
+5263464 landing
+5263464723 landingpad
+5263476 janeiro
+52637 james
+526372273 landscape
+52645293 kamikaze
+52648243 language
+5264867 janitor
+52648677 janitors
+5267 lamp
+526727 kansas
+52673 lampe
+52677 lamps
+52677678 lamppost
+526779673 lampsword
+5268376 lantern
+52683767 lanterns
+527 jar las
+52725 kasck
+5272653 karaoke
+5273 lard
+527346 jardin
+5273467 jardins
+52737 lards laser
+527372326 laserbeam
+5273723267 laserbeams
+52737266382867 laserconductor
+52737486 lasergun
+527377 lasers
+52737932766 laserweapon
+52743 large
+5275 kask
+52766 jason lasoo
+5277 jars lars lass
+52773 lasse
+527737 jasper
+52776 lasso
+52779 larry
+527797 larrys
+5278 last
+527845 kartik
+527867 laptop
+5278677 laptops
+527882 kasuta
+528 kat
+5282 lava
+52824 latch
+528262 katana
+5282867437 lavatories
+52828679 lavatory
+5283 late
+52837 later
+52837387466 laterfusion
+52844 laugh
+5284642 lavinia
+528624 launch
+52863373883 launderette
+5286373883 laundrette
+5286376628 laundromat
+5286379 laundry
+52872 laura
+5287368 laurent
+5287463 latrine
+5288423 lattice
+52884239675 latticework
+529 jaw jay law lay
+5292663 jawbone
+52933 layed
+5293629 lazenby
+52936297 lazenbys
+529464 laying
+5296 lawn
+529626 lawman
+529666937 lawnmower
+52967 lawns
+5297 jaws lays
+5299 jaxx
+53 le
+53222 kebab
+53227 kebap
+5323 lead leaf
+53233424 jebediah
+532337 leader
+5323538 leaflet
+53235387 leaflets
+53237 leads
+5325 leak
+5326 lean
+532639 keaney
+53267 jeans
+532686 leanto
+5327 leap
+53274 leash
+53276464 learning
+53283 leave
+532837 leaves
+5328376 lectern
+5328437 leather
+5328873 lecture
+533 lee
+53324 leech
+5333 jeff
+533337766 jefferson
+53337 jeffs
+5333739 jeffrey
+5334 jedi
+53343 ledge
+533437 ledges
+5335 keel
+5336743 leforge
+5337 jeep keep
+533737 keeper
+5338 left
+53389 lefty
+533897 leftys
+534 keg leg
+53422 legba
+534229 legacy
+5342663 legbone
+5346824 jehovah
+5347 kegs legs
+5347873 leisure
+53484 keith
+53487227 lehtsaar
+5348727 lehtsar
+5355 kell
+535539 kelley
+53556 jello
+53559 jelly
+536 jen ken
+536372 kendra
+536484 length
+5365 lenk
+5365467 jenkins
+5366 jenn
+5366273 leonard
+53662737 leonards
+5366347837 kenmeister
+53664 jenni
+53664337 jennifer
+536643377 jennifers
+536647 jennis
+53666233 lemonade
+536662337 lemonades
+53667 jenns
+53669 jenny kenny
+536697 jennys
+5367 jens lens
+5367273 leopard
+53673 lense
+5368 lent
+537 jep
+53737 leper
+537466 lesion
+5375 jerk
+537648 kermit
+537662 kerona
+53766426 keronian
+537666426 kernonian
+53767363 kerosene
+53769 leroy
+5377 jess leps
+5377324286 leprechaun
+53773242867 leprechauns
+5377422 jessica
+537763 jerrod
+537766 lesson
+5377667 lessons
+5377687 leprous
+53779 jerry
+53787 jesus
+538 jet let
+53835 level
+53837 lever
+538377 levers
+538428426 leviathan
+5384284267 leviathans
+53848283 levitate
+5387 jets lets
+5387225 jetpack
+538837 letter
+538837269 letterbox
+5388377 letters
+538853 kettle
+5388537 kettles
+538868 levtov
+539 key
+5391 key1
+5392273 keycard
+53922737568 keycardslot
+53924246 keychain
+53926273 keyboard
+53935 jewel
+53935379 jewelery
+53935533 jewelled
+539357 jewels
+5393579 jewelry
+5394653 keyhole
+53946537 keyholes
+5397 keys
+5397225 keyrack
+539723 keypad
+5397464 keyring
+5397568 keyslot
+542233 libbed
+5422623 licance
+5423673 license
+54236737 licenses
+5423737 liberer
+5425 kick lick
+542537 kicker
+54257 kicks
+5427279 library
+543 kid lid lie
+5433 life
+54332628 lifeboat
+54333676 lifeform
+543336767 lifeforms
+543627737 kidnapper
+5436277377 kidnappers
+5436277464 kidnapping
+5437 kids
+5438 lift
+54387 lifts
+5438836268 lieutenant
+544 jig
+544278487 ligaruius
+54448 light
+544482852 lightbulb
+5444837 lighter
+54448377 lighters
+54448464 lighting
+544486464 lightning
+544487 lights
+5444877333 lightspeed
+545 lil
+5453 like
+545437 lilies
+5455 jill kill
+545537 killer
+545537626 killerman
+5456 kiln
+5459 lily
+546 jim kim
+5462 limb
+54626 jimbo
+5462656 lincoln
+54626567 lincolns
+54627 limbs
+5463 kind line
+54633 kinfe
+54636 linen
+54637 lines
+54637539 lindsley
+5463925537 linewalker
+5464 king
+54643743 lingerie
+5464487 kinghts
+54647 kings
+54648 limit
+5465 link
+5466 lion
+54667 lions
+54669 jimmy
+54675 kiosk
+5468 lint
+54696 jinwo
+547 lip
+5472 lisa
+54723673 liscense
+5473 lire
+5474 kiri
+5477 kiss lips
+5477488 lippitt
+54778425 lipstick
+54779 lissy
+5478 list
+547836 listen
+547836464 listening
+547837 liquer
+547843 liquid
+547847 liquir
+547867 liquor
+5478687 liquour
+548 kit lit
+5482436 kitchen
+548243672643 kitchenrange
+5483 lite
+54837 liver
+5483728873 literature
+548378625 livestock
+548379 livery
+548464 living
+5487 kits
+54873 livre
+548737 livres
+5487485 kitshuk
+548785 kitsuk
+548836 kitten
+548837 litter
+548837269 litterbox
+548853 little
+54889 kitty
+54889548837 kittylitter
+549 liz
+549273 lizard
+5492737 lizards
+5497 lizs
+5499 jizz
+5533639 kleenex
+5539367 llewdor
+55464667 klingons
+5547843 lliquid
+5587 llur
+562 job loa lob loc
+56225 local
+562257 locals
+562283 locate
+56228466 location
+56229 lobby
+5623 load loaf
+562333 loaded
+562337 loader
+56234 loadi
+56237 locer
+5625 jock lock
+562537 locker
+5625377 lockers
+562538 locket
+562539 jockey
+56257 locks
+56257425 lockpick
+56257425464 lockpicking
+562578727 jockstrap
+5626 loam loan loco
+5627 loas
+5627837 lobster
+563 joe
+56323 knead
+5633 knee
+56335 kneel
+56343 lodge
+5635 joel
+5637 joes
+5638 loft
+5639 joey
+56397 joeys
+564 jog log
+5642533 knicked
+56426 johan
+56426637 johannes
+5642665 logbook
+56433 knife
+564337 knifes
+564448 knight
+564453 joggle
+5646 john join logo
+564625684 loincloth
+564633 logoff
+564669 johnny
+56467 johns
+56468 joint
+564687 joints
+564688 logout
+5647 logs lois
+564837 knives
+56488464 knitting
+565 lok lol
+565296 kolayn
+5653 joke
+56537 jokes
+5654 loki
+56554767 lollipop
+5656883 lolotte
+5658 jolt
+565962 kolyma
+566 kon loo
+5662 knob
+566237 joober
+56625 knock
+5662537 knocker
+56625377 knockers
+56625464 knocking
+56627 knobs
+56637 jones
+5664 long
+5665 look
+566533 looked
+5665464 looking
+5665688 lookout
+56656887 lookouts
+566587 lookup
+5666 loom
+56665 loook
+56667 looms
+56673 loose
+566736 loosen
+5668 knot loot
+5668454 kontiki
+56684547 kontikis
+56684653 knothole
+5669 know
+566953343 knowledge
+56696 known
+567 los
+5673 lord
+567342765377 lordharmless
+56737 loser
+567377 losers
+567463 josine
+5674867 loritos
+56752 korja
+5677 loss
+5677464 lopping
+5678 korv lost
+56782546 lostalim
+56784 losti
+56785246 lostlaim
+568 lot lou
+5683 loud love
+568359 lovely
+5683625464 lovemaking
+56839 kotex
+56843 louie
+568466 lotion
+56847 louis
+568643 lounge
+5687625 journal
+56876257 journals
+5687639 journey
+5688379 lottery
+569 kow low
+56937 lower
+56978425 joystick
+57 jr kq
+572324 kq2dbg
+573 lpd lsd
+57324 kqdbg
+573324 kq3dbg
+574324 kq4dbg
+5747462 krishna
+5747836 kristen
+57478367 kristens
+57493299766 krgzdaxzson
+577 lss
+5778 kprt
+58 kt lt
+582237 lubber
+5822377 lubbers
+5824337 lucifer
+5824687 lucious
+5827422833 lubricated
+5829 lucy
+58343 judge
+58367 kudos
+58374 jueri
+584 jug lug
+58423 juice
+584236224463 juicemachine
+584237 juicer
+5844243 luggage
+58444 luigi
+584447 luigis
+5847 jugs
+5853 juke luke
+5853269 jukebox
+58543 julie
+585437 julies
+5855229 lullaby
+5862 jumb
+586237 lumber
+5862375225 lumberjack
+58624 lunch
+58643 lunge
+5864385 lungful
+586453 jungle
+5865 junk
+58657453 junkpile
+58659273 junkyard
+5867 jump
+586737 jumper
+5867464 jumping
+5873 lure
+5874 juri
+58749 juriy
+587537 lurker
+5875377 lurkers
+5878 just
+587846 justin
+587846353824 justinfletch
+5879 jury
+5883 jute lute
+5883269 jutebox
+58836453 juvenile
+593 lye
+59454 kwiki
+5974 jyri
+59742 lyric
+597427 lyrics
+598866 lytton
+599948 lxxxiv
+62 ma mc
+622 nab
+6223 mace
+6224 mach nach
+622426476 machanism
+6224383 machete
+6224436 machien
+6224463 machine
+62244633 machined
+62244637 machines
+622446379 machinery
+6225 mack
+62277437 mbarrier
+62287 occur
+62287268 occupant
+622872687 occupants
+62297 nabys
+623 oaf
+6232 nada
+62326 ocean
+623263 madame
+6233 made
+62342 nadia
+623663 mcfood
+6236756933 mcemployee
+6237 nads
+6237437 mcfries
+624 mag mai nah
+62429463 magazine
+624294637 magazines
+6243 mage maid
+624336 maiden
+62442 magic
+6244225 magical
+62442426 magician
+624443 maggie
+62449 maggy
+6245 mail nail
+6245269 mailbox
+624526937 mailboxes
+6245626 mailman
+62457 nails
+6246 maim main
+62462 magma
+624626273 mainboard
+624637263 mainframe
+624638 magnet
+62464269 mahogany
+624643437 magnifier
+6246439464 magnifying
+62468362623 maintenance
+624686 magnum
+62468973 mcintyre
+6247 mags
+624766 maison
+625 oak obj
+6252656 malcolm
+62526567 malcolms
+6253 make male
+625328 object
+625328483 objective
+6253287 objects
+62533 naked
+625336377 nakedness
+6253566 malekom
+6253688 makeout
+62537 maker makes males
+625377 makers
+625387 makeup
+625387548 makeupkit
+625464 making
+6254837283 obliterate
+6255 mall
+625538 mallet
+625663 malone
+626 mam man
+62617 man's
+6262 mama
+626243 manage
+6262437 manager
+62624377 managers
+62626 mambo
+62626626 manannan
+62627 mamas
+6263 mame name
+62637 names
+62637253 mandrake
+626375283 nameplate
+62638837 maneuver
+62643 mange
+626437 manger
+626453 mangle
+6264653 manhole
+6264785283 manipulate
+62649 mangy
+6266 mano
+62662 mamma
+626625 mammal
+626637846 mannequin
+626643 mannie
+62667 manor
+6267 mans
+6267466 mansion
+626825 manual
+6268257 manuals
+626835 mantel
+62683574323 mantelpiece
+626844387 mcnuggets
+626853 mantle
+62685373423 mantlepeice
+62685374323 mantlepiece
+626873 manure
+6269 many
+627 map mas nap
+6272 marc narc
+627253 marble
+627256 napalm
+62726 maran
+627268 mascot
+62726842 narcotic
+627268427 narcotics
+62728 mcrat
+627292 naraza
+6273426 mardian
+62737828466 observation
+6273783 observe
+62737837 observer
+6274 mash
+62742 maria mcrib
+62743 marge marie
+62743426 obsidian
+627448262 marihuana
+627458262 marijuana
+62747 mcrip oasis
+6275 mark mask
+62752676 marlboro
+62753 maple
+627533 marked
+627537 marker
+627538 market
+627546 napkin
+6275464 marking
+62754647 markings
+62757 marks
+62758 markt
+6276679 masonry
+6277 maps mass
+62772273 massacre
+6277243 massage
+62774 marsh
+62774243 marriage
+6277433 married
+6277464 napping
+6277483 massive
+627769 narrow
+62779 marry nappy
+6278 mart mast
+62782228 mastabat
+627822283 mastabate
+6278228 mastbat
+62782283 mastbate
+6278328 marteau
+627837 master
+6278372283 masterbate
+62783774323 masterpiece
+62784228 mastibat
+627842283 mastibate masticate
+6278426 martian
+627846 martin marvin
+6278464 martini
+627847 maquis
+6278487 martius
+62785587 marullus
+62787828 obstruct
+62788228 mastubat
+627882283 mastubate
+6278872283 masturbate
+627887228464 masturbating
+62789 nasty
+6279 mary
+628 mat nav
+62824 match
+628242665 matchbook
+62824269 matchbox
+6282437 matches
+628246 obtain
+6282478425 matchstick
+62824784257 matchsticks
+6282667 navcomp
+62826678837 navcomputer
+6283 mate
+62835 navel
+6283647 obtenir
+6283742 materia
+62837425 material
+62837487 materius
+628374877 materiuss
+6283883 navette
+628424933 naugahyde
+62844283 navigate
+6284428466 navigation
+628442846625 navigational
+628466 nation
+628483 native
+6284837 natives
+6285 maul
+6286787 octopus
+6287 oats
+6287277 matrass
+628765386 mausoleum
+628766 matron
+6288 matt
+628837 matter
+6288725 natural
+628873 mature nature
+62887377 mattress
+629 maw max may nay
+6293 maze
+62934353 mayfield
+6294 nazi
+6294256763455483 maxiclorofillite
+62943524 naziflag
+629435247 naziflags
+62946455466 maximillion
+62947 nazis
+62967 mayor
+6297 maxs
+6299355 maxwell
+63 md me ne of
+63222 mecca
+632369 meadow
+6323695263 meadowland
+632377279 necessary
+632377447 mebership
+6324 mech
+63242 mecha
+632426427 mechanics
+632426476 mechanism
+6325 meal neal neck
+63255223 necklace
+63257 meals neals
+6325843 necktie
+6327 near
+6327873 measure
+632787464 measuring
+6328 meat
+632827 nectar
+632832837 meateater
+6328328377 meateaters
+632852 nebula
+6328523 nebulae
+6328527 nebulas
+633 off
+6332255 oddball
+63325 medal
+633255466 medallion
+6333 need
+633353 needle
+63337 offer
+63337464 offering
+633377 offers
+6334225 medical
+6334228466 medication
+633423 office
+6334237 officer
+63342463 medicine
+6334548 medikit
+6334787 oedipus
+63348283 meditate
+6334828464 meditating
+6334828466 meditation
+633486 medium
+6337 odds
+63374668 offshoot
+6338 meet
+6338464 meeting
+633872 medusa
+6342 mega
+63422527837 megablaster
+63426 megan
+63428483 negative
+63444267 neighbor
+634442687 neighbour
+6344426877 neighbours
+634443 meggie
+634453 meggle
+634684283 negotiate
+6347 megs
+635 mel
+6352643 melanie
+635362485 melenchuk
+63547 nelis
+635543 nekkid
+635639 melody
+635667 melons
+636 mem men
+636237 member
+6362377 members
+6362377447 membership
+636243743 menagerie
+6363 mend
+6366 memo neon
+63667 memos
+6366726386 memorandum
+63667425 memorial
+636679 memory
+6367 mens
+6368 menu
+63687 menus
+6372 mesa
+63723337 mercedes
+637236279 mercenary
+63724263473 merchandise
+63724268 merchant
+6373 nerd
+63743 merge
+637439 nephew
+6376243 mermaid
+6377 mess
+6377243 message
+637724326273 messageboard
+63772437 messages
+637769 merrow
+63779 merry
+6378 merv nest
+63783 nerve
+6378863 neptune
+638 net
+63825 metal
+63825542 metallic
+638257 metals
+638367 meteor
+6383673 meteore
+638367483 meteorite
+6383677 meteors
+63837 meter never
+638376463 nevermind
+638463 method
+63876 metro
+6388464 netting
+638873 mettre
+639 new
+6394226 mexican
+6397 news
+639772737 newspaper
+6397727377 newspapers
+6398 newt next
+6399675 newyork
+64 oh
+642 mic
+642253 nibble
+6423 mice
+6424235 michael
+64243 niche
+6424435 michiel
+642487 nichts
+6425 mick nick
+642533 nicked
+642535 nickel
+6425357 nickels
+642539 mickey
+642567 mickos
+64257 micks
+64259 nicky
+64276 micro
+642762447 microchip
+6427672673 microscope
+6427674663 microphone
+64276776237767 microprocessor
+642769283 microwave
+6427692836836 microwaveoven
+643326 niddam
+643353 middle
+643438 midget
+6435 niek
+64357 niels
+643643 nienie
+643683 niente
+64387 niets
+64437 niger
+644453 niggle
+64448 night might
+64448464253 nightingale
+6444854448 nightlight
+64448544487 nightlights
+6444874233 nightshade
+6444878233 nightstaff
+6444878263 nightstand
+64448782637 nightstands
+6444878425 nightstick
+645 oil
+64515267 oil&lamp
+6452568 oilblot
+64525687 oilblots
+6453 mike ogle
+6453377425 oilderrick
+64533774257 oilderricks
+64535 mikel
+64539 mikey
+64548279 military
+6455 milk mill
+645574253 milkshake
+64557663 millpond
+6456267 oilmans
+64576327 oilsmear
+645768343 oilsmudge
+6457683437 oilsmudges
+6457768 oilspot
+64578246 oilstain
+645782467 oilstains
+64586937 oiltower
+645869377 oiltowers
+646287 nimbus
+6463 mind mine nine
+64637 miner mines
+6463725 mineral
+64637257 minerals
+646384 nineth
+6464 mini
+646428873 miniature
+64647837 minister
+6464887493 miniturize
+64648874937 miniturizer
+646488749464 miniturizing
+64652 ninja
+64652887853 ninjaturtle
+64667 minor
+64669462 minoxina
+64678735 minstrel
+6468 mint
+64683636 nintendo
+64686368 ointment
+646883 minute
+64688359 minutely
+64689 minty
+647 mir
+6472632 miranda
+64726847673 misanthrope
+647273268 miscreant
+6473 mire ogre
+64733632667 misdemeanor
+64737 miser
+647377 ogress
+64765 mirok
+647654 miroki
+647657 miroks
+6477 miss
+647747 missis
+647753 nipple
+6477537 nipples
+647767 mirror
+64776733 mirrored
+6477677 mirrors
+6478 mist
+6478262 nirvana
+647837 mister
+647853863 mistletoe
+64787 mists
+64787377 mistress
+64824 nitch
+648246 mitain
+648836 mitten
+649 mix
+64933 mixed
+64937 mixer
+649464 mixing
+6498873 mixture
+65 ok
+6529 okay
+653 old
+65322867493 olfactorize
+6533 olde
+65337 older
+6539 mkey okey
+653936539 okeydokey
+654387 olievr
+65483 olive
+65483645 oliveoil
+654837 oliver
+655 oll
+65736 olsen
+66 no on
+662 mob
+662245 nobail
+6624 noah
+662453 mobile
+66245362758 mobilemarkt
+66245374663 mobilephone
+662632 omanda
+662639 nobody
+6628 moat
+6629 moby
+663 moe one
+66314253 one-half
+6633 mode
+66335 model
+663357 models
+66337 onder
+663439 modify
+663538 omelet
+6636 mofo
+663853 module
+6642 ooga
+66473 noise
+6647362537 noisemaker
+66473625377 noisemakers
+664737 noises
+66478873 moisture
+66527 molar
+665277 molars
+6653 moke mold
+665333 molded
+6653624677 mokenchops
+665378 molest
+665543 mollie
+6656 mojo nolo
+6656868 molotov
+665836 molten
+6659 only
+666 mom non
+666278379 monastery
+66639 money
+66639224 moneybag
+666392547 moneyclip
+6664 mong mooh
+666437 monger
+666437382736 mongeretardo
+6664377382736 mongerretardo
+6664626 mongman
+6664735 mongrel
+6664837 moniter
+66648387 moniteur
+666483877 moniteurs
+6664867 monitor
+66648677 monitors
+6665 monk
+666524 moolah
+666539 monkey
+666539626 monkeyman
+6665397 monkeys
+6665437 monkies
+6666 moon
+66662 momma
+666643 moonie
+66665484 monolith
+66667 moons
+66669 mommy moony
+666697 mommys
+6667 moms
+66673 moose noose
+666734323 moosehead
+66673673 nonsense
+6667837 monster
+66678377 monsters
+6667873 monstre
+66678737 monstres
+666837 monter
+66684 month
+66686368 monument
+666863687 monuments
+667 mop
+6673 more nope nose
+66733 moped
+6674 nopi omri
+667426 morgan
+66743 norge
+667536 moslem
+667625 normal
+6676464 morning
+66766 moron
+6677 moss
+667737 mosses
+66774 morph
+667747 morris
+66778486 mosquito
+6678 most mort
+667825 mortal
+667827 mortar
+66784 north
+667843278 northeast
+667849378 northwest
+6678745 nostril
+6678926833 mostwanted
+667929 norway
+667934426 norwegian
+668 not
+66824 notch
+6683 move note
+66832665 notebook
+66835 motel novel
+66836 movem
+66836368 movement
+66837 notes
+6683723 notepad
+6684 moth
+668423 notice
+66842326273 noticeboard
+6684237 notices
+66843 movie
+668437 mother
+6684377 mothers
+6684377447 mothership
+6684464 nothing
+668464 moving
+668466 motion
+66847 moths
+66853 mould
+6686 onto
+66863 mound
+668637 mounds
+66867 motor
+6686729253 motorcycle
+66867292537 motorcycles
+66868 mount
+66868246 mountain
+668682467 mountains
+668682467433 mountainside
+668687 mounts
+66873 mouse
+66873723 mousepad
+668747 mourir
+6687474 nourish
+668782243 moustache
+6688246 moutain
+66882467 moutains
+66884 mouth
+66884385 mouthful
+669 now
+6693 ooze
+66937 mower
+669464 mowing
+669953 nozzle
+6699537 nozzles
+67 mr ms or
+672 npc orb
+672253 oracle
+672437872 orchestra
+672643 orange
+6726437 oranges
+6726763 osborne
+6728 orat
+673 ore
+67337 order
+673377 orders
+6736 open
+673633 opened
+6736464 opening
+6737283 operate
+67372846482253 operatingtable
+673728466 operation
+67372867 operator
+674 msg
+67426 organ
+67426476 organism
+674264767 organisms
+674264928466 organization
+674267 organs
+674276 orgasm
+6743423 orifice
+6746466 opinion
+67486 orium
+67626368 ornament
+676263687 ornaments
+677 mrs
+67767483 opposite
+6824 much
+6825 muck
+6825327 nuclear
+683 mud
+6832255 mudball
+6833 muff nude
+68339 muddy
+68343 nudge
+683489 nudity
+6836 oven
+6837 over
+6837255 overall
+68372557 overalls
+683726273 overboard
+68372628 overcoat
+683726287 overcoats
+6837328 overeat
+68374264 overhang
+68377277 overpass
+6837768 mudspot
+68377687 mudspots
+684 mug oui
+68437 other
+684377 others
+684438 nugget
+6844387 nuggets
+6847 mugs
+6853 mule
+685337 mulder
+68537 mules
+6855439 nullify
+685848833 multitude
+6858488337 multitudes
+686 mum
+686237 number
+6862377 numbers
+68624 munch
+686253 mumble
+6865337 munkees
+68662 mumma
+68669 mummy
+687 mur
+68725 mural
+687253 muscle
+687337 murder
+687386 museum
+6874 mush
+68742 music
+6874225 musical
+68742269 musicbox
+68742426 musician
+687424267 musicians
+68742752937 musicplayer
+68747666 mushroom
+687476667 mushrooms
+687546 muslim
+6877 murs
+68773 nurse
+6877379 nursery
+687743 nursie
+687749 murphy
+68782243 mustache
+6878873 nurture
+688 mut muu nut out
+688268 mutant
+6882687 mutants
+688348 outfit
+6883487 outfits
+68836677 outdoors
+68837 outer
+68845283 mutilate
+68846873 outhouse
+688538 outlet
+6887 nuts outs
+6887433 outside
+688743687 nutrients
+688747 ouvrir
+6888 mutt
+688866 mutton
+689953 nuzzle
+69 my nw ox
+69263676 mycoform
+692643 mycoid
+6936 owen oxen
+69367 owens
+695667 nylons
+696 own
+69629 nyoby
+69637 owner
+697353 myself
+697837 oyster
+6978377 oysters
+697842 mystic
+6984 myth
+699436 oxygen
+72 pc r2
+722248 rabbit
+722266 raccon
+7222666 raccoon
+7223 race
+72237 saber
+722435 rachel
+7224357 rachels
+7225 pack rack sack
+7225243 package
+72253 scale
+722538 packet racket
+7225464 scaling
+72257 sacks scalp
+7225735 scalpel
+72257464 scalping
+7225746456433 scalpingknife
+7225753 scalple
+722575464 scalpling
+72257546456433 scalplingknife
+72259 packy
+7226 scan
+7226637 scanner
+72266377 scanners
+72266464 scanning
+722666 racoon
+72268243 sabotage
+722722 scarab
+7227263686 sacramento
+72273 scape scare scarf
+722732769 scarecrow
+722733 sacred
+72274342425 sacrificial
+72278 pabst
+72279 scary
+723 pad raf sad
+7231 r2d1
+7232 r2d2
+72327 radar
+7233 safe
+7233464 padding
+723353 paddle
+7233766 saffron
+723389 safety
+72342623 radiance
+72342867 radiator
+72346 radio
+72346564 radiolog
+7234667 radioos
+723467 radios
+72346752937 radioplayer
+7234692837 radiowaves
+723478 sadist
+7235625 padlock
+72363 scene
+7236379 scenery
+72368 scent
+7237 pads
+7237873 sceptre
+7238 raft
+723837 rafter
+7238377 rafters
+724 rag
+7243 page sage
+724337 raider
+72433853 schedule
+724338537 schedules
+7243623 science
+724368478 scientist
+7243684787 scientists
+72437 pages
+7243724446 ragfraggin
+72437244464 ragfragging
+7245 pail rail sail
+72452628 sailboat
+7245464 railing
+72454647 railings
+724566437 schlonger
+724567 sailor
+7245677 sailors
+72457 rails
+72457626 sailsman
+7245796626 sailswoman
+7246 pain rain
+72462628 raincoat
+724626287 raincoats
+7246269 rainbow
+7246368 raiment
+724665 school
+7246657 schools
+72468 paint saint
+7246824477 paintchips
+724683 sainte
+7246833 painted
+72468464 painting
+724684647 paintings
+72468562 paintjob
+7247 pair rags
+72473 raise
+724733 raised
+724744 rairgh
+7247467 raisins
+7247767 scissor
+72477677 scissors
+72488737 pcitures
+725 sal
+725223 palace
+7252237 palaces
+72523 salad
+725233 salade
+7252337 salades
+725237 salads
+725269 salamy
+7252837 palaver
+7253 rake sale
+72537 sales
+7253725375 salesclerk
+72537626 salesman
+72537636 salesmen
+7253784464 salesthing
+7256 palm
+725637 palmer
+725666 saloon
+72567 palms
+72568733 palmtree
+725687337 palmtrees
+7258 raju salt
+72588284667 salutations
+725892837 saltwater
+726 pan ram ran sam san sao
+72622783 pancarte
+7262437 rancher
+726253 ramble
+726262 panama
+72628439 sanctify
+7263 pane rand same sand
+726325 sandal
+7263257 sandals
+726334 samedi
+72634 sandi
+72635 panel
+726355464 panelling
+726357 panels
+7263672 pandora
+726367217 pandora's
+72636727 pandoras
+72637 panes rands
+726372 sandra
+72639 sandy
+72639424 sandwich
+7264 sang
+72642 panic
+72643 range
+726437 ranger
+72648279 sanitary
+726623 sconce
+7266328 panneau
+726637 panner
+7266464 panning
+72667 scoop
+72668 scoot
+7266837 scooter
+72668377 scooters
+72669 sammy
+7267 pans ramp
+726724 scorch
+7267246275 scorchmark
+72673 scope score
+72674538 pamphlet
+726745387 pamphlets
+7267464 ramping
+726753 sample
+7267537 samples
+7268 pant
+72682 santa
+726824 scotch
+72682547 raotalis
+726825477 raotaliss
+7268437 panties
+72686 santo
+72687 pants scour
+726879 pantry
+72688 scott scout
+727 pas pbr pcs rap sap sas
+7272 papa
+727224883 parachute
+727235 parcel
+72724 sarah
+727246368 parchment
+72725535 parallel
+7272622 saranac
+72726253 scramble
+72726742487 sarcophagus
+72727 papas scrap
+727273 scrape
+7272737 scrapes
+7272738 parapet
+72727483 parasite
+727274837 parasites
+727277 scraps
+7272824 scratch
+727282437 scratches
+7273 rape
+727326 scream
+727326464 screaming
+7273267 screams
+727336 screen
+7273367 screens
+727368 parent
+7273687 parents
+72737 paper papes
+727372547 paperclip
+727377 papers
+727379675 paperwork
+72739 screw
+7273933 screwed
+72739374837 screwdriver
+727393748377 screwdrivers
+72739464 screwing
+727397 screws
+7274 pash raph
+7274235 raphael
+72743 sarge
+727433 rapide
+727436 sarien
+7274367 sariens
+727437 rapids
+7275 park
+727537 parker parler
+7275387 parleur
+7275464 parking
+727567 parlor
+727655 scroll
+7276557 scrolls
+7277 pass
+72772273 passcard
+72772377437 raspberries
+727723779 raspberry
+7277243 passage
+7277243929 passageway
+7277273552 sasparella
+727737 parser
+72774473 sapphire
+727746628359 passionately
+7277539 parsley
+727768 parrot
+7277687 parrots
+72777678 passport
+72779673 password
+7278 part past
+72782 scrub
+7278253 partake
+72783 paste
+727848466 partition
+7278637 partner
+727867 pastor
+7278673 pastore
+72787 parts
+727879 pastry
+7278846473 scrutinise
+7278846493 scrutinize
+7278873 pasture
+72788737 pastures
+72789 party
+728 pat rat
+72822 scuba
+728237 saucer
+72824 patch
+72826 satan
+7283 save rate
+7283548833474 satelittedish
+728355483 satellite
+7283554837 satellites
+72836 raven
+72836368 pavement
+728363687 pavements
+728367 ravens
+7284 path
+72843842 pathetic
+72846 patio
+728463 ravine
+7284637 ravines
+728464 saving
+7284647 savings
+728466 ration
+7284667 rations
+72847 paths
+7284929 pathway
+7285 paul saul
+72855379 scullery
+728559 scully
+72857 sauls
+728578873 sculpture
+72858 sault
+7286 scum
+7287 rats
+7287243 sausage
+72872437 sausages
+72873 pause
+728765 patrol
+7287652568 patrolalot
+7287655464 patrolling
+728765626 patrolman
+728766 patron
+7287667 patrons
+728797 patsys
+72883427337 sauvegarder
+7288376 pattern
+72883767 patterns
+728853 rattle
+7288537 rattler
+72885376253 rattlesnake
+72889 patty
+72897 satyr
+729 paw pay ray saw sax say
+72924325 paycheck
+72937 payer
+7294433 rawhide
+72946773 sawhorse
+729486 raygun
+7294867 rayguns
+7296 pawn
+7296368 payment
+7296455 sawmill
+729674663 saxophone
+72967466478 saxophonist
+7297 rays
+72974663 payphone
+729843 scythe
+73 rd se sf
+732 pda pea sea
+73223 peace
+73224 peach reach
+732253 pebble
+7322537 pebbles
+7322625 peacock
+73226257 peacocks
+73228466 reaction
+7322867 reactor
+7323 read
+73231688 read-out
+732316887 read-outs
+7323222 rebecca
+7323446 rebegin
+7323464 reading
+7323478 receipt
+7323483 receive
+73234837 receiver
+73235 rebel
+732357 rebels
+732368 recent
+7323688 readout
+73236887 readouts
+732377 recess
+7323782253 receptacle
+7323784225 receptical
+732378466 reception
+732378466478 receptionist
+73239 ready
+73243837 reciever
+73246773 seahorse
+732473 recipe
+7324737 recipes
+732483 recite
+7324855 seagull
+73248557 seagulls
+7325 peak peal peck seal
+732537 pecker
+732559 really
+73257 peaks
+7326 sean
+732626 seaman
+732663 second
+73266664837 reconnoiter
+732668 reboot
+732673 record
+73267337 recorder
+732673464 recording
+732673752937 recordplayer
+7326787377 seamstress
+732688 peanut
+7326887 peanuts
+7327 pear peas rear
+732724 search
+7327263 seasame
+7327268 peasant
+73272687 peasants
+7327328437 rebreather
+7327363 rearend
+732737 reaper
+732738 secret
+732738279 secretary
+7327387 secrets
+73274355 seashell
+73274673 seashore
+73275 pearl
+732766 reason
+7328 peat seat
+73282358 seatbelt
+732833 seated
+7328466 section
+732867 sector
+73287 seats
+732873 secure
+7328748437 securities
+73287489 security
+732925464 recycling
+73292837 seawater
+7329333 seaweed
+733 see red pee
+73326 sedan
+7333 reed seed
+733336 redeem
+733337 reefer
+733353 peddle
+73337 reeds seeds
+73337825 pedestal
+733378257 pedestals
+733378665 pedestool
+7335 peek peel reel seek
+7335328 reflect
+7335328466 reflection
+7335328483 reflective
+733532867 reflector
+7336 redo seem
+733626 redman
+7337 peep peer
+73373746368 refreshment
+733737463687 refreshments
+7337434372867 refridgerator
+733744372867 refrigerator
+73374653 peephole
+733823 reduce seduce
+73383537 refueler
+733873 refuse
+734 peg
+73425 regal
+73426273 pegboard
+73427337 regarder
+734453 peggle
+734466 region
+73447837 register
+734478728466 registration
+73467 reins
+7347 pegs
+734738 regret
+7348527 regular
+734852867 regulator
+734874482867 regurgitator
+73493 seize
+735283 relate
+73528464 relating
+73528466 relation
+735284667 relations
+73529 relax
+7353 self
+7353273 release
+735328 reject select
+735328466 selection
+7354226 pelican
+735433 relief
+7354383 relieve
+73544466 religion
+735444687 religious
+7355 sell
+735537 seller
+735538 pellet
+7355387 pellets
+7355464 selling
+7356 relm
+73562283 relocate
+735623 reload
+7358 pelt
+735842 pelvic
+735847 pelvis
+736 pen
+736245 pencil
+7362457 pencils
+736246 remain
+7362467 remains
+736275 remark
+7363 send
+7363268 pendant
+7363398687 rendezvous
+73638586 pendulum
+736387283 penetrate
+73638728466 penetration
+7364 seng
+73647 penis
+7366 peon reno
+73662687 remnants
+7366437 pennies
+736683 remote remove
+73669 penny
+7367 pens
+73673 sense
+736753 people
+7367537 peoples
+736767 sensor
+7367677 sensors
+7368 rent sent
+73684368 sentient
+736843687 sentients
+73684635 sentinel
+736846357 sentinels
+736846873 penthouse
+7368486 pentium
+73687437 sentries
+736879 sentry
+736886 pentum
+737 pep
+73723483 perceive
+73724 perch
+737247 repair
+737263 sesame
+73727283 separate
+737278 repast
+737283 rescue
+7372837 rescuer
+73728377 rescuers
+73729 percy
+73732724 research
+7373642 serenia
+73736728466 perforation
+7373676 perform
+737367637 performer
+7373676377 performers
+73737828466 reservation
+7373783 reserve
+737378647 reservoir
+73738 reset
+7373863 perfume
+737425 serial
+73743268 sergeant
+737433623 residence
+73743368 resident
+737446 resign
+7374634225 periodical
+73746342257 periodicals
+7374687 serious
+7375223 replace
+73752236368 replacement
+737542283 replicate
+7375422837 replicates
+73754228464 replicating
+7375422867 replicator
+73759 reply
+7376 repo
+7376748466 reposition
+737678 report
+7377 pepp
+7377328 respect
+7377368 serpent
+737737 pepper
+73773736828466 representation
+73773736828483 representative
+7377376468 peppermint
+7377377 peppers
+73774 pepsi
+7377426 persian
+737747 pepsis
+7377472867 respirator
+737766 person
+73776625 personal
+7377667 persons
+73776674245489 responsibility
+73776674253 responsible
+737774728466 perspiration
+73777473 perspire
+73779 peppy
+737797 peppys
+7378 pest rest sert
+7378268 servant
+7378278 restart
+7378287268 restaurant
+737828737 restaurer
+73783 serve
+737837 server
+7378378 pervert request
+7378423 service
+73784237 services
+7378453 reptile
+7378464 resting
+737852437 sepulcher
+737853 pestle
+7378673 restore
+73787 pests
+7378724637 restrainer
+737872466368 restrainment
+737872468 restraint
+737873 peruse
+73787666 restroom
+737877328 resurrect
+737877328466 resurrection
+7378872868 resturaunt
+738 pet set
+73825 petal
+738257 petals
+738273 retard
+7382736 retardo
+7383 pete
+738325 reveal
+73833 setee
+73835 revel
+73836 seven
+738368336 seventeen
+7383684 seventh
+73837 peter petes sever
+738373 severe
+7383733 severed
+73837363 reverend
+7384367 reviens
+738456 revilo
+7384656 reviolo
+738473 retire
+738483 revive
+7386583 revolve
+73865837 revolver
+738658377 revolvers
+7387 petr
+7387328 retreat
+738743825 retrieval
+73874383 retrieve
+73879 retry
+738833 settee
+738837 petter
+73883733738837 peuterdepeuter
+7388536368 settlement
+738863 retune
+738876 return
+73887637 returner
+738876464 returning
+7388767568 returnslot
+739 pew sex
+739273 reward
+73937 sewer
+739464 sewing
+7397 pews
+7397483 rewrite
+739825 sexual
+7398268 sextant
+7399 sexy
+74 pg
+742 pic rib sic
+7422243 ribcage
+742229 shabby
+742233 ribbed
+74225 shack
+7422553 shackle
+74225537 shackles
+742257 shacks
+742266 ribbon
+7423 rice
+74233 shade
+742337 shades
+742369 shadow
+7423697 shadows
+74238 shaft
+7424 rich shag
+7424273 richard
+74244 shagg
+7425 pick sick
+7425229 sickbay
+742529 pickax
+7425293 pickaxe
+74253 shake
+74253773273 shakespeare
+742538 picket
+74253837 picketer
+742538377 picketers
+742553 pickle
+742587 pickup
+74263 shame
+74266 piano
+7426766 shampoo
+742689 shanty
+7427 pics ribs
+7427264 pharaoh
+74273 phase shape shard share
+742737 phaser
+7427374438 shapeshift
+7427377 phasers
+74275 shark
+742757 sharks
+742767 phasor
+74277 sharp
+7427736 sharpen
+742773633 sharpened
+74283 shave
+7428464 shaving
+742846427326 shavingcream
+74286 shaun
+742869 shauny
+7428837 shatter
+7428873 picture
+74288737 pictures
+742926 shazam
+74293 phaze
+742937 phazer
+742967 phazor
+743 pie rid she
+74323 piece
+74323278 shebeast
+743237 pieces
+74327 shear
+743277 shears
+743284 sheath
+7433 ride shed side
+743328767 sideburns
+743337825 piedestal
+743353 piddle
+74337 sheep sides
+74338 sheet
+743387 sheets
+74339255 sidewalk
+743392557 sidewalks
+7433946337 sidewinder
+74343 ridge
+74345 sheik
+743453 sheild
+743464 riding
+74353 rifle shelf
+743537 rifles shelfs
+74355 shell
+743557 shells
+743583 shelve
+7435837 shelter shelves
+74358464 shelving
+7436 rien
+7437 pier pies
+7437433 sheriff
+74374337 sheriffs
+743772 sierra
+743773 pierre
+7437766 pierson
+743782 siesta
+7438 rift
+744 pig rig
+74435 pihel
+744352 shiela
+744353 shield
+744366 pigeon
+7443664653 pigeonhole
+74436646537 pigeonholes
+74438 shift
+744443 piggie
+7444464 rigging
+74448 right sight
+74448464 sighting
+744487 rights
+7445 phil
+744538 piglet
+744547 philip
+74454773 philippe
+7445535244 shillelagh
+7445547 phillip
+74455473 phillipe
+74455477 phillips
+74456767437 philosopher
+744587 philup
+7446 shin sign
+744625 signal
+744628873 signature
+74463 shine
+744637 shines
+7446453 shingle
+74464537 shingles
+7446464 shining
+7446637 shimmer
+7446637464 shimmering
+74466377 shimmers
+74467 signs
+74467678 signpost
+74469 shiny
+7447 rigs ship
+74476368 shipment
+744763687 shipments
+74477 ships
+74478 shirt
+744797325 shipwreck
+7447973257 shipwrecks
+744873 sigurd
+7448737 sigurds
+7453 pike pile
+745337 pilfer
+7453623 silence
+74536859 silently
+745464 piling
+7454746 pilgrim
+7455 pill silk
+745527 pillar
+7455277 pillars
+745569 pillow
+7455697 pillows
+74557 pills
+74566437 shlonger
+74568 pilot
+745687 pilots
+7458 silt
+745837 silver
+746 pin rio
+7462 pina
+74624 pinch
+74625 shock
+7463 pine shoe
+74637 shoes
+746374463 shoeshine
+7463765474 shoepolish
+74639 rhody
+7464 ring sing
+74643 singe
+746437 ringer singer singes
+7464377 singers
+7464464 ringing
+7464527 similar
+74647 rings
+7465 pink sink
+74657 sinks
+74658 pinku
+746586 pinkun
+74662 rhomb
+74662253 pinnacle
+74663 phone
+746632273 phonecard
+746632427437 phonecharger
+746632665 phonebook
+7466326684 phonebooth
+746632686837 phonecounter
+746636862377 phonenumbers
+746637 phones
+74667 simms
+74668 shoot
+7466837 shooter
+74668377 shooters
+7467 pimp shop
+74673 rinse shore
+746753 simple
+7467533737 shopkeeper
+74677 shops
+746773 shoppe
+7467737 shopper
+74677464 shopping
+74678 short
+746787 shorts
+7468 shot
+74683 shove
+746835 shovel
+7468357 shovels
+746845277 shotglass
+7468486 shotgun
+74686 photo
+74686267437 photocopier
+7468647274 photograph
+74686472747 photographs
+746867 photos
+74688 shout
+7469 show
+74693 rinze
+746937 shower
+746937435 showergel
+7469377 showers
+747 rip sip sir
+747283 pirate
+7472837 pirates
+7473 pipe rise
+74735463 pipeline
+747354637 pipelines
+74736 siren
+747367 sirens
+74737 pipes
+7474 pipi
+747426 sirian
+7474267 sirians
+747435 shriek
+747435464 shrieking
+7474357 shrieks
+74746 pipin
+747463 shrine
+747464 piping
+747465 shrink
+747466 siphon
+747467 shrimp
+7474677 shrimps
+7474679 shrimpy
+747666 shroom
+7476667 shrooms
+747683 shroud
+7477 piss shsr
+747733 pissed ripped
+74774 pippi
+74782 shrub
+74782237437 shrubberies
+747822379 shrubbery
+747827 shrubs
+747837 sister
+7478377 sisters
+747865 pistol
+7478657 pistols
+747866 piston
+7478667 pistons
+7478672683 ristorante
+748 pit sgt sit
+7482272 rhubarb
+74824 pitch
+7482437 pitcher
+74824377 pitchers
+7483 site
+74833 shuff
+74837 river
+748372265 riverbank
+748377 rivers
+74866637 pitonner
+7488 shut
+7488283 situate
+74883696 shutdown
+7488837 shutter
+74888377 shutters
+7488853 shuttle
+74888537 shuttles
+7488853763 shuttlepod
+749 six
+7493 size
+74943 pixie
+74963 rhyme
+74974225 physical
+749742426 physician
+7497427 physics
+7498336 sixteen
+74984 sixth
+749846 rhythm
+749893433 sixtyfife
+749893483 sixtyfive
+749896463 sixtynine
+74992 pizza
+74992488 pizzahut
+74993742 pizzeria
+75 pj rl
+7522 slab
+7522273 placard
+75222737 placards
+75223 place
+7522326 placebo
+752237 placer places
+752257 slacks
+75243 plaid
+75246 plain
+752467 plains
+7526 plan slam
+75263 plane
+752638 planet
+75263827486 planetarium
+7526387 planets
+75265 plank
+752657 planks
+7526637 slammer
+75268 plant
+7526837 planter
+75268377 planters
+752687 plants
+7527 plas slap
+75274 slash
+7527437 slashes
+752762 plasma
+752783 plaque
+7527837 plaques
+7527842 plastic
+7528 slat
+75283 plate slave
+7528328 plateau
+75283676 platform
+752837 plates skater slaves
+752844837 slaughter
+75286 plato
+75287 slats
+7528837 platter
+75288377 platters
+75288676 platvorm
+7529 play slay
+75292 plaza
+752937 player
+7529377 players
+75294475 playgirl
+7529464 playing
+7529476863 playground
+752962537 playmaker
+75323 plead
+753273 please
+75327873 pleasure
+753299 sleazy
+7533 sled
+753343 sledge
+753343426637 sledgehammer
+75337 sleep
+75337464 sleeping
+75353866 skeleton
+753538667 skeletons
+753824 sketch
+754 ski
+75423 slice
+75433 slide
+7543464 sliding
+75437 skies
+7545538 skillet
+75455387 skillets
+7546 skim skin
+754627326 skincream
+75463 slime
+75464 pling sling
+754647468 slingshot
+75465 slink
+7546637 skimmer
+754684 plinth
+7547 skip slip
+7547737 skipper slipper
+75477377 slippers
+75478 skirt
+7548 slit
+75488437 skivvies
+7566437 plonger
+75673 slope
+756737 slopes
+7568 plot slot
+756844 plough slough
+75687 pjotr plots slots
+7569 plow slow
+756937 slower
+756959 slowly
+75825 pluck
+758343 sludge
+7584 plug slug
+75847 slugs
+7585 rlul
+75855 skull
+758557 skulls
+7586 plum
+7586237 slumber
+75862464 plumbing
+758643 plunge
+7586437 plunger
+75865 plunk
+7587 plus
+75877 slurp
+7588 slut
+759 sky
+75954448 skylight
+7595463 skyline
+7597272737 skyscraper
+75972727377 skyscrapers
+76 so
+762 rob
+762237 robber
+7622372255 soccerball
+7622379 robbery
+76224 roach snach
+76225 smack snack
+762257 snacks
+7623 road robe
+762325625 roadblock
+76237 roads robes sober
+762378 robert
+7623929 roadway
+7624 snag
+762425 social
+76243 poche roche
+762437 rocher roches
+7624389 society
+76245 snail
+76246 robin
+7625 rock soak sock
+76253 snake
+762537 rocker snakes
+762537546 snakeskin
+762538 pocket rocket socket
+7625382665 pocketbook
+7625387 pockets rockets
+7625464 rocking
+76255 small
+7625537 smaller
+76257 rocks socks
+76257453 rockpile
+7626 roam
+76268 robot
+7626842 robotic
+7626848273 robotguard
+762687 robots
+7627 snap soap
+76272837 socrates
+76273 snare
+76274 smash
+76274389 sobriety
+76277 soaps
+76278 roast
+762824 snatch
+76287 pocus
+763 pod rod sod
+7632 soda sofa
+76325 sneak
+7632537 sneaker
+76325377 sneakers
+76327 smear sofas
+7632767 sodapop
+763277 smears
+763368 rodent
+76336862 rodentmc
+763368626844387 rodentmcnuggets
+763393 sneeze
+76344464 smegging
+76347 rmdir
+763486 podium
+76355 smell
+763559 smelly
+7636 poem
+76366493 sodomize
+7637 pods rods
+7638 soft
+76383637 softener
+763837465 softdrink
+7638374657 softdrinks
+763862842 pneumatic
+763879 poetry
+76389 softy
+76389273 software
+7642 soga
+76433 sniff
+76437 roger
+7643837 snifter
+7645 soil
+76453 smile
+764533 soiled
+764543 smilie
+7645464 smiling
+76459 smily
+76468 point
+764689 pointy
+76473 snipe
+764737 sniper
+76475 smirk
+764766 poison
+76476633 poisoned
+76477 snips
+7647737 snipper
+76477377 snippers
+76483 rogue smite
+764837 rogues
+76484 smith
+764849 smithy
+765 rol
+76527 solar
+7653 poke pole
+7653437 soldier
+76534377 soldiers
+7653626 poleman
+7653666 pokemon
+76536662655328466 pokemoncollection
+76537 poker poles
+765423 police
+765423626 policeman
+765423636 policemen
+7654248 solicit
+76543 solid
+765474 polish
+765484225 political
+76548427 politics
+7655 roll
+765533 rolled
+765536 pollen
+765537 roller
+76553726837 rollercover
+7655464 rolling
+7655867 rolltop
+765588466 pollution
+76567 rojos
+765722 solrac
+76583 solve
+76588466 solution
+766 poo ron son
+76624 pooch
+766253 ronald
+7662623 romance
+76627376 sombrero
+7663 pond poof roof some
+7663464 roofing
+76637 roofs
+7663837 poofter
+766384464 something
+7663867 rooftop
+7664 pooh song
+76642 sonia sonic
+76642327 poohbear
+76647 songs
+7665 pool
+76653 smoke
+766533 smoked
+766537 smoker smokes
+7665378225 smokestack
+766574275 poolshark
+7665742757 poolsharks
+7665752937 poolplayer
+76657529377 poolplayers
+766578425 poolstick
+766582253 pooltable
+7666 room smoo soon
+766624 smooch
+766637 pommes
+7666537 snooker
+76667 rooms snoop
+766684 smooth
+76669 sonny
+766693 snooze
+7667 poop poor romp sons
+766738358 roosevelt
+76678 snort
+7667837 rooster
+7668 root soot
+76682337 rootbeer
+766823377 rootbeers
+766843 soothe
+76687 roots
+76687453 sootpile
+7669 pony snow
+7669227853 snowcastle
+766926273 snowboard
+766926273464 snowboarding
+766935253 snowflake
+76694668377 snowhooters
+766946873 snowhouse
+7669626 snowman
+76697266837 snowscooter
+766972668377 snowscooters
+76697827 snowstar
+766978277 snowstars
+767 pop pos
+76723737 sorcerer
+7672379 sorcery
+76724 porch
+767279 rosary
+7672873 porcure
+7673 rope rose sore
+7673523337 ropeladder
+7673552 rosella
+76736279 rosemary
+76737 ropes roses
+767377 posess
+7673882 rosetta
+76748466 position
+7675 pork
+767674342 soporific
+76773 posse
+7677377 possess
+76773774667 possessions
+76774253 possible
+76774343 porridge
+7677437 poppies
+76776473 porpoise
+76779 poppy sorry
+7678 port post sort
+76782253 portable
+767825 portal
+7678257 portals
+7678269 postbox
+7678285547 portcullis
+76783 porte
+767837 porter portes poster
+7678377 posters
+7678426 portico
+7678437 portier
+76784653 porthole
+767846537 portholes
+767847 sortir
+7678626 postman
+76786275 postmark
+7678627837 postmaster
+7678633423 postoffice
+76787 ports posts
+76787248 portrait
+767872487 portraits
+7678786 rostrum
+768 pot
+76824 pouch
+7682437 pouches
+768283 rotate
+768286 potato
+7682863 potatoe
+76828637 potatoes
+768328 poteau
+76833 snuff
+768343 smudge
+7683437 smudges
+7684 snug
+7684323 pothead
+76844 rough
+76844288 roughcut
+7684453 snuggle
+768466 potion
+7685 soul
+7685879 poultry
+76863 pound round sound
+768632527837 soundblaster
+768637 rounds sounds
+76867 rotor
+7687 pots pour soup sous
+768723 source
+76873 rouse smurf soupe
+768747 souris
+76883 route
+768833 rotted
+768836 rotten
+768837 potter routes
+76884 south
+768843278 southeast
+768849378 southwest
+76889 potty
+769 row roy
+7692628 rowboat
+76926287 rowboats
+769337 powder
+76933733 powdered
+769337346437 powderfinger
+7693379 powdery
+76937 power
+769377 powers
+772 spa
+77223 space
+772232665437 spacecookies
+7722327238 spacecraft
+77223626 spaceman
+772237447 spaceship
+772237488853 spaceshuttle
+77223762538 spacerocket
+772237848 spacesuit
+7722378487 spacesuits
+7722425 spacial
+77228423 practice
+772324 sq2dbg
+77233 spade
+7724 pr24
+772473 praise
+7724743 prairie
+77247437 prairies
+77256 psalm
+7725623 psalm23
+772567 psalms
+77256723 psalms23
+7726 pram
+7726474 spanish
+77265 spank
+7726637 spanner
+77273 spare
+77275 spark
+7727553 sparkle
+77275537 sparkles
+772755464 sparkling
+7727559 sparkly
+772757 sparks
+7727599263 sparkywand
+7727769 sparrow
+7727842 spastic
+7728425 spatial
+77284253 spatiale
+7728852 spatula
+7729 pray spaz
+77296 prawn
+77299 spazz
+772992 spazza
+773 sq3
+773224 preach
+77322437 preacher
+773233464 preceding
+77324 pqdbg
+7732425 special
+77324626 speciman
+77324636 specimen
+773246367 specimens
+77324687 precious
+773247423 precipice
+77325 speak
+7732537 speaker
+77325377 speakers
+77327 spear
+773276468 spearmint
+773277 spears
+773282253 spectacle
+77328225345277 spectacleglass
+7732822537 spectacles
+7732837 specter
+77328377 specters
+7732873 spectre
+77333 speed
+773339 speedy
+77355 spell
+773552665 spellbook
+773557 spells
+77363 spend
+7736373 prendre
+7737273 prepare
+773727478466 prescription
+7737368 present
+773736828466 presentation
+773743368 president
+7737433687 presidents
+77376 sperm
+77377 press
+773772273 presscard
+773773 presse
+77377873 pressure
+7738 pret
+77384687 previous
+7738735 pretsel
+7738745 pretsil
+7738753 pretsle
+773889 pretty
+7739 spew
+774 pri
+77423 price spice
+774237 spices
+774237225 spicerack
+77424686 sphagnum
+77425 prick
+774337 spider
+7743372248 spiderbait
+7743377 spiders
+774337932 spiderweb
+774373 sphere
+774378 priest
+774378377 priestess
+7743787 priests
+774468 spigot
+774469 sphinx
+77453 spike
+774537 spikes
+77455 spill
+77459 spiky
+7746 spin
+774623 prince
+7746237 princes
+77462377 princess
+774624725 principal
+774625 spinal
+77463 spine
+77467489 priority
+77468 print
+7746837 printer
+77468464 printing
+774725 spiral
+77473 spire
+774748 spirit
+7747487 spirits
+77476 prism
+774766 prison
+77476637 prisoner
+7747667 prisons
+7748 spit
+7748283 private
+7748853 spittle
+77493 prize
+77496 prizm
+775274 splash
+775433 spliff
+77548 split
+77622253 probable
+77623 probe
+7762333 proceed
+7762377 process
+776237737 processes
+7762377464 processing
+776237767 processor
+7762536 problem
+7762873 procure
+7763 prod rsoe
+7763337 proffer
+776348 profit
+7763823 produce
+77638237 producer
+7764726 program
+7764726633 programmed
+7764726637 programmer
+77647267 programs
+77647377 progress
+7765328466 projection
+77653284667 projections
+776625 promak
+77663 spoof
+776636233 promenade
+7766384387 prometheus
+776643 sponge
+77665 spook spool
+776657 spooks
+776659 spooky
+77666 spoon
+77666385 spoonful
+776663857 spoonfuls
+776667 spoons
+77673 prose spore
+776732327464 sporebearing
+776735 propel
+776735537 propeller
+7767355377 propellers
+776737 spores
+77673789 property
+7767438 prophet
+776749522842 prophylactic
+7767495228427 prophylactics
+77676725 proposal
+7767673 propose
+77676748466 proposition
+776784 prosti
+7767848883 prostitute
+77678488837 prostitutes
+776787 sports
+776787283 prostrate
+7768 spot
+7768328466 protection
+7768328483 protective
+7768378 protest
+776837837 protester
+7768378377 protesters
+7768433 provide
+7768474667 provisions
+77687 spots
+77688 spout
+77729 spray
+777323 spread
+77736437 sprenger
+77744 sprig
+777464 spring
+77746553 sprinkle
+777465537 sprinkler
+7774655377 sprinklers
+777465537797836 sprinklersystem
+777468 sprint
+777483 sprite
+7774837 sprites
+777688 sprout
+777823 spruce
+778273 square
+778274 squash
+77828 squat
+7783393 squeeze
+77843 squid
+778437 squids
+778474 squish
+77847735 squirrel
+778477357 squirrels
+778478 squirt
+778499 squizz
+77877435 squrriel
+779 pry spy
+779227 prybar
+77945277 spyglass
+7794653 spyhole
+78 st sv
+782 pub rub
+7822 stab
+78223 stace
+782237 rubber
+7822377 rubbers
+78223775268 rubberplant
+782239 stacey
+7822397 staceys
+7822474 rubbish
+78225 stack
+782253 rubble stable
+78229 stacy
+782297 stacys
+7823 quad rube
+78233 staff
+78237 pubes
+7823726453 quadrangle
+7823745283725 quadrilateral
+7824 such
+78242 pubic
+78243 stage
+7824326224 stagecoach
+78245 quail
+78246 stain
+7824633 stained
+78246473 quagmire
+782467 stains
+78247 stair
+782472273 staircase
+782477 stairs
+782477837 stairstep
+7824778377 stairsteps
+78247929 stairway
+782479355 stairwell
+7825228483 stalactite
+78252284837 stalactites
+7825246483 stalagmite
+78252464837 stalagmites
+78252484837 stalagtites
+78253 stake
+782537 stakes
+782542 public
+782542493 publicize
+782547437 publisher
+7825474464 publishing
+7825489 quality
+78255 stalk stall
+782553 suckle
+782557 stalls
+78263 stand
+78263273 standard
+78263377 standers
+78263464 standing
+782637 stands
+78263743 submerge
+78263773 submerse
+782648 submit
+7826539 stanley
+78267 stamp
+782692 stanza
+7827 star
+78272273 starbase
+782727238 starcraft
+78273 stare
+78273474 starfish
+78274 stash
+78276362 subpoena
+782763627 subpoenas
+78277 stars
+78277447 starship
+78278 start
+782782623 substance
+7827833 started
+7827837 quarter
+78278372225 quarterback
+78278377 quarters
+782784888466 substitution
+7828 stat
+78283 state
+782836368 statement
+7828363687 statements
+7828466 station
+78284667 stations
+7828478427 statistics
+78287 stats
+782883 statue
+7828837 statues
+782883883 statuette
+782887 status
+7829 ruby stay
+782929 subway
+78325 steak steal
+783257 steaks
+78326 steam
+7832637 steamer
+783267447 steamship
+7832674477 steamships
+78327464 stearing
+7833 puff rude
+783326 stefan
+783336 sudden
+783337 rudder
+78335 steel
+783353 puddle ruffle
+7833537 puddles
+78336 queen
+78337 queer steer
+78337464 steering
+7833753 steeple
+783377 steers
+78339 puffy
+783522844 stelbaugh
+7836 stem sven
+783624 quench stench
+7836633 stemmed
+78367 stems
+7837 step suer
+78372322895 pteradactyl
+783727287 pterasaur
+783736 stereo
+783736797836 stereosystem
+78374 steph
+783742643 stephanie
+783745493 sterilize
+7837523337 stepladder
+7837643 steroid
+78376437 steroids
+783767287 pterosaur
+78377 steps
+78377464 stepping
+78378 quest
+78378466 question
+78379 query
+78383 steve
+783836 steven
+7839 stew
+7839728 stewrat
+784 rug
+7842433 suicide
+78425 quick stick
+7842537 sticker
+78425377 stickers
+78425378 quickest
+784254 quicki
+7842543 quickie
+7842559 quickly
+784257 sticks
+784257263 quicksand
+784259 sticky
+78427 sugar
+78433 stiff
+78433356 stiefeln
+784334 stiffi
+7843343 stiffie
+784337 stiffs
+784339 stiffy
+78438 quiet
+7844378466 suggestion
+78454 quiki
+78455 still quill
+78458 quilt
+784587 quilts
+7846 ruin
+78465 stink
+7846546 stinkin
+78465464 stinking
+784659 stinky
+78466 quinn
+78467 ruins
+7847 rugs stir
+7847737 stirrer
+78477377 stirrers
+7848 puit quit suit
+78482273 suitcase
+784824 stitch
+78483 quite suite
+78487 puits suits
+7848837 quitter
+7853 puke rule
+78533 puked
+78535463925537 pukelinewalker
+78537 ruler rules
+785387 sulfur
+7855 pull rull
+78552673 pullcord
+785539 pulley
+78573 pulse
+78573729 pulseray
+785737297 pulserays
+7857374353 pulserifle
+78573743537 pulserifles
+785748 pulpit
+786 rum run sun
+7862284464 sunbathing
+7862326 sunbeam
+78624 punch
+78625 stock
+786253 rumble
+7862537 rumbles
+78625463 sunblind
+7862546337 sunblinder
+78625464 stocking
+786254647 stockings
+78625625 sunblock
+786257453 stockpile
+786257666 stockroom
+78628873 puncture
+786337 sunder
+7864 rung sung
+7864527737 sunglasses
+78647 rungs
+7864746368 punishment
+7865 punk
+786536 stolen
+786537 punker
+7866224 stomach
+7866243 rummage
+78663 stone
+786631 stone'
+786635 pummel
+786637 stones summer
+786639675 stonework
+78665 stool
+786657 stools
+78667 stomp
+78669 sunny
+7867 pump stop suns
+78672 stop2
+7867243 storage
+78672437666 storageroom
+78673 store
+78673533737 storekeeper
+786735784587546 rumpelstiltskin
+786737 stores
+786737666 storeroom
+786738 sunset
+7867464 pumping storing
+7867473 sunrise
+786753784587546 rumplestiltskin
+78676 storm
+786767 storms
+78677 pumps
+7867737 stopper
+78679 story
+7868 punt
+786826 suntan
+7868266464 suntanning
+78683 stove
+78683867 stovetop
+7869 stow
+787 7up pup sup
+78724273 purchase
+787242737 purchaser
+78724448 straight
+7872444836 straighten
+787246 strain
+787248 strait
+787248522538 straitjacket
+7872643 strange
+78727 strap
+78729 straw
+78729626 strawman
+7873 sure
+7873223 surface
+787326 stream
+78733 puree
+787338 street
+78733832623 streetdance
+78733854448 streetlight
+787338544487 streetlights
+7873387 streets
+78733874663 streetphone
+7873389327 streetwear
+78736484 strength
+78737 super
+787373278 superfast
+787374583 superglue
+7873747277 supergrass
+787377527 superplas
+7873784767 supervisor
+7873824 stretch
+7874 push
+787428679 purgatory
+78743437 purifier
+787437 pusher
+7874377 pushers
+7874464 pushing
+78745 pupil
+787453 strike
+787457 pupils
+787464 string
+7874647 strings
+78747 strip
+787473 stripe
+7874733 striped
+7874737 stripes
+7874746 pushpin
+787477 strips
+78747732724 stripsearch
+78749 strix
+787653 stroke
+787655 stroll
+787664 strong
+787664269 strongbox
+7877 russ
+78773 purse
+7877328 suspect
+78773287 suspects
+7877363 suspend
+787736337 surrender
+787738 puppet
+7877426 russian
+787743 puppie
+787753 purple
+78775437 supplies
+7877587 surplus
+787759 supply
+7877673 purpose
+7877678 support
+787767837 supporter
+78776787 supports
+787768634647 surroundings
+78777473 surprise
+78779 puppy pussy
+78779228 pussycat
+7878 rust
+7878246 sustain
+787828873 structure
+7878288737 structures
+787834552623 surveillance
+787839 survey
+78784825 survival
+78786738 strumpet
+78788 strut
+7878873 rupture
+78789 rusty
+788 put
+7883 stud
+78833 stuff
+78833464 stuffing
+7883368 student
+78833687 students
+788346 studio
+78839 study
+7886 stun
+78867 stump
+788677 stumps
+788743 putrid stupid
+788837 sutter
+7888377 sutters
+789 sux
+789953 puzzle
+79 sw
+7925569 swallow
+7926 ryan swan
+79267 swamp swans
+792679 swampy
+7927 swap
+79276 swarm
+79276464 swarming
+79278422 swastica
+792784223524 swasticaflag
+7927842235247 swasticaflags
+7928 swat
+7929 sway
+793 rye
+79327323 ryebread
+79328 sweat
+79337 sweep
+7933737 sweeper
+79338 sweet
+7944 swig
+79455 swill
+7946 swim
+79464 swing
+794647 swings
+79464738 swingset
+79466437 swimmies
+79466464 swimming
+79467848 swimsuit
+794687687377 swimtrousers
+79473 swipe
+79477 swiss
+794824 switch
+79482425233 switchblade
+794824269 switchbox
+79482437 switches
+795 syl
+796265 symbol
+7962657 symbols
+79673 sword
+796737 swords
+796737626 swordsman
+7967376267 swordsmans
+79684 synth
+79684374937 synthesizer
+796843842 synthetic
+79687 pyotr
+7972643 pyramid
+7973 pyre
+797836 system
+79787 syrup
+797877 syrups
+798466 python
+799764912 sw9764912
+82 ta u2
+822 tab vac
+82227226 tabascco
+82235 tabel
+8225 tack
+82253 table
+822537 tables
+822538 tablet
+8225387 tablets
+822553 tackle
+8226 taco
+8227 tabs
+823 tad
+82337 vader
+8238 taft
+824 tag tai
+824462 vagina
+824484 tahiti
+8245 tail
+824567 tailor
+82457223 tailrace
+8246 vain
+8247268 vagrant
+82477328 vaisseau
+8252 ucla
+82526423 valanice
+8253 take tale
+825464 taking
+825473 valise
+82547626 talisman
+8255 talk tall
+825539 valley
+825543 talkie
+825586463 valjumine
+8257 takr
+82583 value valve
+825837 valves
+826 tan van
+8263 tame vane
+826325473 vandalise
+826325493 vandalize
+82647 tamir
+826489 vanity
+8265 tank
+82657 tanks
+8266464 tanning
+8267473 vampire
+82674737 vampires
+826766 tampon
+827 tap var vcr
+82726 taran
+8273 tape vase
+8273554 taselli
+82737 taper vases
+8273787437 tapestries
+82737879 tapestry
+82742253 variable
+827438 target
+8274387 targets
+82767493 vaporize
+827677 vapors
+8277 taps
+82783 taste
+8279 tarx
+828 vat
+82822 ucucc
+82837 tater
+828376 tavern
+828377 taters
+82858 vault
+828866 tattoo
+829 tax
+8294 taxi
+8294222 taxicab
+83 ve
+832 tea
+8322437 teacher
+83224464 teaching
+832287 teacup
+8324642426 technician
+83246424267 technicians
+8324647837 techniques
+8324665649 technology
+8326 team
+83267 teams
+8327 tear
+83277 tears
+833 ted
+83339 teddy
+833392327 teddybear
+8336 teen
+83362437 teenager
+833833 teevee
+83384 teeth
+834382253 vegetable
+8343822537 vegetables
+8343828466 vegetation
+8344235 vehicel
+8344253 vehicle
+83442537 vehicles
+8344437 veggies
+8345 veil
+8346 vein
+835246 telbin
+8353 tele
+835372673 telescope
+8353726735367 telescopelens
+83537267353673 telescopelense
+8353726742 telescopic
+835374663 telephone
+8353746632273 telephonecard
+83537466326684 telephonebooth
+8353746636862377 telephonenumbers
+8353746637 telephones
+83537466464 telephoning
+83537678 teleport
+8353767828466 teleportation
+8353767837 teleporter
+8353847466 television
+83538474667 televisions
+8353847466738 televisionset
+8353882243 teletubbie
+83538822437 teletubbies
+835388229 teletubby
+8353882297 teletubbys
+8355 tell
+835537 teller
+835543 tellie
+8355437 tellies
+83559 telly
+836 ten ufo
+83633629 tendency
+836337 tender vender
+8363387 vendeur
+8363464 vending
+83634646224463 vendingmachine
+83648258466 venitaltion
+836637 tenner
+836647 tennis
+83666 venom
+836753 temple
+83676 tempo
+83676725 temporal
+83678 tempt
+8368 tent vent
+83682253 tentacle
+836822537 tentacles
+83682528466 ventalation
+83684 tenth
+83684258466 ventialtion
+83684528387 ventilateur
+83684528464 ventilating
+83684528464724238 ventilatingschaft
+83684528466 ventilation
+8368452846674238 ventilationshaft
+836845284667473 ventilationpipe
+8368452846674737 ventilationpipes
+836845284668823 ventilationtube
+8368452846688237 ventilationtubes
+8368452867 ventilator
+83687 tents vents
+837 ver
+837225493 verbalize
+8372632 veranda
+837268766 vercotron
+8375 tesk
+837638536 vermeulen
+837646 vermin
+83764625 terminal
+837646257 terminals
+837646283 terminate
+83772 terra
+8377223 terrace
+8377246 terrain
+83773 verse
+837735 vessel
+8377466 version
+837767 terror
+837778 tessst
+8378 test vest
+83783272 vertebra
+837832723 vertebrae
+837837 tester
+83784253 testicle
+837842537 testicles
+837842853 vestibule
+8378452 tequila
+83784552 tequilla
+8379 very
+838 vdu
+8383 veve
+8387 vdus
+838747 tetris
+8398 text
+8398453 textile
+83987 texts
+84 uh vi
+842 thc vic
+84225 tical
+84246489 vicinity
+8425 tick vial
+842538 ticket
+8425387 tickets
+842553 tickle
+84257 vials
+8426 than
+84265 thank
+842657 thanks
+84272 tiara
+8428 that
+8428227 tictacs
+842846 victim
+8428463 victime
+84284637 victimes
+842867 victor
+84288257 victuals
+843 the tie
+8432837 theater
+8432873 theatre
+8433 thee
+84336 video
+8433673267337 videorecorder
+843368273 videotape
+84338 theft
+8434263 vidgame
+84347 their
+8436 them then
+8436735837 themselves
+843679 theory
+84373 there these
+8437368337844 vierenveertig
+8439 tidy view
+8439464 viewing
+8439727336 viewscreen
+84397273367 viewscreens
+84397678 viewport
+843976787 viewports
+844 vii
+84425 thick
+8442538 thicket
+84433 thief
+84437 tiger
+844383 thieve
+8444 viii
+84444 thigh
+844447 thighs
+84448 tight
+8444859 tightly
+8446 thin
+8446253 thimble
+8446253385 thimbleful
+84462537 thimbles
+84463 thine
+84464 thing
+84464262544 thingamajig
+844647 things
+844649 thingy
+84465 think
+84465464 thinking
+8447 this
+84473 third
+84478336 thirteen
+844789 thirty
+84484 uhhuh
+8448437 thither
+84529 vijay
+8453 tile vile
+84537 tiles
+84539675 tilework
+8454 tiki
+84547 tikis
+8455 till
+8455243 village
+84553 ville
+8459 ugly
+846 tin vin
+846237 timber
+8462377 timbers
+846246489 vincinity
+8463 time vine
+846337 tinder
+8463427 vinegar
+84637 timer times vines
+846374323 timepiece
+846382253 timetable
+8463822537 timetables
+846437 tinier
+846464 timing
+846472 viogra
+8465283 violate
+8465368 violent
+846538 violet
+846543 tinkie
+846543946543 tinkiewinkie
+846546 violin
+846553 tinkle
+84659 tinky
+8465994659 tinkywinky
+846627 thomas
+84664 thong
+84668 timov
+8467 thor
+846729463 thorazine
+84673 those
+84676 thorn
+846767 thorns
+8468 thou
+846844 though
+8468448 thought
+84684487 thoughts
+84687263 thousand
+8469 tiny
+847 tip
+847243 visage
+847274 thrash
+8473 tire
+847323 thread
+8473237 threads
+847328 threat
+84733 three tired
+847337 tireds
+84737 tires viper
+8474 virh
+8474253 visible
+847446 virgin
+847468 vishnu
+84748 visit
+8474867 visitor
+84748677 visitors
+847628 throat
+847647 tiroir
+847663 throne
+847664 throng
+8476844 through
+84768853 throttle
+84769 throw
+8476937 thrower
+84769464 throwing
+8477 tips
+847739 tippex
+847783 tissue
+8477837 tissues
+8478 thru
+847825493 visualize
+84786 thrum
+847863 tiptoe
+847866464 thrumming
+8478664647 thrummings
+847867 thrums
+84787 virus
+8478737 viruses
+847878 thrust
+84787837 thruster
+847878377 thrusters
+848 tit
+84826 titan
+8482642 titanic
+84826427 titanics
+8484 uhuh
+848437 tities
+84847 thugs
+84853 title
+848537 titles
+84862 thumb
+8486337 thunder
+84867 thump
+8487 tits
+84875464 titsling
+8488437 titties
+84889 titty
+849 thy
+8494225 thwhack
+84963 thyme
+8497353 thyself
+853623 ulence
+8539 ukey
+85872 ultra
+858723278 ultrafast
+86 to
+8622226 tobacco
+86225493 vocalize
+8623 toad
+862378665 toadstool
+8623786657 toadstools
+8624246 unchain
+8625684 uncloth
+86256843 unclothe
+862568433 unclothed
+862658 unbolt
+8626837 uncover
+86273552 umbrella
+86278 toast
+8627837 toaster
+86282553 unbuckle
+862833 uncuff
+863 toe
+86327836 unfasten
+8632784 unearth
+86329 today
+863297 todays
+863323 undead
+8633537 toddler
+86337 under
+8633725684464 underclothing
+8633726837 undercover
+8633727874 underbrush
+86337476863 underground
+8633763284 underneath
+863376678 undermost
+8633772687 underpants
+8633778263464 understanding
+8633792837 underwater
+863379327 underwear
+8633796753 underworld
+86338837 unfetter
+86352 vodka
+8636 todo undo
+863653 unfold
+863737 undres
+8637377 undress
+863737733 undressed
+8639 undy
+86423 voice
+864237 voices
+8642676 unicorn
+864285 vohaul
+8642857 vohauls
+8643 void
+864336843433 unidentified
+8643676 uniform
+86436767 uniforms
+86438437 together
+864453 toggle
+8644824 unhitch
+8645283 toilate
+864538 toilet
+86453835874 toiletflush
+8645387 toilets
+86453872737 toiletpaper
+8645387328 toiletseat
+864657837 unholster
+86466 union
+864665 unhook
+8648 unit
+86483 unite
+864831 unite!
+864837725 universal
+86483773 universe
+8648377489 university
+86487 units
+8652266 volcano
+8652824 unlatch
+86529385 unlawful
+8653 toke
+86536 token
+865367 tokens
+8654448 unlight
+86548 unlit
+865623 unload
+865625 unlock
+8656696 unknown
+865669619673 unknown.word
+8658243 voltage
+865863 volume
+8658637 volumes
+866 tom too
+8662 tomb
+86624295 tomahawk
+86627 tombs
+866278663 tombstone
+8662786637 tombstones
+866286 tomato
+8663 tome tone
+866366 voodoo
+86637 tomes tones
+86642 tonic
+86648 vomit
+866483 tongue
+8665 tool
+8665269 toolbox
+86657 tools
+86657433 toolshed
+86667769 tomorrow
+8667837 vonster
+86678377 vonsters
+8668 toot
+86684 tooth
+8668433 toothed
+8669 tony
+86697 tonys
+867 top vms
+86724 torch
+8672437 torches
+86725426 vorakian
+8672726253 unscramble
+8672739 unscrew
+86732873 unsecure
+86733 topee
+86746283 unrinate
+867584 unplug
+8676 torn
+8676236 tornado
+8676336426 tormeenian
+86763364267 tormeenians
+867655 unroll
+8676678 topmost
+8677 tops toss
+867737 tosser
+86774 topsg
+86776 torso
+8677645 topsoil
+867839 vortex
+86784552 tortilla
+8678873 torture
+868 tnt
+8682 v6ta
+86824 touch
+868243 touche
+8682437 touches voucher
+86824464 touching
+86825 total
+8682559 totally
+86826453 untangle
+868345 unveil
+86836 totem
+86843 untie
+86845 until
+86873 toupe
+868732 toupea
+868733 toupee
+8689 unty
+869 tow toy
+869243 voyage
+869273 toward
+8692737 towards
+86935 towel
+869353883 towelette
+869357 towels
+86937 tower
+869377 towers
+86946 toxin
+8695263 toyland
+8696 town
+86966873 toymouse
+86967 towns
+86967447 township
+8697 toys vows
+87 tp ts up us vs
+87223 trace
+87225 track
+87225464 tracking
+87233 trade
+8723342 traffic
+87245 trail
+8724537 trailer
+872457 trails
+87246 train
+87246377 trainers
+872467 trains
+8724825 upchuck
+8726 tram
+87267 tramp
+87267337 transfer
+872674368 transient
+8726748 transit
+872675283 translate
+8726752837 translater
+87267528464 translating
+87267528466 translation
+8726752867 translator
+87267648 transmit
+87267648837 transmitter
+87267766337 transponder
+872677678 transport
+87267767828466 transportation
+87267767837 transporter
+872677678464 transporting
+8727 trap
+87273667 trapdoor
+87274 trash
+87274226 trashcan
+872742267 trashcans
+87274227538 trashbasket
+87274246 trashbin
+872742467 trashbins
+872773 trappe
+872835 travel
+87283537 traveler
+872835464 traveling
+872835537 traveller
+87283773 traverse
+87286582 travolta
+8729 tray
+873 use
+87323 tread
+873236455 treadmill
+873237 treads
+87327873 treasure
+87327879 treasury
+87328 treat
+8733 tree used
+873346873 treehouse
+8733626 treeman
+8733636 treemen
+87337 trees
+8735377 useless
+873624 trench
+8736242628 trenchcoat
+87364 tseng
+8737 user
+87386378433356 tretoestiefeln
+874 uri
+87423 tribe
+87425 trick
+8742863 tribune
+87429253 tricycle
+8743368 trident
+874368 urgent
+8744437 trigger
+874478 tshirt
+8746 trio
+874625 urinal
+8746283 urinate
+87463 urine
+87464 using
+87465387 trinkets
+8746637 trimmer
+8747 trip
+8747233 upgrade
+87543837 uplifter
+876 urn
+876225 trobak
+87627 urmas
+8763 trod
+8764563983 troglodyte
+87655 troll
+876557 trolls
+87658738 usoltsev
+8766 upon
+87666 vroom
+876666 vrooom
+87667 troop
+8766737 trooper
+87667377 troopers
+8767 urns
+87674437 trophies
+876749 trophy
+8768 trou
+8768253 trouble
+876844 trough
+87687 trous
+87687377 trousers
+876935 trowel
+87695 trowl
+87737 upper
+877376678 uppermost
+877433 upside
+877658738 ussoltsev
+87782477 upstairs
+87825 truck usual
+8783 true
+87832 truda
+878524272 tsukahara
+87859 truly
+8786353 trundle
+87865 trunk
+878657 trunks
+8786738 trumpet
+879 try
+88 tv
+881 tv.
+882 tub
+882243 tubbie
+8822437 tubbies
+8823 tube
+88237 tubes
+882537 tucker
+8836745 utensil
+88367457 utensils
+8838 tuft
+88387 tufts
+884 tug
+8842628 tugboat
+8845473 utilise
+88454737 utiliser
+8845489 utility
+8845493 utilize
+88547 tulip
+885477 tulips
+8858873 vulture
+88588737 vultures
+886253 tumble
+8863 tune
+88637 tunes
+886464 tuning
+886635 tunnel
+8866357 tunnels
+88669 tummy
+887 tvs
+88726 turbo
+8873 turd turf
+887336 tureen
+88738 tvset
+88746 turin
+8875 turk
+887539 turkey
+8875397 turkeys
+8876 turn
+887682253 turntable
+887738 turret
+887828466 tvstation
+887853 turtle
+88837 utter
+89325 tweak
+893583 twelve
+893689 twenty
+8943353 twiddle
+8944 twig
+89447 twigs
+8946 twin
+89463 twine
+8946543 twinkie
+8946553 twinkle
+89465537 twinkles
+894655464 twinkling
+89467 twins
+89475 twirl
+89478 twist
+89537 tyler
+896 two
+8962656733 twocolored
+89626568733 twocoloured
+8973 type
+911 911
+92 wc ya
+922 waa zac
+922237 yabber
+9224379 zachery
+9225379 zackery
+9233 wade
+923464 wading
+924 wag yah
+92437 wager
+9245 wail
+9245464 wailing
+92457 wails
+92466 wagon
+924667 wagons
+92478 waist
+924782263 waistband
+9248 wait
+924837 waiter
+9248464 waiting
+92487377 waitress
+924934 yahweh
+925 yak
+925268 walbot
+9253 wake
+92536 waken
+9255 walk wall
+9255268 wallbot
+92552687 wallbots
+925538 wallet
+925543 walkie
+925546 walkin
+9255464 walking
+925567 wallop
+925569277 wallowars
+92557 walls
+925572737 wallpaper
+92558476844 walkthrough
+9255929 walkway
+925688 walnut
+9256887 walnuts
+9263 wand
+926337 wander
+9264 wang
+9265 wank yank
+926537 wanker
+9268 want
+926833 wanted
+92687 wants
+9269 yaow
+927 war yap zap
+9273 ware yard
+9273273 warfare
+927346873 warehouse
+9273468737 warehouses
+92737 wares yards
+92737623 wardrobe
+927376237 wardrobes
+927378425 yardstick
+9274 wash
+927422746 washbasin
+927425684 washcloth
+927426 zarian
+92742695 washbowl
+92742876 washburn
+927437 washer
+9274377 washers
+9274464 washing
+92744646224463 washingmachine
+9274464866 washington
+9275625 warlock
+9276 warm yarn
+9276464 warning
+9277 warp wars wasp
+9277268 warrant
+9277467 warrior
+92774677 warriors
+92777 wasps
+927777333 warpspeed
+9277978425 zappystick
+92783 waste
+92783226 wastecan
+92783227538 wastebasket
+92783246 wastebin
+9278372737 wastepaper
+92824 watch
+9282437 watcher
+9282486937 watchtower
+9283 wave
+92837 water waver waves
+9283722746 waterbasin
+92837266537 watercooler
+928373255 waterfall
+9283732557 waterfalls
+9283737668 waterfront
+928374653 waterhole
+928377 waters
+92837737378647 waterreservoir
+928377473 waterpipe
+9283774737 waterpipes
+92837929 waterway
+9284 xavi
+928766 watson
+929 wax way
+92937 waxer
+93 we ye
+932 web yea
+9324 yeah
+932568 zealot
+9327 wear webs year
+93272 zebra
+9327357 weasels
+932766 weapon
+9327667 weapons
+93283 weave
+9328437 weather
+9328437627 weathermap
+933 wed wee
+9333 weed
+933332837 weedeater
+9333464 wedding
+93337 weeds
+93339422537 weedwhacker
+9335 week
+9337 weep
+9337464 weeping
+93378 weest
+93444 weigh
+934448 weight
+9344487 weights
+93473 weird
+934736 weirdo
+934737 weiser
+9352663 welcome
+93532 zelda
+9355 well yell
+9355464 yelling
+935569 yellow
+93556933 yellowed
+93557 yells
+935827 zeltar
+9358277 zeltars
+93582771 zeltars)
+93624 wench
+93666 xenon
+9368 went
+937 yep yes
+9373 werd
+9378 west
+937837329 yesterday
+938 wet
+9384 yeti
+9387 zeus
+9387848 wetsuit
+94 xi
+94225 whack
+9422537 whacker
+94253 whale
+9425317 whale's
+94273 wharf
+9428 what
+942824262225548 whatchamacallit
+942827392 whatareya
+94287 whats
+94328 wheat
+9433 wide wife
+94335 wheel
+94335227769 wheelbarrow
+943357 wheels
+94336 widen
+94337 wifes
+943438 widget
+94353 wield
+9436 when
+94373 where
+94373226887 whereabouts
+943737 wheres
+944 wig xii zig
+94433 whiff
+9444 xiii
+94449 ziggy
+944497 ziggys
+94453 while
+9447 whip whir zigs
+9447539 whiskey
+944757665 whirlpool
+944759 whisky
+94477 whirs
+9447737 whisper
+9447853 whistle
+94483 white
+944836377 whiteness
+944839 whitey
+94485267 whitlams
+94499 whizz
+945 wil
+9452378 wilbert
+9452478 wilbirt
+94526 wilco
+9453 wild
+9453356937 wildflower
+94533569377 wildflowers
+9453376377 wilderness
+94535433 wildlife
+9455 will
+9455387 willets
+9455426 william
+94554267 williams
+945543 willie
+94559 willy
+945597 willys
+945766 wilson
+946 who
+946264 whoami
+9463 wind wine zine
+946369 window
+9463697 windows
+9463697263 windowpane
+94636972637 windowpanes
+9463697455 windowsill
+94636974557 windowsills
+9463744353 windshield
+946387 windup
+9464 wing
+946433 winged
+94647 wings
+9465 wink
+94653 whole
+946543 winkie
+94659 winky
+9466 wino
+946637 winner
+946643 winnie
+9466464 winning
+946674 whoosh
+9466743 whoopie
+9466948 whoozit
+9467 wimp
+94673 whore
+946737 whores
+9467866 winston
+946837 winter
+9473 wipe wire wise
+94735377 wireless
+947366 wisdom
+94737 wires
+9474 wish
+947437 wishes
+947464 wiring
+94779 zippy
+948 xiv
+94824 witch
+9482437 witches
+94837 wives
+9484 with
+94843729 withdraw
+94843729464 withdrawing
+948437295 withdrawl
+948446 within
+9484688 without
+9486377 witness
+949 why wiz
+949273 wizard
+9499 wizz
+9596223 zkxoabd
+96 yo
+962 yob
+9626 yobo
+9629 yoaw
+9632 yoda
+9643 woid
+9653 wolf
+9653626 wolfman
+9653726 wolfram
+965638 zoloft
+96624 zombi
+966243 zombie
+9662437 zombies
+966247 zombis
+96626 woman
+966267 womans
+9663 wood zone
+9663288837 woodcutter
+96632888377 woodcutters
+966336 wooden
+966337 wonder
+96635263 woodland
+96636 women
+966367 womens
+96637 woods
+96637433 woodshed
+966378683 woodstove
+96639 woody
+96639273 woodward
+9665 wool
+9666 zoom
+9666464 zooming
+96666 zooom
+9673 word
+96737 words
+9675 work york
+967523624 workbench
+96753 world
+967537 worker
+9675377 workers
+96757 works
+9675867 worktop
+9676 worm worn
+9676684486 zornothium
+9677447 worship
+96774477377 worshippers
+967845377 worthless
+968 you zot
+96853 would
+96863 wound
+96864 young
+968647837 youngster
+9687 your
+96873 youre youse
+96877 yours
+96877353 yourself
+96884 youth
+96884385 youthful
+972484 wraith
+9724847 wraiths
+9727 wrap
+9729 xray
+97297 xrays
+97325 wreck
+97325243 wreckage
+9732533 wrecked
+973257 wrecks
+973624 wrench
+97362437 wrenches
+9737853 wrestle
+97478 wrist
+9747892824 wristwatch
+97483 write
+974837 writer
+9748464 writing
+974846462837425 writingmaterial
+97484647 writings
+974846482253 writingtable
+9748464822537 writingtables
+97664 wrong
+97683 wrote
+98 xv
+98222 yucca
+982227256 yuccapalm
+9846 yugo
+987 wus yup
+98992 wuzza
+99 xx xy zz
+99464 xwing
+998 xxv
+99867 zztop
+999 xxx
+99999 xyzzy
diff --git a/dists/slackware/scummvm.SlackBuild.in b/dists/slackware/scummvm.SlackBuild.in
new file mode 100755
index 0000000000..84ac94d7e9
--- /dev/null
+++ b/dists/slackware/scummvm.SlackBuild.in
@@ -0,0 +1,58 @@
+#!/bin/sh
+# ScummVM Slackware 9(.1) Package Creation Script
+# by Jay Lanagan - roni@parodius.com
+
+CWD=`pwd`
+if [ "$TMP" = "" ]; then
+ TMP=/tmp
+fi
+PKG=$TMP/package-scummvm
+
+VERSION=@VERSION@
+ARCH=i486
+BUILD=1
+
+if [ ! -d $TMP ]; then
+ mkdir -p $TMP
+fi
+if [ ! -d $PKG ]; then
+ mkdir -p $PKG
+fi
+
+cd $TMP
+# tar xzvf scummvm-$VERSION.tgz
+tar xzvf scummvm-$VERSION.tar.gz
+# cd scummvm-$VERSION
+cd scummvm
+chown -R root.root .
+CXXFLAGS="-O2 -march=i486 -mcpu=i686" \
+./configure
+make
+strip scummvm
+chmod 755 scummvm
+mkdir -p $PKG/usr/bin
+cp scummvm $PKG/usr/bin
+chown -R root:bin $PKG/usr/bin
+gzip -9 dists/scummvm.6
+mkdir -p $PKG/usr/man/man6
+cp dists/scummvm.6.gz $PKG/usr/man/man6
+mkdir -p $PKG/usr/doc/scummvm-$VERSION
+cp -a AUTHORS COPYING COPYRIGHT ChangeLog NEWS README TODO \
+ $PKG/usr/doc/scummvm-$VERSION
+chmod 644 $PKG/usr/doc/scummvm-$VERSION
+mkdir -p $PKG/install
+cat $CWD/slack-desc > $PKG/install/slack-desc
+mkdir -p $PKG/usr/share/pixmaps
+cp -a icons/scummvm.ico icons/scummvm.xpm \
+ $PKG/usr/share/pixmaps
+mkdir -p $PKG/usr/share/applications
+cp -a dists/scummvm.desktop \
+ $PKG/usr/share/applications
+
+cd $PKG
+makepkg -l y -c n $TMP/scummvm-$VERSION-$ARCH-$BUILD.tgz
+
+if [ "$1" = "--cleanup" ]; then
+ rm -rf $TMP/scummvm-$VERSION
+ rm -rf $PKG
+fi
diff --git a/engines/agi/wagparser.cpp b/engines/agi/wagparser.cpp
new file mode 100644
index 0000000000..bac4a34454
--- /dev/null
+++ b/engines/agi/wagparser.cpp
@@ -0,0 +1,229 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#include "common/stdafx.h"
+
+#include "common/file.h"
+#include "common/util.h"
+
+#include "agi/wagparser.h"
+
+namespace Agi {
+
+WagProperty::WagProperty() {
+ setDefaults();
+}
+
+WagProperty::~WagProperty() {
+ deleteData();
+}
+
+WagProperty::WagProperty(const WagProperty &other) {
+ deepCopy(other);
+}
+
+WagProperty &WagProperty::operator=(const WagProperty &other) {
+ if (&other != this) deepCopy(other); // Don't do self-assignment
+ return *this;
+}
+
+void WagProperty::deepCopy(const WagProperty &other) {
+ _readOk = other._readOk;
+ _propCode = other._propCode;
+ _propType = other._propType;
+ _propNum = other._propNum;
+ _propSize = other._propSize;
+
+ deleteData(); // Delete old data (If any) and set _propData to NULL
+ if (other._propData != NULL) {
+ _propData = new char[other._propSize + 1UL]; // Allocate space for property's data plus trailing zero
+ memcpy(_propData, other._propData, other._propSize + 1UL); // Copy the whole thing
+ }
+}
+
+bool WagProperty::read(Common::SeekableReadStream &stream) {
+ // First read the property's header
+ _propCode = (enum WagPropertyCode) stream.readByte();
+ _propType = (enum WagPropertyType) stream.readByte();
+ _propNum = stream.readByte();
+ _propSize = stream.readUint16LE();
+
+ if (stream.ioFailed()) { // Check that we got the whole header
+ _readOk = false;
+ return _readOk;
+ }
+
+ // Then read the property's data
+ deleteData(); // Delete old data (If any)
+ _propData = new char[_propSize + 1UL]; // Allocate space for property's data plus trailing zero
+ uint32 readBytes = stream.read(_propData, _propSize); // Read the data in
+ _propData[_propSize] = 0; // Set the trailing zero for easy C-style string access
+
+ _readOk = (_propData != NULL && readBytes == _propSize); // Check that we got the whole data
+ return _readOk;
+}
+
+void WagProperty::clear() {
+ deleteData();
+ setDefaults();
+}
+
+void WagProperty::setDefaults() {
+ _readOk = false;
+ _propCode = PC_UNDEFINED;
+ _propType = PT_UNDEFINED;
+ _propNum = 0;
+ _propSize = 0;
+ _propData = NULL;
+}
+
+void WagProperty::deleteData() {
+ if (_propData != NULL) {
+ delete _propData;
+ _propData = NULL;
+ }
+}
+
+WagFileParser::WagFileParser() :
+ _parsedOk(false) {
+}
+
+WagFileParser::~WagFileParser() {
+}
+
+bool WagFileParser::checkAgiVersionProperty(const WagProperty &version) const {
+ if (version.getCode() == WagProperty::PC_INTVERSION && // Must be AGI interpreter version property
+ version.getSize() >= 3 && // Need at least three characters for a version number like "X.Y"
+ isdigit(version.getData()[0]) && // And the first character must be a digit
+ (version.getData()[1] == ',' || version.getData()[1] == '.')) { // And the second a comma or a period
+
+ for (int i = 2; i < version.getSize(); i++) // And the rest must all be digits
+ if (!isdigit(version.getData()[i]))
+ return false; // Bail out if found a non-digit after the decimal point
+
+ return true;
+ } else // Didn't pass the preliminary test so fails
+ return false;
+}
+
+uint16 WagFileParser::convertToAgiVersionNumber(const WagProperty &version) {
+ // Examples of the conversion: "2.44" -> 0x2440, "2.917" -> 0x2917, "3.002086" -> 0x3086.
+ if (checkAgiVersionProperty(version)) { // Check that the string is a valid AGI interpreter version string
+ // Convert first ascii digit to an integer and put it in the fourth nibble (Bits 12...15) of the version number
+ // and at the same time set all other nibbles to zero.
+ uint16 agiVerNum = ((uint16) (version.getData()[0] - '0')) << (3 * 4);
+
+ // Convert at most three least significant digits of the version number's minor part
+ // (i.e. the part after the decimal point) and put them in order to the third, second
+ // and the first nibble of the version number. Just to clarify version.getSize() - 2
+ // is the number of digits after the decimal point.
+ int32 digitCount = MIN<int32>(3, ((int32) version.getSize()) - 2); // How many digits left to convert
+ for (int i = 0; i < digitCount; i++)
+ agiVerNum |= ((uint16) (version.getData()[version.getSize() - digitCount + i] - '0')) << ((2 - i) * 4);
+
+ debug(3, "WagFileParser: Converted AGI version from string %s to number 0x%x", version.getData(), agiVerNum);
+ return agiVerNum;
+ } else // Not a valid AGI interpreter version string
+ return 0; // Can't convert, so failure
+}
+
+bool WagFileParser::checkWagVersion(Common::SeekableReadStream &stream) {
+ if (stream.size() >= WINAGI_VERSION_LENGTH) { // Stream has space to contain the WinAGI version string
+ // Read the last WINAGI_VERSION_LENGTH bytes of the stream and make a string out of it
+ char str[WINAGI_VERSION_LENGTH+1]; // Allocate space for the trailing zero also
+ uint32 oldStreamPos = stream.pos(); // Save the old stream position
+ stream.seek(stream.size() - WINAGI_VERSION_LENGTH);
+ uint32 readBytes = stream.read(str, WINAGI_VERSION_LENGTH);
+ stream.seek(oldStreamPos); // Seek back to the old stream position
+ str[readBytes] = 0; // Set the trailing zero to finish the C-style string
+ if (readBytes != WINAGI_VERSION_LENGTH) { // Check that we got the whole version string
+ debug(3, "WagFileParser::checkWagVersion: Error reading WAG file version from stream");
+ return false;
+ }
+ debug(3, "WagFileParser::checkWagVersion: Read WinAGI version string (\"%s\")", str);
+
+ // Check that the WinAGI version string is one of the two version strings
+ // WinAGI 1.1.21 recognizes as acceptable in the end of a *.wag file.
+ // Note that they are all of length 16 and are padded with spaces to be that long.
+ return scumm_stricmp(str, "WINAGI v1.0 ") == 0 ||
+ scumm_stricmp(str, "1.0 BETA ") == 0;
+ } else { // Stream is too small to contain the WinAGI version string
+ debug(3, "WagFileParser::checkWagVersion: Stream is too small to contain a valid WAG file");
+ return false;
+ }
+}
+
+bool WagFileParser::parse(const char *filename) {
+ Common::File file;
+ WagProperty property; // Temporary property used for reading
+ Common::MemoryReadStream *stream = NULL; // The file is to be read fully into memory and handled using this
+
+ _parsedOk = false; // We haven't parsed the file yet
+
+ if (file.open(filename)) { // Open the file
+ stream = file.readStream(file.size()); // Read the file into memory
+ if (stream != NULL && stream->size() == file.size()) { // Check that the whole file was read into memory
+ if (checkWagVersion(*stream)) { // Check that WinAGI version string is valid
+ // It seems we've got a valid *.wag file so let's parse its properties from the start.
+ stream->seek(0); // Rewind the stream
+ if (!_propList.empty()) _propList.clear(); // Clear out old properties (If any)
+
+ do { // Parse the properties
+ if (property.read(*stream)) { // Read the property and check it was read ok
+ _propList.push_back(property); // Add read property to properties list
+ debug(4, "WagFileParser::parse: Read property with code %d, type %d, number %d, size %d, data \"%s\"",
+ property.getCode(), property.getType(), property.getNumber(), property.getSize(), property.getData());
+ } else // Reading failed, let's bail out
+ break;
+ } while (!endOfProperties(*stream)); // Loop until the end of properties
+
+ // File was parsed successfully only if we got to the end of properties
+ // and all the properties were read successfully (Also the last).
+ _parsedOk = endOfProperties(*stream) && property.readOk();
+
+ if (!_parsedOk) // Error parsing stream
+ warning("Error parsing WAG file (%s). WAG file ignored", filename);
+ } else // Invalid WinAGI version string or it couldn't be read
+ warning("Invalid WAG file (%s) version or error reading it. WAG file ignored", filename);
+ } else // Couldn't fully read file into memory
+ warning("Error reading WAG file (%s) into memory. WAG file ignored", filename);
+ } else // Couldn't open file
+ warning("Couldn't open WAG file (%s). WAG file ignored", filename);
+
+ if (stream != NULL) delete stream; // If file was read into memory, deallocate that buffer
+ return _parsedOk;
+}
+
+const WagProperty *WagFileParser::getProperty(const WagProperty::WagPropertyCode code) const {
+ for (PropertyList::const_iterator iter = _propList.begin(); iter != _propList.end(); iter++)
+ if (iter->getCode() == code) return iter;
+ return NULL;
+}
+
+bool WagFileParser::endOfProperties(const Common::SeekableReadStream &stream) const {
+ return stream.pos() >= (stream.size() - WINAGI_VERSION_LENGTH);
+}
+
+} // End of namespace Agi
diff --git a/engines/agi/wagparser.h b/engines/agi/wagparser.h
new file mode 100644
index 0000000000..1fc554d522
--- /dev/null
+++ b/engines/agi/wagparser.h
@@ -0,0 +1,288 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+namespace Agi {
+
+/**
+ * WagProperty represents a single property from WinAGI's *.wag file.
+ * A property consists of a header and of data.
+ * The header consists of the following:
+ * - Property code (Integer/Enumeration, 1 byte)
+ * - Property type (Integer/Enumeration, 1 byte)
+ * - Property number (Integer, 1 byte)
+ * - Property size (Little endian integer, 2 bytes)
+ * And then there's the data with as many bytes as defined in the header's property size variable.
+ */
+class WagProperty {
+// Constants, enumerations etc
+public:
+ /**
+ * Property codes taken from WinAGI 1.1.21's source code file WinAGI/AGIObjects.bas.
+ */
+ enum WagPropertyCode {
+ PC_GAMEDESC = 129, ///< Game description (WinAGI 1.1.21 limits these to 4096 bytes)
+ PC_GAMEAUTHOR, ///< Game author (WinAGI 1.1.21 limits these to 256 bytes)
+ PC_GAMEID, ///< Game ID
+ PC_INTVERSION, ///< Interpreter version (WinAGI 1.1.21 defaults to version 2.917)
+ PC_GAMELAST, ///< Last edit date
+ PC_GAMEVERSION, ///< Game version (WinAGI 1.1.21 limits these to 256 bytes)
+ PC_GAMEABOUT, ///< About game (WinAGI 1.1.21 limits these to 4096 bytes)
+ PC_GAMEEXEC, ///< Game executable
+ PC_RESDIR, ///< Resource directory name
+ PC_DEFSYNTAX, ///< Default syntax
+ PC_INVOBJDESC = 144,
+ PC_VOCABWORDDESC = 160,
+ PC_PALETTE = 172,
+ PC_USERESNAMES = 180,
+ PC_LOGIC = 192,
+ PC_PICTURE = 208,
+ PC_SOUND = 224,
+ PC_VIEW = 240,
+ PC_UNDEFINED = 0x100 ///< An undefined property code (Added for ScummVM).
+ };
+
+ /**
+ * Property types taken from WinAGI 1.1.21's source code file WinAGI/AGIObjects.bas.
+ * At the moment these aren't really at all needed by ScummVM. Just here if anyone decides to use them.
+ */
+ enum WagPropertyType {
+ PT_ID,
+ PT_DESC,
+ PT_SYNTAX,
+ PT_CRC32,
+ PT_KEY,
+ PT_INST0,
+ PT_INST1,
+ PT_INST2,
+ PT_MUTE0,
+ PT_MUTE1,
+ PT_MUTE2,
+ PT_MUTE3,
+ PT_TPQN,
+ PT_ROOM,
+ PT_VIS0,
+ PT_VIS1,
+ PT_VIS2,
+ PT_VIS3,
+ PT_ALL = 0xff,
+ PT_UNDEFINED = 0x100 ///< An undefined property type (Added for ScummVM).
+ };
+
+// Constructors, destructors, operators etc
+public:
+ /**
+ * Creates an empty WagProperty object.
+ * No property header or property data in it.
+ */
+ WagProperty();
+
+ /**
+ * Destructor. Releases allocated memory if any etc. The usual.
+ */
+ ~WagProperty();
+
+ /**
+ * Copy constructor. Deep copies the variables.
+ */
+ WagProperty(const WagProperty &other);
+
+ /**
+ * Assignment operator. Deep copies the variables.
+ */
+ WagProperty &operator=(const WagProperty &other);
+
+// Non-public helper methods
+protected:
+ /**
+ * Sets the default values for member variables.
+ */
+ void setDefaults();
+
+ /**
+ * Delete's the property's data from memory if we have it, otherwise does nothing.
+ */
+ void deleteData();
+
+ /**
+ * Deep copies the parameter object to this object.
+ * @param other The object to be deep copied to this object.
+ */
+ void deepCopy(const WagProperty &other);
+
+// Public methods that have side-effects
+public:
+ /**
+ * Read in a property (Header and data).
+ * @return True if reading was a success, false otherwise.
+ */
+ bool read(Common::SeekableReadStream &stream);
+
+ /**
+ * Clears the property.
+ * After this the property is empty. No header or data.
+ */
+ void clear();
+
+// Public access functions
+public:
+ /**
+ * Was the property read ok from the source stream?
+ */
+ bool readOk() const { return _readOk; };
+
+ /**
+ * Return the property's code.
+ * @return The property's code if readOk(), PC_UNDEFINED otherwise.
+ */
+ enum WagPropertyCode getCode() const { return _propCode; };
+
+ /**
+ * Return the property's type.
+ * @return The property's type if readOk(), PT_UNDEFINED otherwise.
+ */
+ enum WagPropertyType getType() const { return _propType; };
+
+ /**
+ * Return the property's number.
+ * @return The property's number if readOk(), 0 otherwise.
+ */
+ byte getNumber() const { return _propNum; };
+
+ /**
+ * Return the property's data's length.
+ * @return The property's data's length if readOk(), 0 otherwise.
+ */
+ uint16 getSize() const { return _propSize; }
+
+ /**
+ * Return property's data. Constant access version.
+ * Can be used as a C-style string (i.e. this is guaranteed to have a trailing zero).
+ * @return The property's data if readOk(), NULL otherwise.
+ */
+ const char *getData() const { return _propData; };
+
+// Member variables
+protected:
+ bool _readOk; ///< Was the property read ok from the source stream?
+ enum WagPropertyCode _propCode; ///< Property code (Part of the property's header)
+ enum WagPropertyType _propType; ///< Property type (Part of the property's header)
+ byte _propNum; ///< Property number (Part of the property's header)
+ uint16 _propSize; ///< Property's size (Part of the property's header)
+ char *_propData; ///< The property's data (Plus a trailing zero for C-style string access)
+};
+
+
+/**
+ * Class for parsing *.wag files created by WinAGI.
+ * Using this class you can get information about fanmade AGI games if they have provided a *.wag file with them.
+ */
+class WagFileParser {
+// Constants, type definitions, enumerations etc.
+public:
+ static const uint WINAGI_VERSION_LENGTH = 16; ///< WinAGI's version string's length (Always 16)
+ typedef Common::Array<WagProperty> PropertyList; ///< A type definition for an array of *.wag file properties
+
+public:
+ /**
+ * Constructor. Creates a WagFileParser object in a default state.
+ */
+ WagFileParser();
+
+ /**
+ * Destructor.
+ */
+ ~WagFileParser();
+
+ /**
+ * Loads a *.wag file and parses it.
+ * @note After this you can access the loaded properties using getProperty() and getProperties() etc.
+ * @param filename Name of the file to be parsed.
+ * @return True if parsed successfully, false otherwise.
+ */
+ bool parse(const char *filename);
+
+ /**
+ * Get list of the loaded properties.
+ * @note Use only after a call to parse() first.
+ * @return The list of loaded properties.
+ */
+ const PropertyList &getProperties() const { return _propList; };
+
+ /**
+ * Get property with the given property code.
+ * @note Use only after a call to parse() first.
+ * @return Pointer to the property if its found in memory, NULL otherwise.
+ *
+ * TODO/FIXME: Handle cases where several properties with the given property code are found.
+ * At the moment we don't need this functionality because the properties we use
+ * for fallback detection probably don't have multiples in the WAG-file.
+ * TODO: Make this faster than linear time if desired/needed.
+ */
+ const WagProperty *getProperty(const WagProperty::WagPropertyCode code) const;
+
+ /**
+ * Tests if the given property contains a valid AGI interpreter version string.
+ * A valid AGI interpreter version string is of the form "X.Y" or "X,Y" where
+ * X is a single decimal digit and Y is a string of decimal digits (At least one digit).
+ * @param version The property to be tested.
+ * @return True if the given property contains a valid AGI interpreter version string, false otherwise.
+ */
+ bool checkAgiVersionProperty(const WagProperty &version) const;
+
+ /**
+ * Convert property's data to an AGI interpreter version number.
+ * @param version The property to be converted (Property code should be PC_INTVERSION).
+ * @return AGI interpreter version number if successful, 0 otherwise.
+ */
+ uint16 convertToAgiVersionNumber(const WagProperty &version);
+
+ /**
+ * Was the file parsed successfully?
+ * @return True if file was parsed successfully, false otherwise.
+ */
+ bool parsedOk() const { return _parsedOk; };
+
+protected:
+ /**
+ * Checks if stream has a valid WinAGI version string in its end.
+ * @param stream The stream to be checked.
+ * @return True if reading was successful and stream contains a valid WinAGI version string, false otherwise.
+ */
+ bool checkWagVersion(Common::SeekableReadStream &stream);
+
+ /**
+ * Checks if we're at or past the end of the properties stored in the stream.
+ * @param stream The stream whose seeking position is to be checked.
+ * @return True if stream's seeking position is at or past the end of the properties, false otherwise.
+ */
+ bool endOfProperties(const Common::SeekableReadStream &stream) const;
+
+// Member variables
+protected:
+ PropertyList _propList; ///< List of loaded properties from the file.
+ bool _parsedOk; ///< Did the parsing of the file go ok?
+};
+
+} // End of namespace Agi
diff --git a/engines/lure/fights.cpp b/engines/lure/fights.cpp
new file mode 100644
index 0000000000..4c478bbc17
--- /dev/null
+++ b/engines/lure/fights.cpp
@@ -0,0 +1,583 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2005-2006 The ScummVM project
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#include "lure/fights.h"
+#include "lure/luredefs.h"
+#include "lure/game.h"
+#include "lure/res.h"
+#include "lure/room.h"
+#include "lure/sound.h"
+
+namespace Lure {
+
+// Three records containing initial states for player, pig, and Skorl
+FighterRecord fighterList[3] = {
+ {0x23C, 0x440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0},
+ {0, 0x441, 0x1092, 0, 3, 0, 0, 0, 0xB94, 8, 0xA34, 0x8D4, 0xD06, 0,
+ 0, 0, 0, 0, 0xDDC, PLAYER_ID},
+ {0, 0x446, 0x1092, 0, 3, 0, 0, 0, 0xB94, 8, 0xA34, 0x8D4, 0xD06, 0,
+ 0, 0, 0, 0, 0xDDC, PLAYER_ID}
+};
+
+FightsManager *int_fights = NULL;
+
+FightsManager::FightsManager() {
+ int_fights = this;
+ _fightData = NULL;
+ _mouseFlags = 0;
+}
+
+FightsManager::~FightsManager() {
+ if (_fightData != NULL)
+ // Release the fight data
+ delete _fightData;
+}
+
+FightsManager &FightsManager::getReference() {
+ return *int_fights;
+}
+
+FighterRecord &FightsManager::getDetails(uint16 hotspotId) {
+ if (hotspotId == PLAYER_ID) return fighterList[0];
+ else if (hotspotId == PIG_ID) return fighterList[1];
+ else if (hotspotId == SKORL_FIGHTER_ID) return fighterList[2];
+ error("Unknown NPC %d attempted to fight", hotspotId);
+}
+
+// Sets up the data for the pig fight in the cave
+
+void FightsManager::setupPigFight() {
+ Resources &res = Resources::getReference();
+ Hotspot *player = res.getActiveHotspot(PLAYER_ID);
+ player->setSkipFlag(false);
+ player->resource()->colourOffset = 16;
+ player->setTickProc(PLAYER_FIGHT_TICK_PROC_ID);
+ player->setSize(48, 53);
+ player->setAnimation(PLAYER_FIGHT_ANIM_ID);
+ player->resource()->width = 48;
+ player->resource()->height = 53;
+
+ player->setOccupied(false);
+ player->setPosition(262, 94);
+ FighterRecord &rec = getDetails(PLAYER_ID);
+ rec.fwhits = 0;
+ rec.fwtrue_x = 262;
+ rec.fwtrue_y = 53;
+ rec.fwseq_ad = FIGHT_PLAYER_INIT;
+ rec.fwenemy_ad = PIG_ID;
+}
+
+void FightsManager::setupSkorlFight() {
+ Resources &res = Resources::getReference();
+ Hotspot *player = res.getActiveHotspot(PLAYER_ID);
+ FighterRecord &rec = getDetails(PLAYER_ID);
+
+ setupPigFight();
+
+ rec.fwenemy_ad = SKORL_FIGHTER_ID;
+ rec.fwweapon = 0x445;
+ rec.fwtrue_x = 282;
+ rec.fwtrue_y = 136;
+ player->setPosition(282, 136);
+ player->resource()->colourOffset = 96;
+}
+
+bool FightsManager::isFighting() {
+ FighterRecord &rec = getDetails(PLAYER_ID);
+ return rec.fwhits == 0;
+}
+
+void FightsManager::fightLoop() {
+ Resources &res = Resources::getReference();
+ Events &events = Events::getReference();
+ FighterRecord &playerFight = getDetails(PLAYER_ID);
+
+ // Loop for the duration of the battle
+ while (!events.quitFlag && (playerFight.fwhits != GENERAL_MAGIC_ID)) {
+ checkEvents();
+
+ Game::getReference().tick();
+ Room::getReference().update();
+ res.delayList().tick();
+ Screen::getReference().update();
+
+ g_system->delayMillis(20);
+ }
+}
+
+void FightsManager::saveToStream(Common::WriteStream *stream) {
+ for (int fighterCtr = 0; fighterCtr < 3; ++fighterCtr) {
+ FighterRecord &rec = fighterList[fighterCtr];
+
+ stream->writeUint16LE(rec.fwseq_no);
+ stream->writeUint16LE(rec.fwseq_ad);
+ stream->writeUint16LE(rec.fwdist);
+ stream->writeUint16LE(rec.fwwalk_roll);
+ stream->writeUint16LE(rec.fwmove_number);
+ stream->writeUint16LE(rec.fwhits);
+ }
+}
+
+void FightsManager::loadFromStream(Common::ReadStream *stream) {
+ for (int fighterCtr = 0; fighterCtr < 3; ++fighterCtr) {
+ FighterRecord &rec = fighterList[fighterCtr];
+
+ rec.fwseq_no = stream->readUint16LE();
+ rec.fwseq_ad = stream->readUint16LE();
+ rec.fwdist = stream->readUint16LE();
+ rec.fwwalk_roll = stream->readUint16LE();
+ rec.fwmove_number = stream->readUint16LE();
+ rec.fwhits = stream->readUint16LE();
+ }
+}
+
+const CursorType moveList[] = {CURSOR_LEFT_ARROW, CURSOR_FIGHT_UPPER,
+ CURSOR_FIGHT_MIDDLE, CURSOR_FIGHT_LOWER, CURSOR_RIGHT_ARROW};
+
+struct KeyMapping {
+ Common::KeyCode keycode;
+ uint8 moveNumber;
+};
+
+const KeyMapping keyList[] = {
+ {Common::KEYCODE_LEFT, 10}, {Common::KEYCODE_RIGHT, 14}, {Common::KEYCODE_7, 11}, {Common::KEYCODE_4, 12},
+ {Common::KEYCODE_1, 13}, {Common::KEYCODE_9, 6}, {Common::KEYCODE_6, 7}, {Common::KEYCODE_3, 8}, {Common::KEYCODE_INVALID, 0}};
+
+void FightsManager::checkEvents() {
+ Events &events = Events::getReference();
+ if (!events.pollEvent()) return;
+ FighterRecord &rec = getDetails(PLAYER_ID);
+ Hotspot *player = Resources::getReference().getActiveHotspot(PLAYER_ID);
+ Mouse &mouse = Mouse::getReference();
+
+ int moveNumber = 0;
+
+ if (events.type() == Common::EVENT_KEYDOWN) {
+ switch (events.event().kbd.keycode) {
+ case Common::KEYCODE_ESCAPE:
+ events.quitFlag = true;
+ break;
+
+ default:
+ // Scan through the mapping list for a move for the keypress
+ const KeyMapping *keyPtr = &keyList[0];
+ while ((keyPtr->keycode != Common::KEYCODE_INVALID) &&
+ (keyPtr->keycode != events.event().kbd.keycode))
+ ++keyPtr;
+ if (keyPtr->keycode != Common::KEYCODE_INVALID)
+ moveNumber = keyPtr->moveNumber;
+ }
+ }
+
+ if (events.type() == Common::EVENT_MOUSEMOVE) {
+ Point mPos = events.event().mouse;
+ if (mPos.x < rec.fwtrue_x - 12)
+ mouse.setCursorNum(CURSOR_LEFT_ARROW);
+ else if (mPos.x > rec.fwtrue_x + player->width())
+ mouse.setCursorNum(CURSOR_RIGHT_ARROW);
+ else if (mPos.y < player->y() + 4)
+ mouse.setCursorNum(CURSOR_FIGHT_UPPER);
+ else if (mPos.y < player->y() + 38)
+ mouse.setCursorNum(CURSOR_FIGHT_MIDDLE);
+ else
+ mouse.setCursorNum(CURSOR_FIGHT_LOWER);
+ }
+
+ if ((events.type() == Common::EVENT_LBUTTONDOWN) ||
+ (events.type() == Common::EVENT_RBUTTONDOWN) ||
+ (events.type() == Common::EVENT_LBUTTONUP) ||
+ (events.type() == Common::EVENT_RBUTTONUP)) {
+ _mouseFlags = 0;
+ if (events.type() == Common::EVENT_LBUTTONDOWN) ++_mouseFlags;
+ if (events.type() == Common::EVENT_RBUTTONDOWN) _mouseFlags += 2;
+ }
+
+ // Get the correct base index for the move
+ while ((moveNumber < 5) && (moveList[moveNumber] != mouse.getCursorNum()))
+ ++moveNumber;
+ if (moveNumber < 5) {
+ if (_mouseFlags == 1)
+ // Left mouse
+ moveNumber += 10;
+ else if (_mouseFlags == 2)
+ // Right mouse
+ moveNumber += 5;
+ }
+
+ rec.fwmove_number = moveNumber;
+
+ if (rec.fwmove_number >= 5)
+ debugC(ERROR_INTERMEDIATE, kLureDebugFights,
+ "Player fight move number=%d", rec.fwmove_number);
+}
+
+void FightsManager::fighterAnimHandler(Hotspot &h) {
+ FighterRecord &fighter = getDetails(h.hotspotId());
+ FighterRecord &opponent = getDetails(fighter.fwenemy_ad);
+ FighterRecord &player = getDetails(PLAYER_ID);
+
+ fetchFighterDistance(fighter, opponent);
+
+ if (fighter.fwseq_ad) {
+ fightHandler(h, fighter.fwseq_ad);
+ return;
+ }
+
+ uint16 seqNum = 0;
+ if (fighter.fwdist != FIGHT_DISTANCE) {
+ seqNum = getFighterMove(fighter, fighter.fwnot_near);
+ } else {
+ uint16 offset = (fighter.fwhits * fighter.fwdef_len) + fighter.fwdefend_adds + 4;
+
+ // Scan for the given sequence
+ uint16 v = getWord(offset);
+ while ((v != 0) && (v != player.fwseq_no)) {
+ offset += 4;
+ v = getWord(offset);
+ }
+
+ if (v == 0) {
+ // No sequence match found
+ seqNum = getFighterMove(fighter, fighter.fwattack_table);
+ } else {
+ v = getWord(offset + 2);
+ seqNum = getFighterMove(fighter, fighter.fwdefend_table);
+
+ if (seqNum == 0)
+ seqNum = getFighterMove(fighter, fighter.fwattack_table);
+ else if (seqNum == 0xff)
+ seqNum = v;
+ }
+ }
+
+ // Set the sequence and pass onto the fight handler
+ fighter.fwseq_no = seqNum;
+ fighter.fwseq_ad = getWord(FIGHT_TBL_1 + (seqNum << 1));
+}
+
+void FightsManager::playerAnimHandler(Hotspot &h) {
+ FighterRecord &fighter = getDetails(h.hotspotId());
+ fightHandler(h, fighter.fwseq_ad);
+}
+
+void FightsManager::fightHandler(Hotspot &h, uint16 moveOffset) {
+ Resources &res = Resources::getReference();
+ FighterRecord &fighter = getDetails(h.hotspotId());
+ FighterRecord &opponent = getDetails(fighter.fwenemy_ad);
+
+ uint16 v1, v2;
+ bool breakFlag = false;
+
+ while (!breakFlag) {
+ if (moveOffset == 0) {
+ // Player is doing nothing, so check the move number
+ moveOffset = getWord(FIGHT_PLAYER_MOVE_TABLE + (fighter.fwmove_number << 1));
+
+ debugC(ERROR_DETAILED, kLureDebugFights,
+ "Hotspot %xh fight move=%d, new offset=%xh",
+ h.hotspotId(), fighter.fwmove_number, moveOffset);
+
+ if (moveOffset == 0)
+ return;
+
+ fighter.fwseq_no = fighter.fwmove_number;
+ fighter.fwseq_ad = moveOffset;
+ }
+
+ uint16 moveValue = getWord(moveOffset);
+ debugC(ERROR_DETAILED, kLureDebugFights,
+ "Hotspot %xh script offset=%xh value=%xh",
+ h.hotspotId(), moveOffset, moveValue);
+ moveOffset += sizeof(uint16);
+
+ if ((moveValue & 0x8000) == 0) {
+ // Set frame to specified number
+ h.setFrameNumber(moveValue);
+
+ // Set the new fighter position
+ int16 newX, newY;
+ newX = h.x() + (int16)getWord(moveOffset);
+ if (newX < 32) newX = 32;
+ if (newX > 240) newX = 240;
+ newY = h.y() + (int16)getWord(moveOffset + 2);
+ h.setPosition(newX, newY);
+
+ if (fighter.fwweapon != 0) {
+ Hotspot *weaponHotspot = res.getActiveHotspot(fighter.fwweapon);
+ assert(weaponHotspot);
+ weaponHotspot->setFrameNumber(getWord(moveOffset + 4));
+ weaponHotspot->setPosition(weaponHotspot->x() +
+ (int16)getWord(moveOffset + 6),
+ weaponHotspot->y() + getWord(moveOffset + 8));
+ }
+
+ moveOffset += 5 * sizeof(uint16);
+ fighter.fwseq_ad = moveOffset;
+ return;
+ }
+
+ switch (moveValue)
+ {
+ case 0xFFFA:
+ // Walk left
+ if ((fighter.fwmove_number == 5) || (fighter.fwmove_number == 10)) {
+ if (h.x() < 32) {
+ breakFlag = true;
+ } else {
+ h.setPosition(h.x() - 4, h.y());
+ fighter.fwtrue_x = h.x();
+ if (fetchFighterDistance(fighter, opponent) < FIGHT_DISTANCE) {
+ h.setPosition(h.x() + 4, h.y());
+ fighter.fwtrue_x += 4;
+ breakFlag = true;
+ } else {
+ removeWeapon(fighter.fwweapon);
+ fighter.fwtrue_x = h.x();
+ fighter.fwtrue_y = h.y();
+
+ uint16 frameNum = (fighter.fwwalk_roll == 7) ? 0 :
+ fighter.fwwalk_roll + 1;
+ fighter.fwwalk_roll = frameNum;
+ fighter.fwseq_ad = moveOffset;
+ h.setFrameNumber(frameNum);
+ return;
+ }
+ }
+ } else {
+ // Signal to start a new action
+ moveOffset = 0;
+ }
+ break;
+
+ case 0xFFF9:
+ // Walk right
+ if ((fighter.fwmove_number == 9) || (fighter.fwmove_number == 14)) {
+ if (h.x() >= 240) {
+ breakFlag = true;
+ } else {
+ removeWeapon(fighter.fwweapon);
+ h.setPosition(h.x() + 4, h.y());
+ fighter.fwtrue_x = h.x();
+ fighter.fwtrue_y = h.y();
+
+ fighter.fwwalk_roll = (fighter.fwwalk_roll == 0) ? 7 :
+ fighter.fwwalk_roll - 1;
+ fighter.fwseq_ad = moveOffset;
+ h.setFrameNumber(fighter.fwwalk_roll);
+ return;
+ }
+
+ } else {
+ // Signal to start a new action
+ moveOffset = 0;
+ }
+ break;
+
+ case 0xFFEB:
+ // Enemy right
+ removeWeapon(fighter.fwweapon);
+ h.setPosition(h.x() + 4, h.y());
+ fighter.fwtrue_x = h.x();
+
+ if (fetchFighterDistance(fighter, opponent) < FIGHT_DISTANCE) {
+ h.setPosition(h.x() - 4, h.y());
+ fighter.fwtrue_x -= 4;
+ fighter.fwseq_ad = 0;
+ h.setFrameNumber(8);
+ } else {
+ h.setFrameNumber(getWord(moveOffset));
+ moveOffset += sizeof(uint16);
+ fighter.fwseq_ad = moveOffset;
+ }
+ return;
+
+ case 0xFFFB:
+ // End of sequence
+ breakFlag = true;
+ break;
+
+ case 0xFFF8:
+ // Set fight address
+ moveOffset = getWord(moveOffset);
+ break;
+
+ case 0xFFFF:
+ case 0xFFFE:
+ if (moveValue == 0xffff)
+ // Set the animation record
+ h.setAnimation(getWord(moveOffset));
+ else
+ // New set animation record
+ h.setAnimation(getWord(fighter.fwheader_list + (getWord(moveOffset) << 1)));
+ h.setFrameNumber(0);
+ moveOffset += sizeof(uint16);
+ break;
+
+ case 0xFFF7:
+ // On hold
+ if (getWord(moveOffset) == fighter.fwmove_number)
+ moveOffset = getWord(moveOffset + 2);
+ else
+ moveOffset += 2 * sizeof(uint16);
+ break;
+
+ case 0xFFF6:
+ // Not hold
+ if (getWord(moveOffset) == fighter.fwmove_number)
+ moveOffset += 2 * sizeof(uint16);
+ else
+ moveOffset = getWord(moveOffset + 2);
+ break;
+
+ case 0xFFF4:
+ // End sequence
+ fighter.fwseq_no = 0;
+ break;
+
+ case 0xFFF2:
+ // Set defend
+ fighter.fwblocking = getWord(moveOffset);
+ moveOffset += sizeof(uint16);
+ break;
+
+ case 0xFFF1:
+ // If blocking
+ v1 = getWord(moveOffset);
+ v2 = getWord(moveOffset + 2);
+ moveOffset += 2 * sizeof(uint16);
+
+ if (v1 == opponent.fwblocking) {
+ Sound.playSound(42);
+ moveOffset = v2;
+ }
+ break;
+
+ case 0xFFF0:
+ // Check hit
+ v1 = getWord(moveOffset);
+ moveOffset += sizeof(uint16);
+ if (fighter.fwdist <= FIGHT_DISTANCE) {
+ if (h.hotspotId() == PLAYER_ID) {
+ // Player hits opponent
+ Sound.playSound(52);
+
+ if (opponent.fwhits != 5) {
+ opponent.fwseq_ad = v1;
+ if (++opponent.fwhit_value != opponent.fwhit_rate) {
+ opponent.fwhit_value = 0;
+ if (++opponent.fwhits == 5)
+ opponent.fwseq_ad = opponent.fwdie_seq;
+ }
+ }
+ } else {
+ // Opponent hit player
+ Sound.playSound(37);
+ opponent.fwseq_ad = v1;
+ if (++opponent.fwhits == 10) {
+ // Player has been killed
+ fighter.fwhits = 10;
+ opponent.fwseq_ad = FIGHT_PLAYER_DIES;
+ Sound.playSound(36);
+ }
+ }
+ }
+ break;
+
+ case 0xFFEF:
+ // Save co-ordinates
+ fighter.fwtrue_x = h.x();
+ fighter.fwtrue_y = h.y();
+ break;
+
+ case 0xFFEE:
+ // Restore co-ordinates
+ h.setPosition(fighter.fwtrue_x, fighter.fwtrue_y);
+ break;
+
+ case 0xFFED:
+ // End of game
+ getDetails(PLAYER_ID).fwhits = GENERAL_MAGIC_ID;
+ Game::getReference().setState(GS_RESTORE_RESTART);
+ return;
+
+ case 0xFFEC:
+ // Enemy has been killed
+ enemyKilled();
+ break;
+
+ case 0xFFEA:
+ // Fight sound
+ Sound.playSound(getWord(moveOffset));
+ moveOffset += sizeof(uint16);
+ break;
+
+ default:
+ error("Unknown fight command %xh", moveValue);
+ }
+ }
+
+ fighter.fwseq_no = 0;
+ fighter.fwseq_ad = 0;
+ if (h.hotspotId() == PLAYER_ID)
+ _mouseFlags = 0;
+}
+
+uint16 FightsManager::fetchFighterDistance(FighterRecord &f1, FighterRecord &f2) {
+ f1.fwdist = ABS(f1.fwtrue_x - f2.fwtrue_x) & 0xFFF8;
+ return f1.fwdist;
+}
+
+void FightsManager::enemyKilled() {
+ Resources &res = Resources::getReference();
+ Hotspot *playerHotspot = res.getActiveHotspot(PLAYER_ID);
+ FighterRecord &playerRec = getDetails(PLAYER_ID);
+
+ playerHotspot->setTickProc(PLAYER_TICK_PROC_ID);
+ playerRec.fwhits = GENERAL_MAGIC_ID;
+ playerHotspot->resource()->colourOffset = 128;
+ playerHotspot->setSize(32, 48);
+ playerHotspot->resource()->width = 32;
+ playerHotspot->resource()->height = 48;
+ playerHotspot->setAnimation(PLAYER_ANIM_ID);
+ playerHotspot->setPosition(playerHotspot->x(), playerHotspot->y() + 5);
+ playerHotspot->setDirection(LEFT);
+
+ if (playerHotspot->roomNumber() == 6) {
+ Dialog::show(0xc9f);
+ HotspotData *axeHotspot = res.getHotspot(0x2738);
+ axeHotspot->roomNumber = PLAYER_ID;
+ axeHotspot->flags |= HOTSPOTFLAG_FOUND;
+ }
+}
+
+// Makes sure the given weapon is off-screen
+void FightsManager::removeWeapon(uint16 weaponId) {
+ Hotspot *weaponHotspot = Resources::getReference().getActiveHotspot(weaponId);
+ weaponHotspot->setPosition(-32, -32);
+}
+
+uint16 FightsManager::getFighterMove(FighterRecord &rec, uint16 baseOffset) {
+ int actionIndex = _rnd.getRandomNumber(31);
+ return getByte(baseOffset + (rec.fwhits << 5) + actionIndex);
+}
+
+} // end of namespace Lure
diff --git a/engines/lure/fights.h b/engines/lure/fights.h
new file mode 100644
index 0000000000..048949f2b6
--- /dev/null
+++ b/engines/lure/fights.h
@@ -0,0 +1,111 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2005-2006 The ScummVM project
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#ifndef LURE_FIGHT_H
+#define LURE_FIGHT_H
+
+#include "lure/luredefs.h"
+#include "lure/hotspots.h"
+#include "lure/palette.h"
+#include "common/singleton.h"
+#include "common/endian.h"
+
+namespace Lure {
+
+struct FighterRecord {
+ uint16 fwheader_list;
+ uint16 fwweapon;
+ uint16 fwdie_seq;
+ uint16 fwhit_value;
+ uint16 fwhit_rate;
+ int16 fwtrue_x;
+ int16 fwtrue_y;
+ uint16 fwblocking;
+ uint16 fwattack_table;
+ uint16 fwdef_len;
+ uint16 fwdefend_table;
+ uint16 fwnot_near;
+ uint16 fwdefend_adds;
+ uint16 fwseq_no;
+ uint16 fwdist;
+ uint16 fwwalk_roll;
+ uint16 fwmove_number;
+ uint16 fwhits;
+ uint16 fwseq_ad;
+ uint16 fwenemy_ad;
+};
+
+// Constant references into the fight data
+#define FIGHT_TBL_1 0x8b8
+#define FIGHT_PLAYER_MOVE_TABLE 0xDAA
+#define FIGHT_PLAYER_INIT 0xDC8
+#define FIGHT_PLAYER_DIES 0xF46
+
+#define FIGHT_DISTANCE 32
+
+class FightsManager {
+private:
+ MemoryBlock *_fightData;
+ Common::RandomSource _rnd;
+ uint8 _mouseFlags;
+
+ FighterRecord &getDetails(uint16 hotspotId);
+ uint16 fetchFighterDistance(FighterRecord &f1, FighterRecord &f2);
+ void removeWeapon(uint16 weaponId);
+ void enemyKilled();
+ uint16 getFighterMove(FighterRecord &rec, uint16 baseOffset);
+ void checkEvents();
+ void fightHandler(Hotspot &h, uint16 moveOffset);
+
+ inline uint16 getWord(uint16 offset) {
+ if (!_fightData)
+ _fightData = Disk::getReference().getEntry(FIGHT_DATA_RESOURCE_ID);
+ if (offset >= _fightData->size() - 1) error("Invalid fight data index");
+ return READ_LE_UINT16(_fightData->data() + offset);
+ }
+ inline uint8 getByte(uint16 offset) {
+ if (!_fightData)
+ _fightData = Disk::getReference().getEntry(FIGHT_DATA_RESOURCE_ID);
+ if (offset >= _fightData->size()) error("Invalid fight data index");
+ return _fightData->data()[offset];
+ }
+public:
+ FightsManager();
+ ~FightsManager();
+ static FightsManager &getReference();
+
+ void setupPigFight();
+ void setupSkorlFight();
+ bool isFighting();
+ void fightLoop();
+ void saveToStream(Common::WriteStream *stream);
+ void loadFromStream(Common::ReadStream *stream);
+
+ void fighterAnimHandler(Hotspot &h);
+ void playerAnimHandler(Hotspot &h);
+};
+
+#define Fights FightsManager::getReference()
+
+} // End of namespace Lure
+
+#endif
diff --git a/engines/lure/sound.cpp b/engines/lure/sound.cpp
new file mode 100644
index 0000000000..6961e4c7cc
--- /dev/null
+++ b/engines/lure/sound.cpp
@@ -0,0 +1,37 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2005-2006 The ScummVM project
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#include "lure/sound.h"
+
+DECLARE_SINGLETON(Lure::SoundManager);
+
+namespace Lure {
+
+void SoundManager::killSounds() {
+
+}
+
+void SoundManager::playSound(uint16 soundId) {
+
+}
+
+} // end of namespace Lure
diff --git a/engines/lure/sound.h b/engines/lure/sound.h
new file mode 100644
index 0000000000..4a7422d77f
--- /dev/null
+++ b/engines/lure/sound.h
@@ -0,0 +1,41 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2005-2006 The ScummVM project
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#ifndef LURE_SOUND_H
+#define LURE_SOUND_H
+
+#include "lure/luredefs.h"
+#include "common/singleton.h"
+
+namespace Lure {
+
+class SoundManager: public Common::Singleton<SoundManager> {
+public:
+ static void killSounds();
+ static void playSound(uint16 soundId);
+};
+
+} // End of namespace Lure
+
+#define Sound (::Lure::SoundManager::instance())
+
+#endif
diff --git a/sound/rate_arm.cpp b/sound/rate_arm.cpp
new file mode 100644
index 0000000000..694e213dce
--- /dev/null
+++ b/sound/rate_arm.cpp
@@ -0,0 +1,431 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+/*
+ * The code in this file, together with the rate_arm_asm.s file offers
+ * an ARM optimised version of the code in rate.cpp. The operation of this
+ * code should be identical to that of rate.cpp, but faster. The heavy
+ * lifting is done in the assembler file.
+ *
+ * To be as portable as possible we implement the core routines with C
+ * linkage in assembly, and implement the C++ routines that call into
+ * the C here. The C++ symbol mangling varies wildly between compilers,
+ * so this is the simplest way to ensure that the C/C++ combination should
+ * work on as many ARM based platforms as possible.
+ *
+ * Essentially the algorithm herein is the same as that in rate.cpp, so
+ * anyone seeking to understand this should attempt to understand that
+ * first. That code was based in turn on code with Copyright 1998 Fabrice
+ * Bellard - part of SoX (http://sox.sourceforge.net).
+ * Max Horn adapted that code to the needs of ScummVM and partially rewrote
+ * it, in the process removing any use of floating point arithmetic. Various
+ * other improvments over the original code were made.
+ */
+
+#include "common/stdafx.h"
+#include "sound/audiostream.h"
+#include "sound/rate.h"
+#include "sound/mixer.h"
+#include "common/util.h"
+
+namespace Audio {
+
+/**
+ * The precision of the fractional computations used by the rate converter.
+ * Normally you should never have to modify this value.
+ */
+#define FRAC_BITS 16
+
+/**
+ * The size of the intermediate input cache. Bigger values may increase
+ * performance, but only until some point (depends largely on cache size,
+ * target processor and various other factors), at which it will decrease
+ * again.
+ */
+#define INTERMEDIATE_BUFFER_SIZE 512
+
+
+/**
+ * Audio rate converter based on simple resampling. Used when no
+ * interpolation is required.
+ *
+ * Limited to sampling frequency <= 65535 Hz.
+ */
+typedef struct {
+ const st_sample_t *inPtr;
+ int inLen;
+
+ /** position of how far output is ahead of input */
+ /** Holds what would have been opos-ipos */
+ long opos;
+
+ /** fractional position increment in the output stream */
+ long opos_inc;
+
+ st_sample_t inBuf[INTERMEDIATE_BUFFER_SIZE];
+} SimpleRateDetails;
+
+template<bool stereo, bool reverseStereo>
+class SimpleRateConverter : public RateConverter {
+protected:
+ SimpleRateDetails sr;
+public:
+ SimpleRateConverter(st_rate_t inrate, st_rate_t outrate);
+ int flow(AudioStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol_l, st_volume_t vol_r);
+ int drain(st_sample_t *obuf, st_size_t osamp, st_volume_t vol) {
+ return (ST_SUCCESS);
+ }
+};
+
+
+/*
+ * Prepare processing.
+ */
+template<bool stereo, bool reverseStereo>
+SimpleRateConverter<stereo, reverseStereo>::SimpleRateConverter(st_rate_t inrate, st_rate_t outrate) {
+ if (inrate == outrate) {
+ error("Input and Output rates must be different to use rate effect");
+ }
+
+ if ((inrate % outrate) != 0) {
+ error("Input rate must be a multiple of Output rate to use rate effect");
+ }
+
+ if (inrate >= 65536 || outrate >= 65536) {
+ error("rate effect can only handle rates < 65536");
+ }
+
+ sr.opos = 1;
+
+ /* increment */
+ sr.opos_inc = inrate / outrate;
+
+ sr.inLen = 0;
+}
+
+extern "C" void ARM_SimpleRate_M(AudioStream &input,
+ int (*fn)(Audio::AudioStream&,int16*,int),
+ SimpleRateDetails *sr,
+ st_sample_t *obuf,
+ st_size_t osamp,
+ st_volume_t vol_l,
+ st_volume_t vol_r);
+
+extern "C" void ARM_SimpleRate_S(AudioStream &input,
+ int (*fn)(Audio::AudioStream&,int16*,int),
+ SimpleRateDetails *sr,
+ st_sample_t *obuf,
+ st_size_t osamp,
+ st_volume_t vol_l,
+ st_volume_t vol_r);
+
+extern "C" void ARM_SimpleRate_R(AudioStream &input,
+ int (*fn)(Audio::AudioStream&,int16*,int),
+ SimpleRateDetails *sr,
+ st_sample_t *obuf,
+ st_size_t osamp,
+ st_volume_t vol_l,
+ st_volume_t vol_r);
+
+extern "C" int SimpleRate_readFudge(Audio::AudioStream &input,
+ int16 *a, int b)
+{
+ return input.readBuffer(a, b);
+}
+
+template<bool stereo, bool reverseStereo>
+int SimpleRateConverter<stereo, reverseStereo>::flow(AudioStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol_l, st_volume_t vol_r) {
+
+#ifdef DEBUG_RATECONV
+fprintf(stderr, "Simple st=%d rev=%d\n", stereo, reverseStereo);
+fflush(stderr);
+#endif
+ if (!stereo) {
+ ARM_SimpleRate_M(input,
+ &SimpleRate_readFudge,
+ &sr,
+ obuf, osamp, vol_l, vol_r);
+ } else if (reverseStereo) {
+ ARM_SimpleRate_R(input,
+ &SimpleRate_readFudge,
+ &sr,
+ obuf, osamp, vol_l, vol_r);
+ } else {
+ ARM_SimpleRate_S(input,
+ &SimpleRate_readFudge,
+ &sr,
+ obuf, osamp, vol_l, vol_r);
+ }
+ return (ST_SUCCESS);
+}
+
+/**
+ * Audio rate converter based on simple linear Interpolation.
+ *
+ * The use of fractional increment allows us to use no buffer. It
+ * avoid the problems at the end of the buffer we had with the old
+ * method which stored a possibly big buffer of size
+ * lcm(in_rate,out_rate).
+ *
+ * Limited to sampling frequency <= 65535 Hz.
+ */
+
+typedef struct {
+ const st_sample_t *inPtr;
+ int inLen;
+
+ /** position of how far output is ahead of input */
+ /** Holds what would have been opos-ipos */
+ long opos;
+
+ /** integer position increment in the output stream */
+ long opos_inc;
+
+ /** current sample(s) in the input stream (left/right channel) */
+ st_sample_t icur[2];
+ /** last sample(s) in the input stream (left/right channel) */
+ st_sample_t ilast[2];
+
+ /** fractional position in the output stream */
+ long opos_frac;
+
+ /** fractional position increment in the output stream */
+ long opos_inc_frac;
+
+ st_sample_t inBuf[INTERMEDIATE_BUFFER_SIZE];
+} LinearRateDetails;
+
+extern "C" void ARM_LinearRate_M(AudioStream &input,
+ int (*fn)(Audio::AudioStream&,int16*,int),
+ LinearRateDetails *lr,
+ st_sample_t *obuf,
+ st_size_t osamp,
+ st_volume_t vol_l,
+ st_volume_t vol_r);
+
+extern "C" void ARM_LinearRate_S(AudioStream &input,
+ int (*fn)(Audio::AudioStream&,int16*,int),
+ LinearRateDetails *lr,
+ st_sample_t *obuf,
+ st_size_t osamp,
+ st_volume_t vol_l,
+ st_volume_t vol_r);
+
+extern "C" void ARM_LinearRate_R(AudioStream &input,
+ int (*fn)(Audio::AudioStream&,int16*,int),
+ LinearRateDetails *lr,
+ st_sample_t *obuf,
+ st_size_t osamp,
+ st_volume_t vol_l,
+ st_volume_t vol_r);
+
+template<bool stereo, bool reverseStereo>
+class LinearRateConverter : public RateConverter {
+protected:
+ LinearRateDetails lr;
+
+public:
+ LinearRateConverter(st_rate_t inrate, st_rate_t outrate);
+ int flow(AudioStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol_l, st_volume_t vol_r);
+ int drain(st_sample_t *obuf, st_size_t osamp, st_volume_t vol) {
+ return (ST_SUCCESS);
+ }
+};
+
+
+/*
+ * Prepare processing.
+ */
+template<bool stereo, bool reverseStereo>
+LinearRateConverter<stereo, reverseStereo>::LinearRateConverter(st_rate_t inrate, st_rate_t outrate) {
+ unsigned long incr;
+
+ if (inrate == outrate) {
+ error("Input and Output rates must be different to use rate effect");
+ }
+
+ if (inrate >= 65536 || outrate >= 65536) {
+ error("rate effect can only handle rates < 65536");
+ }
+
+ lr.opos_frac = 0;
+ lr.opos = 1;
+
+ /* increment */
+ incr = (inrate << FRAC_BITS) / outrate;
+
+ lr.opos_inc_frac = incr & ((1UL << FRAC_BITS) - 1);
+ lr.opos_inc = incr >> FRAC_BITS;
+
+ lr.ilast[0] = lr.ilast[1] = 0;
+ lr.icur[0] = lr.icur[1] = 0;
+
+ lr.inLen = 0;
+}
+
+/*
+ * Processed signed long samples from ibuf to obuf.
+ * Return number of samples processed.
+ */
+template<bool stereo, bool reverseStereo>
+int LinearRateConverter<stereo, reverseStereo>::flow(AudioStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol_l, st_volume_t vol_r) {
+
+#ifdef DEBUG_RATECONV
+fprintf(stderr, "Linear st=%d rev=%d\n", stereo, reverseStereo);
+fflush(stderr);
+#endif
+ if (!stereo) {
+ ARM_LinearRate_M(input,
+ &SimpleRate_readFudge,
+ &lr,
+ obuf, osamp, vol_l, vol_r);
+ } else if (reverseStereo) {
+ ARM_LinearRate_R(input,
+ &SimpleRate_readFudge,
+ &lr,
+ obuf, osamp, vol_l, vol_r);
+ } else {
+ ARM_LinearRate_S(input,
+ &SimpleRate_readFudge,
+ &lr,
+ obuf, osamp, vol_l, vol_r);
+ }
+ return (ST_SUCCESS);
+}
+
+
+#pragma mark -
+
+
+/**
+ * Simple audio rate converter for the case that the inrate equals the outrate.
+ */
+extern "C" void ARM_CopyRate_M(st_size_t len,
+ st_sample_t *obuf,
+ st_volume_t vol_l,
+ st_volume_t vol_r,
+ st_sample_t *_buffer);
+
+extern "C" void ARM_CopyRate_S(st_size_t len,
+ st_sample_t *obuf,
+ st_volume_t vol_l,
+ st_volume_t vol_r,
+ st_sample_t *_buffer);
+
+extern "C" void ARM_CopyRate_R(st_size_t len,
+ st_sample_t *obuf,
+ st_volume_t vol_l,
+ st_volume_t vol_r,
+ st_sample_t *_buffer);
+
+
+template<bool stereo, bool reverseStereo>
+class CopyRateConverter : public RateConverter {
+ st_sample_t *_buffer;
+ st_size_t _bufferSize;
+public:
+ CopyRateConverter() : _buffer(0), _bufferSize(0) {}
+ ~CopyRateConverter() {
+ free(_buffer);
+ }
+
+ virtual int flow(AudioStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol_l, st_volume_t vol_r) {
+ assert(input.isStereo() == stereo);
+
+#ifdef DEBUG_RATECONV
+fprintf(stderr, "Copy st=%d rev=%d\n", stereo, reverseStereo);
+fflush(stderr);
+#endif
+ st_sample_t *ptr;
+ st_size_t len;
+
+ if (stereo)
+ osamp *= 2;
+
+ // Reallocate temp buffer, if necessary
+ if (osamp > _bufferSize) {
+ free(_buffer);
+ _buffer = (st_sample_t *)malloc(osamp * 2);
+ _bufferSize = osamp;
+ }
+
+ // Read up to 'osamp' samples into our temporary buffer
+ len = input.readBuffer(_buffer, osamp);
+ if (len <= 0)
+ return (ST_SUCCESS);
+
+ // Mix the data into the output buffer
+ if (stereo && reverseStereo)
+ ARM_CopyRate_R(len, obuf, vol_l, vol_r, _buffer);
+ else if (stereo)
+ ARM_CopyRate_S(len, obuf, vol_l, vol_r, _buffer);
+ else
+ ARM_CopyRate_M(len, obuf, vol_l, vol_r, _buffer);
+
+ return (ST_SUCCESS);
+ }
+ virtual int drain(st_sample_t *obuf, st_size_t osamp, st_volume_t vol) {
+ return (ST_SUCCESS);
+ }
+};
+
+
+#pragma mark -
+
+
+/**
+ * Create and return a RateConverter object for the specified input and output rates.
+ */
+RateConverter *makeRateConverter(st_rate_t inrate, st_rate_t outrate, bool stereo, bool reverseStereo) {
+ if (inrate != outrate) {
+ if ((inrate % outrate) == 0) {
+ if (stereo) {
+ if (reverseStereo)
+ return new SimpleRateConverter<true, true>(inrate, outrate);
+ else
+ return new SimpleRateConverter<true, false>(inrate, outrate);
+ } else
+ return new SimpleRateConverter<false, false>(inrate, outrate);
+ } else {
+ if (stereo) {
+ if (reverseStereo)
+ return new LinearRateConverter<true, true>(inrate, outrate);
+ else
+ return new LinearRateConverter<true, false>(inrate, outrate);
+ } else
+ return new LinearRateConverter<false, false>(inrate, outrate);
+ }
+ } else {
+ if (stereo) {
+ if (reverseStereo)
+ return new CopyRateConverter<true, true>();
+ else
+ return new CopyRateConverter<true, false>();
+ } else
+ return new CopyRateConverter<false, false>();
+ }
+}
+
+} // End of namespace Audio
diff --git a/sound/rate_arm_asm.s b/sound/rate_arm_asm.s
new file mode 100644
index 0000000000..709d343c6c
--- /dev/null
+++ b/sound/rate_arm_asm.s
@@ -0,0 +1,692 @@
+@ ScummVM - Graphic Adventure Engine
+@
+@ ScummVM is the legal property of its developers, whose names
+@ are too numerous to list here. Please refer to the COPYRIGHT
+@ file distributed with this source distribution.
+@
+@ 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+@
+@ $URL$
+@ $Id$
+@
+@ @author Robin Watts (robin@wss.co.uk)
+@
+@ This file, together with rate_arm.cpp, provides an ARM optimised version
+@ of rate.cpp. The algorithm is essentially the same as that within rate.cpp
+@ so to understand this file you should understand rate.cpp first.
+
+ .text
+
+ .global ARM_CopyRate_M
+ .global ARM_CopyRate_S
+ .global ARM_CopyRate_R
+ .global ARM_SimpleRate_M
+ .global ARM_SimpleRate_S
+ .global ARM_SimpleRate_R
+ .global ARM_LinearRate_M
+ .global ARM_LinearRate_S
+ .global ARM_LinearRate_R
+
+ARM_CopyRate_M:
+ @ r0 = len
+ @ r1 = obuf
+ @ r2 = vol_l
+ @ r3 = vol_r
+ @ <> = ptr
+ LDR r12,[r13]
+ STMFD r13!,{r4-r7,r14}
+
+ MOV r14,#0 @ r14= 0
+ ORR r2, r2, r2, LSL #8 @ r2 = vol_l as 16 bits
+ ORR r3, r3, r3, LSL #8 @ r3 = vol_r as 16 bits
+CopyRate_M_loop:
+ LDRSH r5, [r12], #2 @ r5 = tmp0 = tmp1 = *ptr++
+ LDRSH r6, [r1] @ r6 = obuf[0]
+ LDRSH r7, [r1, #2] @ r7 = obuf[1]
+ MUL r4, r2, r5 @ r4 = tmp0*vol_l
+ MUL r5, r3, r5 @ r5 = tmp1*vol_r
+
+ ADDS r6, r4, r6, LSL #16 @ r6 = obuf[0]<<16 + tmp0*vol_l
+ RSCVS r6, r14,#1<<31 @ Clamp r6
+ ADDS r7, r5, r7, LSL #16 @ r7 = obuf[1]<<16 + tmp1*vol_r
+ RSCVS r7, r14,#1<<31 @ Clamp r7
+
+ MOV r6, r6, LSR #16 @ Shift back to halfword
+ MOV r7, r7, LSR #16 @ Shift back to halfword
+
+ STRH r6, [r1], #2 @ Store output value
+ STRH r7, [r1], #2 @ Store output value
+
+ SUBS r0,r0,#1 @ len--
+ BGT CopyRate_M_loop @ and loop
+
+ LDMFD r13!,{r4-r7,PC}
+
+ARM_CopyRate_S:
+ @ r0 = len
+ @ r1 = obuf
+ @ r2 = vol_l
+ @ r3 = vol_r
+ @ <> = ptr
+ LDR r12,[r13]
+ STMFD r13!,{r4-r7,r14}
+
+ MOV r14,#0 @ r14= 0
+ ORR r2, r2, r2, LSL #8 @ r2 = vol_l as 16 bits
+ ORR r3, r3, r3, LSL #8 @ r3 = vol_r as 16 bits
+CopyRate_S_loop:
+ LDRSH r4, [r12],#2 @ r4 = tmp0 = *ptr++
+ LDRSH r5, [r12],#2 @ r5 = tmp1 = *ptr++
+ LDRSH r6, [r1] @ r6 = obuf[0]
+ LDRSH r7, [r1,#2] @ r7 = obuf[1]
+ MUL r4, r2, r4 @ r5 = tmp0*vol_l
+ MUL r5, r3, r5 @ r6 = tmp1*vol_r
+
+ ADDS r6, r4, r6, LSL #16 @ r6 = obuf[0]<<16 + tmp0*vol_l
+ RSCVS r6, r14,#1<<31 @ Clamp r6
+ ADDS r7, r5, r7, LSL #16 @ r7 = obuf[1]<<16 + tmp1*vol_r
+ RSCVS r7, r14,#1<<31 @ Clamp r7
+
+ MOV r6, r6, LSR #16 @ Shift back to halfword
+ MOV r7, r7, LSR #16 @ Shift back to halfword
+
+ STRH r6, [r1],#2 @ Store output value
+ STRH r7, [r1],#2 @ Store output value
+
+ SUBS r0,r0,#2 @ len -= 2
+ BGT CopyRate_S_loop @ and loop
+
+ LDMFD r13!,{r4-r7,PC}
+
+ARM_CopyRate_R:
+ @ r0 = len
+ @ r1 = obuf
+ @ r2 = vol_l
+ @ r3 = vol_r
+ @ <> = ptr
+ LDR r12,[r13]
+ STMFD r13!,{r4-r7,r14}
+
+ MOV r14,#0 @ r14= 0
+ ORR r2, r2, r2, LSL #8 @ r2 = vol_l as 16 bits
+ ORR r3, r3, r3, LSL #8 @ r3 = vol_r as 16 bits
+CopyRate_R_loop:
+ LDRSH r5, [r12],#2 @ r5 = tmp1 = *ptr++
+ LDRSH r4, [r12],#2 @ r4 = tmp0 = *ptr++
+ LDRSH r6, [r1] @ r6 = obuf[0]
+ LDRSH r7, [r1,#2] @ r7 = obuf[1]
+ MUL r4, r2, r4 @ r4 = tmp0*vol_l
+ MUL r5, r3, r5 @ r5 = tmp1*vol_r
+
+ ADDS r6, r4, r6, LSL #16 @ r6 = obuf[0]<<16 + tmp0*vol_l
+ RSCVS r6, r14,#1<<31 @ Clamp r6
+ ADDS r7, r5, r7, LSL #16 @ r7 = obuf[1]<<16 + tmp1*vol_r
+ RSCVS r7, r14,#1<<31 @ Clamp r7
+
+ MOV r6, r6, LSR #16 @ Shift back to halfword
+ MOV r7, r7, LSR #16 @ Shift back to halfword
+
+ STRH r6, [r1],#2 @ Store output value
+ STRH r7, [r1],#2 @ Store output value
+
+ SUBS r0,r0,#2 @ len -= 2
+ BGT CopyRate_R_loop @ and loop
+
+ LDMFD r13!,{r4-r7,PC}
+
+ARM_SimpleRate_M:
+ @ r0 = AudioStream &input
+ @ r1 = input.readBuffer
+ @ r2 = input->sr
+ @ r3 = obuf
+ @ <> = osamp
+ @ <> = vol_l
+ @ <> = vol_r
+ MOV r12,r13
+ STMFD r13!,{r0-r2,r4-r8,r10-r11,r14}
+ LDMFD r12,{r11,r12,r14} @ r11= osamp
+ @ r12= vol_l
+ @ r14= vol_r
+ LDMIA r2,{r0,r1,r2,r8} @ r0 = inPtr
+ @ r1 = inLen
+ @ r2 = opos
+ @ r8 = opos_inc
+ CMP r11,#0 @ if (osamp <= 0)
+ BLE SimpleRate_M_end @ bale
+ MOV r10,#0
+ ORR r12,r12,r12,LSL #8 @ r12= vol_l as 16 bits
+ ORR r14,r14,r14,LSL #8 @ r14= vol_r as 16 bits
+SimpleRate_M_loop:
+ SUBS r1, r1, #1 @ r1 = inLen -= 1
+ BLT SimpleRate_M_read
+ SUBS r2, r2, #1 @ r2 = opos--
+ ADDGE r0, r0, #2 @ if (r2 >= 0) { sr.inPtr++
+ BGE SimpleRate_M_loop @ and loop }
+SimpleRate_M_read_return:
+ LDRSH r5, [r0],#2 @ r5 = tmp1 = *inPtr++
+ LDRSH r6, [r3] @ r6 = obuf[0]
+ LDRSH r7, [r3,#2] @ r7 = obuf[1]
+ ADD r2, r2, r8 @ r2 = opos += opos_inc
+ MUL r4, r12,r5 @ r4 = tmp0*vol_l
+ MUL r5, r14,r5 @ r5 = tmp1*vol_r
+
+ ADDS r6, r4, r6, LSL #16 @ r6 = obuf[0]<<16 + tmp0*vol_l
+ RSCVS r6, r10,#1<<31 @ Clamp r6
+ ADDS r7, r5, r7, LSL #16 @ r7 = obuf[1]<<16 + tmp1*vol_r
+ RSCVS r7, r10,#1<<31 @ Clamp r7
+
+ MOV r6, r6, LSR #16 @ Shift back to halfword
+ MOV r7, r7, LSR #16 @ Shift back to halfword
+
+ STRH r6, [r3],#2 @ Store output value
+ STRH r7, [r3],#2 @ Store output value
+
+ SUBS r11,r11,#1 @ len--
+ BGT SimpleRate_M_loop @ and loop
+SimpleRate_M_end:
+ LDR r14,[r13,#8] @ r14 = sr
+ ADD r13,r13,#12 @ Skip over r0-r2 on stack
+ STMIA r14,{r0,r1,r2} @ Store back updated values
+ LDMFD r13!,{r4-r8,r10-r11,PC}
+SimpleRate_M_read:
+ LDR r0, [r13,#4*2] @ r0 = sr
+ ADD r0, r0, #16 @ r0 = inPtr = inBuf
+ STMFD r13!,{r0,r2-r3,r12,r14}
+
+ MOV r1, r0 @ r1 = inBuf
+ LDR r0, [r13,#4*5] @ r0 = AudioStream & input
+ MOV r2, #512 @ r2 = ARRAYSIZE(inBuf)
+
+ @ Calling back into C++ here. WinCE is fairly easy about such things
+ @ but other OS are more awkward. r9 is preserved for Symbian, and
+ @ we have 3+8+5 = 16 things on the stack (an even number).
+ MOV r14,PC
+ LDR PC,[r13,#4*6] @ inLen = input.readBuffer(inBuf,512)
+ SUBS r1, r0, #1 @ r1 = inLen-1
+ LDMFD r13!,{r0,r2-r3,r12,r14}
+ BLT SimpleRate_M_end
+ SUBS r2, r2, #1 @ r2 = opos--
+ ADDGE r0, r0, #2 @ if (r2 >= 0) { sr.inPtr++
+ BGE SimpleRate_M_loop @ and loop }
+ B SimpleRate_M_read_return
+
+
+ARM_SimpleRate_S:
+ @ r0 = AudioStream &input
+ @ r1 = input.readBuffer
+ @ r2 = input->sr
+ @ r3 = obuf
+ @ <> = osamp
+ @ <> = vol_l
+ @ <> = vol_r
+ MOV r12,r13
+ STMFD r13!,{r0-r2,r4-r8,r10-r11,r14}
+ LDMFD r12,{r11,r12,r14} @ r11= osamp
+ @ r12= vol_l
+ @ r14= vol_r
+ LDMIA r2,{r0,r1,r2,r8} @ r0 = inPtr
+ @ r1 = inLen
+ @ r2 = opos
+ @ r8 = opos_inc
+ CMP r11,#0 @ if (osamp <= 0)
+ BLE SimpleRate_S_end @ bale
+ MOV r10,#0
+ ORR r12,r12,r12,LSL #8 @ r12= vol_l as 16 bits
+ ORR r14,r14,r14,LSL #8 @ r14= vol_r as 16 bits
+SimpleRate_S_loop:
+ SUBS r1, r1, #2 @ r1 = inLen -= 2
+ BLT SimpleRate_S_read
+ SUBS r2, r2, #1 @ r2 = opos--
+ ADDGE r0, r0, #4 @ if (r2 >= 0) { sr.inPtr += 2
+ BGE SimpleRate_S_loop @ and loop }
+SimpleRate_S_read_return:
+ LDRSH r4, [r0],#2 @ r4 = tmp0 = *inPtr++
+ LDRSH r5, [r0],#2 @ r5 = tmp1 = *inPtr++
+ LDRSH r6, [r3] @ r6 = obuf[0]
+ LDRSH r7, [r3,#2] @ r7 = obuf[1]
+ ADD r2, r2, r8 @ r2 = opos += opos_inc
+ MUL r4, r12,r4 @ r5 = tmp0*vol_l
+ MUL r5, r14,r5 @ r6 = tmp1*vol_r
+
+ ADDS r6, r4, r6, LSL #16 @ r6 = obuf[0]<<16 + tmp0*vol_l
+ RSCVS r6, r10,#1<<31 @ Clamp r6
+ ADDS r7, r5, r7, LSL #16 @ r7 = obuf[1]<<16 + tmp1*vol_r
+ RSCVS r7, r10,#1<<31 @ Clamp r7
+
+ MOV r6, r6, LSR #16 @ Shift back to halfword
+ MOV r7, r7, LSR #16 @ Shift back to halfword
+
+ STRH r6, [r3],#2 @ Store output value
+ STRH r7, [r3],#2 @ Store output value
+
+ SUBS r11,r11,#1 @ osamp--
+ BGT SimpleRate_S_loop @ and loop
+SimpleRate_S_end:
+ LDR r14,[r13,#8] @ r14 = sr
+ ADD r13,r13,#12 @ skip over r0-r2 on stack
+ STMIA r14,{r0,r1,r2} @ store back updated values
+ LDMFD r13!,{r4-r8,r10-r11,PC}
+SimpleRate_S_read:
+ LDR r0, [r13,#4*2] @ r0 = sr
+ ADD r0, r0, #16 @ r0 = inPtr = inBuf
+ STMFD r13!,{r0,r2-r3,r12,r14}
+
+ MOV r1, r0 @ r1 = inBuf
+ LDR r0, [r13,#4*5] @ r0 = AudioStream & input
+ MOV r2, #512 @ r2 = ARRAYSIZE(inBuf)
+
+ @ Calling back into C++ here. WinCE is fairly easy about such things
+ @ but other OS are more awkward. r9 is preserved for Symbian, and
+ @ we have 3+8+5 = 16 things on the stack (an even number).
+ MOV r14,PC
+ LDR PC,[r13,#4*6] @ inLen = input.readBuffer(inBuf,512)
+ SUBS r1, r0, #2 @ r1 = inLen-2
+ LDMFD r13!,{r0,r2-r3,r12,r14}
+ BLT SimpleRate_S_end
+ SUBS r2, r2, #1 @ r2 = opos--
+ ADDGE r0, r0, #4 @ if (r2 >= 0) { sr.inPtr += 2
+ BGE SimpleRate_S_loop @ and loop }
+ B SimpleRate_S_read_return
+
+
+
+ARM_SimpleRate_R:
+ @ r0 = AudioStream &input
+ @ r1 = input.readBuffer
+ @ r2 = input->sr
+ @ r3 = obuf
+ @ <> = osamp
+ @ <> = vol_l
+ @ <> = vol_r
+ MOV r12,r13
+ STMFD r13!,{r0-r2,r4-r8,r10-r11,r14}
+ LDMFD r12,{r11,r12,r14} @ r11= osamp
+ @ r12= vol_l
+ @ r14= vol_r
+ LDMIA r2,{r0,r1,r2,r8} @ r0 = inPtr
+ @ r1 = inLen
+ @ r2 = opos
+ @ r8 = opos_inc
+ CMP r11,#0 @ if (osamp <= 0)
+ BLE SimpleRate_R_end @ bale
+ MOV r10,#0
+ ORR r12,r12,r12,LSL #8 @ r12= vol_l as 16 bits
+ ORR r14,r14,r14,LSL #8 @ r14= vol_r as 16 bits
+SimpleRate_R_loop:
+ SUBS r1, r1, #2 @ r1 = inLen -= 2
+ BLT SimpleRate_R_read
+ SUBS r2, r2, #1 @ r2 = opos--
+ ADDGE r0, r0, #4 @ if (r2 >= 0) { sr.inPtr += 2
+ BGE SimpleRate_R_loop @ and loop }
+SimpleRate_R_read_return:
+ LDRSH r5, [r0],#2 @ r5 = tmp0 = *inPtr++
+ LDRSH r4, [r0],#2 @ r4 = tmp1 = *inPtr++
+ LDRSH r6, [r3] @ r6 = obuf[0]
+ LDRSH r7, [r3,#2] @ r7 = obuf[1]
+ ADD r2, r2, r8 @ r2 = opos += opos_inc
+ MUL r4, r12,r4 @ r5 = tmp0*vol_l
+ MUL r5, r14,r5 @ r6 = tmp1*vol_r
+
+ ADDS r6, r4, r6, LSL #16 @ r6 = obuf[0]<<16 + tmp0*vol_l
+ RSCVS r6, r10,#1<<31 @ Clamp r6
+ ADDS r7, r5, r7, LSL #16 @ r7 = obuf[1]<<16 + tmp1*vol_r
+ RSCVS r7, r10,#1<<31 @ Clamp r7
+
+ MOV r6, r6, LSR #16 @ Shift back to halfword
+ MOV r7, r7, LSR #16 @ Shift back to halfword
+
+ STRH r6, [r3],#2 @ Store output value
+ STRH r7, [r3],#2 @ Store output value
+
+ SUBS r11,r11,#1 @ osamp--
+ BGT SimpleRate_R_loop @ and loop
+SimpleRate_R_end:
+ LDR r14,[r13,#8] @ r14 = sr
+ ADD r13,r13,#12 @ Skip over r0-r2 on stack
+ STMIA r14,{r0,r1,r2} @ Store back updated values
+ LDMFD r13!,{r4-r8,r10-r11,PC}
+SimpleRate_R_read:
+ LDR r0, [r13,#4*2] @ r0 = sr
+ ADD r0, r0, #16 @ r0 = inPtr = inBuf
+ STMFD r13!,{r0,r2-r3,r12,r14}
+
+ MOV r1, r0 @ r1 = inBuf
+ LDR r0, [r13,#4*5] @ r0 = AudioStream & input
+ MOV r2, #512 @ r2 = ARRAYSIZE(inBuf)
+
+ @ Calling back into C++ here. WinCE is fairly easy about such things
+ @ but other OS are more awkward. r9 is preserved for Symbian, and
+ @ we have 3+8+5 = 16 things on the stack (an even number).
+ MOV r14,PC
+ LDR PC,[r13,#4*6] @ inLen = input.readBuffer(inBuf,512)
+ SUBS r1, r0, #2 @ r1 = inLen-2
+ LDMFD r13!,{r0,r2-r3,r12,r14}
+ BLT SimpleRate_R_end
+ SUBS r2, r2, #1 @ r2 = opos--
+ ADDGE r0, r0, #4 @ if (r2 >= 0) { sr.inPtr += 2
+ BGE SimpleRate_R_loop @ and loop }
+ B SimpleRate_R_read_return
+
+
+ARM_LinearRate_M:
+ @ r0 = AudioStream &input
+ @ r1 = input.readBuffer
+ @ r2 = input->sr
+ @ r3 = obuf
+ @ <> = osamp
+ @ <> = vol_l
+ @ <> = vol_r
+ MOV r12,r13
+ STMFD r13!,{r0-r1,r4-r11,r14}
+ LDMFD r12,{r11,r12,r14} @ r11= osamp
+ @ r12= vol_l
+ @ r14= vol_r
+ LDMIA r2,{r0,r1,r8} @ r0 = inPtr
+ @ r1 = inLen
+ @ r8 = opos
+ CMP r11,#0 @ if (osamp <= 0)
+ BLE LinearRate_M_end @ bale
+ ORR r12,r12,r12,LSL #8 @ r12= vol_l as 16 bits
+ ORR r14,r14,r14,LSL #8 @ r14= vol_r as 16 bits
+ CMP r1,#0
+ BGT LinearRate_M_part2
+
+ @ part1 - read input samples
+LinearRate_M_loop:
+ SUBS r1, r1, #1 @ r1 = inLen -= 1
+ BLT LinearRate_M_read
+LinearRate_M_read_return:
+ LDR r10,[r2, #16] @ r10= icur[0,1]
+ LDRSH r5, [r0],#2 @ r5 = tmp1 = *inPtr++
+ SUBS r8, r8, #1 @ r8 = opos--
+ STR r10,[r2,#20] @ ilast[0,1] = icur[0,1]
+ STRH r5, [r2,#16] @ icur[0] = tmp1
+ BGE LinearRate_M_loop
+
+ @ part2 - form output samples
+LinearRate_M_part2:
+ @ We are guaranteed that opos < 0 here
+ LDRSH r6, [r2,#20] @ r6 = ilast[0]
+ LDRSH r5, [r2,#16] @ r5 = icur[0]
+ LDRH r4, [r2,#24] @ r4 = opos_frac
+ LDR r10,[r2,#28] @ r10= opos_frac_inc
+ MOV r6, r6, LSL #16 @ r6 = ilast[0]<<16
+ SUB r5, r5, r6, ASR #16 @ r5 = icur[0] - ilast[0]
+ ADD r6, r6, #1<<15 @ r6 = ilast[0]+1<<(FRAC_BITS-1)
+ MLA r6, r4, r5, r6 @ r6 = (icur[0]-ilast[0])*opos_frac+ilast[0]
+
+ ADD r4, r4, r10 @ r4 = tmp = opos_frac+opos_inc_frac
+ STRH r4,[r2,#24] @ opos_frac &= 65535
+ ADD r8, r8, r4, LSR #16 @ opos += (tmp>>FRAC_BITS)
+
+ LDRSH r4, [r3] @ r4 = obuf[0]
+ LDRSH r5, [r3,#2] @ r5 = obuf[1]
+ MOV r6, r6, ASR #16 @ r6 = tmp0 = tmp1 >>= 16
+ MUL r7, r12,r6 @ r7 = tmp0*vol_l
+ MUL r6, r14,r6 @ r6 = tmp1*vol_r
+
+ ADDS r7, r7, r4, LSL #16 @ r7 = obuf[0]<<16 + tmp0*vol_l
+ MOV r4, #0
+ RSCVS r7, r4, #1<<31 @ Clamp r7
+ ADDS r6, r6, r5, LSL #16 @ r6 = obuf[1]<<16 + tmp1*vol_r
+ RSCVS r6, r4, #1<<31 @ Clamp r6
+
+ MOV r7, r7, LSR #16 @ Shift back to halfword
+ MOV r6, r6, LSR #16 @ Shift back to halfword
+
+ LDR r5, [r2,#12] @ r5 = opos_inc
+ STRH r7, [r3],#2 @ Store output value
+ STRH r6, [r3],#2 @ Store output value
+ SUBS r11, r11,#1 @ opos--
+ BLE LinearRate_M_end @ end if needed
+
+ ADDS r8, r8, r5 @ r8 = opos += opos_inc
+ BLT LinearRate_M_part2
+ B LinearRate_M_loop
+LinearRate_M_end:
+ ADD r13,r13,#8
+ STMIA r2,{r0,r1,r8}
+ LDMFD r13!,{r4-r11,PC}
+LinearRate_M_read:
+ ADD r0, r2, #32 @ r0 = inPtr = inBuf
+ STMFD r13!,{r0,r2-r3,r12,r14}
+
+ MOV r1, r0 @ r1 = inBuf
+ LDR r0, [r13,#4*5] @ r0 = AudioStream & input
+ MOV r2, #512 @ r2 = ARRAYSIZE(inBuf)
+
+ @ Calling back into C++ here. WinCE is fairly easy about such things
+ @ but other OS are more awkward. r9 is preserved for Symbian, and
+ @ we have 2+9+5 = 16 things on the stack (an even number).
+ MOV r14,PC
+ LDR PC,[r13,#4*6] @ inLen = input.readBuffer(inBuf,512)
+ SUBS r1, r0, #1 @ r1 = inLen-1
+ LDMFD r13!,{r0,r2-r3,r12,r14}
+ BLT LinearRate_M_end
+ B LinearRate_M_read_return
+
+ARM_LinearRate_S:
+ @ r0 = AudioStream &input
+ @ r1 = input.readBuffer
+ @ r2 = input->sr
+ @ r3 = obuf
+ @ <> = osamp
+ @ <> = vol_l
+ @ <> = vol_r
+ MOV r12,r13
+ STMFD r13!,{r0-r1,r4-r11,r14}
+ LDMFD r12,{r11,r12,r14} @ r11= osamp
+ @ r12= vol_l
+ @ r14= vol_r
+ LDMIA r2,{r0,r1,r8} @ r0 = inPtr
+ @ r1 = inLen
+ @ r8 = opos
+ CMP r11,#0 @ if (osamp <= 0)
+ BLE LinearRate_S_end @ bale
+ ORR r12,r12,r12,LSL #8 @ r12= vol_l as 16 bits
+ ORR r14,r14,r14,LSL #8 @ r14= vol_r as 16 bits
+ CMP r1,#0
+ BGT LinearRate_S_part2
+
+ @ part1 - read input samples
+LinearRate_S_loop:
+ SUBS r1, r1, #2 @ r1 = inLen -= 2
+ BLT LinearRate_S_read
+LinearRate_S_read_return:
+ LDR r10,[r2, #16] @ r10= icur[0,1]
+ LDRSH r5, [r0],#2 @ r5 = tmp0 = *inPtr++
+ LDRSH r6, [r0],#2 @ r5 = tmp1 = *inPtr++
+ SUBS r8, r8, #1 @ r8 = opos--
+ STR r10,[r2,#20] @ ilast[0,1] = icur[0,1]
+ STRH r5, [r2,#16] @ icur[0] = tmp0
+ STRH r6, [r2,#16] @ icur[1] = tmp1
+ BGE LinearRate_S_loop
+
+ @ part2 - form output samples
+LinearRate_S_part2:
+ @ We are guaranteed that opos < 0 here
+ LDRSH r6, [r2,#20] @ r6 = ilast[0]
+ LDRSH r5, [r2,#16] @ r5 = icur[0]
+ LDRH r4, [r2,#24] @ r4 = opos_frac
+ MOV r6, r6, LSL #16 @ r6 = ilast[0]<<16
+ SUB r5, r5, r6, ASR #16 @ r5 = icur[0] - ilast[0]
+ ADD r6, r6, #1<<15 @ r6 = ilast[0]+1<<(FRAC_BITS-1)
+ MLA r6, r4, r5, r6 @ r6 = (icur[0]-ilast[0])*opos_frac+ilast[0]
+
+ LDRSH r7, [r2,#22] @ r6 = ilast[1]
+ LDRSH r5, [r2,#18] @ r5 = icur[1]
+ LDR r10,[r2,#28] @ r10= opos_frac_inc
+ MOV r7, r7, LSL #16 @ r7 = ilast[1]<<16
+ SUB r5, r5, r7, ASR #16 @ r5 = icur[1] - ilast[1]
+ ADD r7, r7, #1<<15 @ r6 = ilast[1]+1<<(FRAC_BITS-1)
+ MLA r7, r4, r5, r7 @ r6 = (icur[1]-ilast[1])*opos_frac+ilast[1]
+
+ ADD r4, r4, r10 @ r4 = tmp = opos_frac+opos_inc_frac
+ STRH r4,[r2,#24] @ opos_frac &= 65535
+ ADD r8, r8, r4, LSR #16 @ opos += (tmp>>FRAC_BITS)
+
+ LDRSH r4, [r3] @ r4 = obuf[0]
+ LDRSH r5, [r3,#2] @ r5 = obuf[1]
+ MOV r7, r7, ASR #16 @ r7 = tmp0 >>= 16
+ MOV r6, r6, ASR #16 @ r6 = tmp1 >>= 16
+ MUL r7, r12,r7 @ r7 = tmp0*vol_l
+ MUL r6, r14,r6 @ r6 = tmp1*vol_r
+
+ ADDS r7, r7, r4, LSL #16 @ r7 = obuf[0]<<16 + tmp0*vol_l
+ MOV r4, #0
+ RSCVS r7, r4, #1<<31 @ Clamp r7
+ ADDS r6, r6, r5, LSL #16 @ r6 = obuf[1]<<16 + tmp1*vol_r
+ RSCVS r6, r4, #1<<31 @ Clamp r6
+
+ MOV r7, r7, LSR #16 @ Shift back to halfword
+ MOV r6, r6, LSR #16 @ Shift back to halfword
+
+ LDR r5, [r2,#12] @ r5 = opos_inc
+ STRH r7, [r3],#2 @ Store output value
+ STRH r6, [r3],#2 @ Store output value
+ SUBS r11, r11,#1 @ opos--
+ BLE LinearRate_S_end @ and loop
+
+ ADDS r8, r8, r5 @ r8 = opos += opos_inc
+ BLT LinearRate_S_part2
+ B LinearRate_S_loop
+LinearRate_S_end:
+ ADD r13,r13,#8
+ STMIA r2,{r0,r1,r8}
+ LDMFD r13!,{r4-r11,PC}
+LinearRate_S_read:
+ ADD r0, r2, #32 @ r0 = inPtr = inBuf
+ STMFD r13!,{r0,r2-r3,r12,r14}
+
+ MOV r1, r0 @ r1 = inBuf
+ LDR r0, [r13,#4*5] @ r0 = AudioStream & input
+ MOV r2, #512 @ r2 = ARRAYSIZE(inBuf)
+
+ @ Calling back into C++ here. WinCE is fairly easy about such things
+ @ but other OS are more awkward. r9 is preserved for Symbian, and
+ @ we have 2+9+5 = 16 things on the stack (an even number).
+ MOV r14,PC
+ LDR PC,[r13,#4*6] @ inLen = input.readBuffer(inBuf,512)
+ SUBS r1, r0, #2 @ r1 = inLen-2
+ LDMFD r13!,{r0,r2-r3,r12,r14}
+ BLT LinearRate_S_end
+ B LinearRate_S_read_return
+
+ARM_LinearRate_R:
+ @ r0 = AudioStream &input
+ @ r1 = input.readBuffer
+ @ r2 = input->sr
+ @ r3 = obuf
+ @ <> = osamp
+ @ <> = vol_l
+ @ <> = vol_r
+ MOV r12,r13
+ STMFD r13!,{r0-r1,r4-r11,r14}
+ LDMFD r12,{r11,r12,r14} @ r11= osamp
+ @ r12= vol_l
+ @ r14= vol_r
+ LDMIA r2,{r0,r1,r8} @ r0 = inPtr
+ @ r1 = inLen
+ @ r8 = opos
+ CMP r11,#0 @ if (osamp <= 0)
+ BLE LinearRate_R_end @ bale
+ ORR r12,r12,r12,LSL #8 @ r12= vol_l as 16 bits
+ ORR r14,r14,r14,LSL #8 @ r14= vol_r as 16 bits
+ CMP r1,#0
+ BGT LinearRate_R_part2
+
+ @ part1 - read input samples
+LinearRate_R_loop:
+ SUBS r1, r1, #2 @ r1 = inLen -= 2
+ BLT LinearRate_R_read
+LinearRate_R_read_return:
+ LDR r10,[r2, #16] @ r10= icur[0,1]
+ LDRSH r5, [r0],#2 @ r5 = tmp0 = *inPtr++
+ LDRSH r6, [r0],#2 @ r5 = tmp1 = *inPtr++
+ SUBS r8, r8, #1 @ r8 = opos--
+ STR r10,[r2,#20] @ ilast[0,1] = icur[0,1]
+ STRH r5, [r2,#16] @ icur[0] = tmp0
+ STRH r6, [r2,#16] @ icur[1] = tmp1
+ BGE LinearRate_R_loop
+
+ @ part2 - form output samples
+LinearRate_R_part2:
+ @ We are guaranteed that opos < 0 here
+ LDRSH r6, [r2,#20] @ r6 = ilast[0]
+ LDRSH r5, [r2,#16] @ r5 = icur[0]
+ LDRH r4, [r2,#24] @ r4 = opos_frac
+ MOV r6, r6, LSL #16 @ r6 = ilast[0]<<16
+ SUB r5, r5, r6, ASR #16 @ r5 = icur[0] - ilast[0]
+ ADD r6, r6, #1<<15 @ r6 = ilast[0]+1<<(FRAC_BITS-1)
+ MLA r6, r4, r5, r6 @ r6 = (icur[0]-ilast[0])*opos_frac+ilast[0]
+
+ LDRSH r7, [r2,#22] @ r6 = ilast[1]
+ LDRSH r5, [r2,#18] @ r5 = icur[1]
+ LDR r10,[r2,#28] @ r10= opos_frac_inc
+ MOV r7, r7, LSL #16 @ r7 = ilast[1]<<16
+ SUB r5, r5, r7, ASR #16 @ r5 = icur[1] - ilast[1]
+ ADD r7, r7, #1<<15 @ r6 = ilast[1]+1<<(FRAC_BITS-1)
+ MLA r7, r4, r5, r7 @ r6 = (icur[1]-ilast[1])*opos_frac+ilast[1]
+
+ ADD r4, r4, r10 @ r4 = tmp = opos_frac+opos_inc_frac
+ STRH r4,[r2,#24] @ opos_frac &= 65535
+ ADD r8, r8, r4, LSR #16 @ opos += (tmp>>FRAC_BITS)
+
+ LDRSH r4, [r3] @ r4 = obuf[0]
+ LDRSH r5, [r3,#2] @ r5 = obuf[1]
+ MOV r7, r7, ASR #16 @ r7 = tmp0 >>= 16
+ MOV r6, r6, ASR #16 @ r6 = tmp1 >>= 16
+ MUL r7, r12,r7 @ r7 = tmp0*vol_l
+ MUL r6, r14,r6 @ r6 = tmp1*vol_r
+
+ ADDS r7, r7, r4, LSL #16 @ r7 = obuf[0]<<16 + tmp0*vol_l
+ MOV r4, #0
+ RSCVS r7, r4, #1<<31 @ Clamp r7
+ ADDS r6, r6, r5, LSL #16 @ r6 = obuf[1]<<16 + tmp1*vol_r
+ RSCVS r6, r4, #1<<31 @ Clamp r6
+
+ MOV r7, r7, LSR #16 @ Shift back to halfword
+ MOV r6, r6, LSR #16 @ Shift back to halfword
+
+ LDR r5, [r2,#12] @ r5 = opos_inc
+ STRH r6, [r3],#2 @ Store output value
+ STRH r7, [r3],#2 @ Store output value
+ SUBS r11, r11,#1 @ opos--
+ BLE LinearRate_R_end @ and loop
+
+ ADDS r8, r8, r5 @ r8 = opos += opos_inc
+ BLT LinearRate_R_part2
+ B LinearRate_R_loop
+LinearRate_R_end:
+ ADD r13,r13,#8
+ STMIA r2,{r0,r1,r8}
+ LDMFD r13!,{r4-r11,PC}
+LinearRate_R_read:
+ ADD r0, r2, #32 @ r0 = inPtr = inBuf
+ STMFD r13!,{r0,r2-r3,r12,r14}
+
+ MOV r1, r0 @ r1 = inBuf
+ LDR r0, [r13,#4*5] @ r0 = AudioStream & input
+ MOV r2, #512 @ r2 = ARRAYSIZE(inBuf)
+
+ @ Calling back into C++ here. WinCE is fairly easy about such things
+ @ but other OS are more awkward. r9 is preserved for Symbian, and
+ @ we have 2+9+5 = 16 things on the stack (an even number).
+ MOV r14,PC
+ LDR PC,[r13,#4*6] @ inLen = input.readBuffer(inBuf,512)
+ SUBS r1, r0, #2 @ r1 = inLen-2
+ LDMFD r13!,{r0,r2-r3,r12,r14}
+ BLT LinearRate_R_end
+ B LinearRate_R_read_return