aboutsummaryrefslogtreecommitdiff
path: root/backends/platform/PalmOS
diff options
context:
space:
mode:
authorMax Horn2006-07-06 21:44:48 +0000
committerMax Horn2006-07-06 21:44:48 +0000
commit1d8d9f5510dc5f574e926bd6fadb9d20337daede (patch)
tree5cdcf6c8a233159776be9d90f3f39885222f65eb /backends/platform/PalmOS
parent9269ebe9f5a281f452594f1e8108e31c88a398fb (diff)
downloadscummvm-rg350-1d8d9f5510dc5f574e926bd6fadb9d20337daede.tar.gz
scummvm-rg350-1d8d9f5510dc5f574e926bd6fadb9d20337daede.tar.bz2
scummvm-rg350-1d8d9f5510dc5f574e926bd6fadb9d20337daede.zip
Moving remaining platform/backends code, as previously threatened
svn-id: r23380
Diffstat (limited to 'backends/platform/PalmOS')
-rw-r--r--backends/platform/PalmOS/Rsc/Resource.Frk/Starter.rsrcbin0 -> 53276 bytes
-rw-r--r--backends/platform/PalmOS/Rsc/Resource.Frk/builder.rsrcbin0 -> 17400 bytes
-rw-r--r--backends/platform/PalmOS/Rsc/Starter.rsrc0
-rw-r--r--backends/platform/PalmOS/Rsc/StarterRsc.h392
-rw-r--r--backends/platform/PalmOS/Rsc/batLow.bmpbin0 -> 1592 bytes
-rw-r--r--backends/platform/PalmOS/Rsc/builder.rsrc0
-rw-r--r--backends/platform/PalmOS/Rsc/builderrsc.h93
-rw-r--r--backends/platform/PalmOS/Rsc/keyAlt.bmpbin0 -> 1336 bytes
-rw-r--r--backends/platform/PalmOS/Rsc/keyCommand.bmpbin0 -> 1336 bytes
-rw-r--r--backends/platform/PalmOS/Rsc/keyCtrl.bmpbin0 -> 1336 bytes
-rw-r--r--backends/platform/PalmOS/Rsc/modules.rcp67
-rw-r--r--backends/platform/PalmOS/Rsc/modulesrsc.h6
-rw-r--r--backends/platform/PalmOS/Rsc/numpad.bmpbin0 -> 1336 bytes
-rw-r--r--backends/platform/PalmOS/Src/args.cpp106
-rw-r--r--backends/platform/PalmOS/Src/args.h43
-rw-r--r--backends/platform/PalmOS/Src/base_event.cpp333
-rw-r--r--backends/platform/PalmOS/Src/base_gfx.cpp280
-rw-r--r--backends/platform/PalmOS/Src/base_mouse.cpp72
-rw-r--r--backends/platform/PalmOS/Src/be_68k.cpp26
-rw-r--r--backends/platform/PalmOS/Src/be_68k.h26
-rw-r--r--backends/platform/PalmOS/Src/be_base.cpp116
-rw-r--r--backends/platform/PalmOS/Src/be_base.h246
-rw-r--r--backends/platform/PalmOS/Src/be_os5.cpp111
-rw-r--r--backends/platform/PalmOS/Src/be_os5.h164
-rw-r--r--backends/platform/PalmOS/Src/be_os5ex.cpp103
-rw-r--r--backends/platform/PalmOS/Src/be_os5ex.h67
-rw-r--r--backends/platform/PalmOS/Src/be_save.cpp163
-rw-r--r--backends/platform/PalmOS/Src/be_zodiac.cpp90
-rw-r--r--backends/platform/PalmOS/Src/be_zodiac.h90
-rw-r--r--backends/platform/PalmOS/Src/builder/b_globals.c85
-rw-r--r--backends/platform/PalmOS/Src/builder/b_globals.h37
-rw-r--r--backends/platform/PalmOS/Src/builder/builder.c442
-rw-r--r--backends/platform/PalmOS/Src/builder/enum_globals.h112
-rw-r--r--backends/platform/PalmOS/Src/builder/queen/bq_display.c297
-rw-r--r--backends/platform/PalmOS/Src/builder/queen/bq_graphics.c302
-rw-r--r--backends/platform/PalmOS/Src/builder/queen/bq_musicdata.c1939
-rw-r--r--backends/platform/PalmOS/Src/builder/queen/bq_restables.c1096
-rw-r--r--backends/platform/PalmOS/Src/builder/queen/bq_talk.c518
-rw-r--r--backends/platform/PalmOS/Src/builder/scumm/bl_akos.c117
-rw-r--r--backends/platform/PalmOS/Src/builder/scumm/bl_charset.c689
-rw-r--r--backends/platform/PalmOS/Src/builder/scumm/bl_costume.c44
-rw-r--r--backends/platform/PalmOS/Src/builder/scumm/bl_dialogs.c100
-rw-r--r--backends/platform/PalmOS/Src/builder/scumm/bl_gfx.c111
-rw-r--r--backends/platform/PalmOS/Src/builder/scumm/bl_md5.c432
-rw-r--r--backends/platform/PalmOS/Src/builder/scumm/bl_newgui.c47
-rw-r--r--backends/platform/PalmOS/Src/builder/scumm/bl_player_v2.c334
-rw-r--r--backends/platform/PalmOS/Src/builder/scumm/bl_scumm.c0
-rw-r--r--backends/platform/PalmOS/Src/builder/scumm/imuse_digi/bl_dimuse_codecs.c21
-rw-r--r--backends/platform/PalmOS/Src/builder/scumm/imuse_digi/bl_dimuse_tables.c921
-rw-r--r--backends/platform/PalmOS/Src/builder/scumm/smush/bl_codec47.c63
-rw-r--r--backends/platform/PalmOS/Src/builder/simon/bs_charset.c745
-rw-r--r--backends/platform/PalmOS/Src/builder/simon/bs_simon.c377
-rw-r--r--backends/platform/PalmOS/Src/builder/sky/sk_hufftext.c2031
-rw-r--r--backends/platform/PalmOS/Src/builder/sword1/sw1_staticres.c3576
-rw-r--r--backends/platform/PalmOS/Src/builder/sword1/sw1_staticres.h5201
-rw-r--r--backends/platform/PalmOS/Src/cd_aeroplayer.cpp166
-rw-r--r--backends/platform/PalmOS/Src/cd_aeroplayer.h64
-rw-r--r--backends/platform/PalmOS/Src/cd_default.cpp103
-rw-r--r--backends/platform/PalmOS/Src/cd_default.h49
-rw-r--r--backends/platform/PalmOS/Src/cd_msa.cpp260
-rw-r--r--backends/platform/PalmOS/Src/cd_msa.h66
-rw-r--r--backends/platform/PalmOS/Src/cd_pockettunes.cpp237
-rw-r--r--backends/platform/PalmOS/Src/cd_pockettunes.h67
-rw-r--r--backends/platform/PalmOS/Src/cdaudio.h65
-rw-r--r--backends/platform/PalmOS/Src/extend.cpp108
-rw-r--r--backends/platform/PalmOS/Src/extend.h34
-rw-r--r--backends/platform/PalmOS/Src/features.h17
-rw-r--r--backends/platform/PalmOS/Src/globals.h142
-rw-r--r--backends/platform/PalmOS/Src/i_zodiac.cpp41
-rw-r--r--backends/platform/PalmOS/Src/i_zodiac.h12
-rw-r--r--backends/platform/PalmOS/Src/init_golcd.cpp121
-rw-r--r--backends/platform/PalmOS/Src/init_golcd.h22
-rw-r--r--backends/platform/PalmOS/Src/init_mathlib.cpp29
-rw-r--r--backends/platform/PalmOS/Src/init_mathlib.h7
-rw-r--r--backends/platform/PalmOS/Src/init_pa1lib.cpp32
-rw-r--r--backends/platform/PalmOS/Src/init_pa1lib.h22
-rw-r--r--backends/platform/PalmOS/Src/init_palmos.cpp171
-rw-r--r--backends/platform/PalmOS/Src/init_palmos.h41
-rw-r--r--backends/platform/PalmOS/Src/init_sony.cpp162
-rw-r--r--backends/platform/PalmOS/Src/init_sony.h39
-rw-r--r--backends/platform/PalmOS/Src/init_stuffs.cpp130
-rw-r--r--backends/platform/PalmOS/Src/init_stuffs.h11
-rw-r--r--backends/platform/PalmOS/Src/launcher/app.cpp374
-rw-r--r--backends/platform/PalmOS/Src/launcher/forms/formCards.cpp378
-rw-r--r--backends/platform/PalmOS/Src/launcher/forms/formCards.h32
-rw-r--r--backends/platform/PalmOS/Src/launcher/forms/formEditGame.cpp611
-rw-r--r--backends/platform/PalmOS/Src/launcher/forms/formEditGame.h38
-rw-r--r--backends/platform/PalmOS/Src/launcher/forms/formMisc.cpp272
-rw-r--r--backends/platform/PalmOS/Src/launcher/forms/formSkins.cpp267
-rw-r--r--backends/platform/PalmOS/Src/launcher/forms/formUtil.cpp60
-rw-r--r--backends/platform/PalmOS/Src/launcher/forms/formUtil.h21
-rw-r--r--backends/platform/PalmOS/Src/launcher/forms/forminfo.cpp146
-rw-r--r--backends/platform/PalmOS/Src/launcher/forms/formmain.cpp363
-rw-r--r--backends/platform/PalmOS/Src/launcher/forms/formmusic.cpp387
-rw-r--r--backends/platform/PalmOS/Src/launcher/forms/forms.h22
-rw-r--r--backends/platform/PalmOS/Src/launcher/forms/formtabs.cpp242
-rw-r--r--backends/platform/PalmOS/Src/launcher/forms/formtabs.h24
-rw-r--r--backends/platform/PalmOS/Src/launcher/games.cpp530
-rw-r--r--backends/platform/PalmOS/Src/launcher/games.h201
-rw-r--r--backends/platform/PalmOS/Src/launcher/launch.cpp517
-rw-r--r--backends/platform/PalmOS/Src/launcher/skin.cpp611
-rw-r--r--backends/platform/PalmOS/Src/launcher/skin.h130
-rw-r--r--backends/platform/PalmOS/Src/launcher/start.cpp366
-rw-r--r--backends/platform/PalmOS/Src/launcher/start.h97
-rw-r--r--backends/platform/PalmOS/Src/missing/assert.h34
-rw-r--r--backends/platform/PalmOS/Src/missing/ext_stdio.c650
-rw-r--r--backends/platform/PalmOS/Src/missing/ext_stdlib.c117
-rw-r--r--backends/platform/PalmOS/Src/missing/ext_string.c45
-rw-r--r--backends/platform/PalmOS/Src/missing/ext_time.c85
-rw-r--r--backends/platform/PalmOS/Src/missing/ext_unistd.c41
-rw-r--r--backends/platform/PalmOS/Src/missing/fcntl.h42
-rw-r--r--backends/platform/PalmOS/Src/missing/math.h38
-rw-r--r--backends/platform/PalmOS/Src/missing/memory.h25
-rw-r--r--backends/platform/PalmOS/Src/missing/stdio.h103
-rw-r--r--backends/platform/PalmOS/Src/missing/stdlib.h88
-rw-r--r--backends/platform/PalmOS/Src/missing/string.h66
-rw-r--r--backends/platform/PalmOS/Src/missing/sys/stat.h1
-rw-r--r--backends/platform/PalmOS/Src/missing/time.h55
-rw-r--r--backends/platform/PalmOS/Src/missing/unistd.h42
-rw-r--r--backends/platform/PalmOS/Src/modules.cpp251
-rw-r--r--backends/platform/PalmOS/Src/modules.h22
-rw-r--r--backends/platform/PalmOS/Src/native/oscalls.cpp47
-rw-r--r--backends/platform/PalmOS/Src/native/oscalls.h40
-rw-r--r--backends/platform/PalmOS/Src/native/pace.h102
-rw-r--r--backends/platform/PalmOS/Src/native/pnoARM.c80
-rw-r--r--backends/platform/PalmOS/Src/native/pnoStartup.c27
-rw-r--r--backends/platform/PalmOS/Src/native/zodiacARM.cpp146
-rw-r--r--backends/platform/PalmOS/Src/native/zodiacStartup.cpp173
-rw-r--r--backends/platform/PalmOS/Src/os5_event.cpp86
-rw-r--r--backends/platform/PalmOS/Src/os5_gfx.cpp317
-rw-r--r--backends/platform/PalmOS/Src/os5_mouse.cpp175
-rw-r--r--backends/platform/PalmOS/Src/os5_overlay.cpp88
-rw-r--r--backends/platform/PalmOS/Src/os5_renderer.cpp156
-rw-r--r--backends/platform/PalmOS/Src/os5_sound.cpp143
-rw-r--r--backends/platform/PalmOS/Src/os5ex_sound.cpp37
-rw-r--r--backends/platform/PalmOS/Src/palm-scumm-md5.h9
-rw-r--r--backends/platform/PalmOS/Src/palmdefs.h21
-rw-r--r--backends/platform/PalmOS/Src/palmversion.h19
-rw-r--r--backends/platform/PalmOS/Src/prefixes/68k_agi.h9
-rw-r--r--backends/platform/PalmOS/Src/prefixes/68k_cine.h9
-rw-r--r--backends/platform/PalmOS/Src/prefixes/68k_gob.h9
-rw-r--r--backends/platform/PalmOS/Src/prefixes/68k_kyra.h9
-rw-r--r--backends/platform/PalmOS/Src/prefixes/68k_lure.h9
-rw-r--r--backends/platform/PalmOS/Src/prefixes/68k_queen.h9
-rw-r--r--backends/platform/PalmOS/Src/prefixes/68k_saga.h9
-rw-r--r--backends/platform/PalmOS/Src/prefixes/68k_scumm.h12
-rw-r--r--backends/platform/PalmOS/Src/prefixes/68k_simon.h9
-rw-r--r--backends/platform/PalmOS/Src/prefixes/68k_sky.h9
-rw-r--r--backends/platform/PalmOS/Src/prefixes/68k_sword1.h9
-rw-r--r--backends/platform/PalmOS/Src/prefixes/68k_sword2.h9
-rw-r--r--backends/platform/PalmOS/Src/prefixes/compile.h59
-rw-r--r--backends/platform/PalmOS/Src/prefixes/native_agi.h7
-rw-r--r--backends/platform/PalmOS/Src/prefixes/native_cine.h7
-rw-r--r--backends/platform/PalmOS/Src/prefixes/native_common.h21
-rw-r--r--backends/platform/PalmOS/Src/prefixes/native_gob.h7
-rw-r--r--backends/platform/PalmOS/Src/prefixes/native_kyra.h7
-rw-r--r--backends/platform/PalmOS/Src/prefixes/native_lure.h7
-rw-r--r--backends/platform/PalmOS/Src/prefixes/native_queen.h7
-rw-r--r--backends/platform/PalmOS/Src/prefixes/native_saga.h7
-rw-r--r--backends/platform/PalmOS/Src/prefixes/native_scumm.h9
-rw-r--r--backends/platform/PalmOS/Src/prefixes/native_simon.h7
-rw-r--r--backends/platform/PalmOS/Src/prefixes/native_sky.h7
-rw-r--r--backends/platform/PalmOS/Src/prefixes/native_sword1.h9
-rw-r--r--backends/platform/PalmOS/Src/prefixes/native_sword2.h10
-rw-r--r--backends/platform/PalmOS/Src/prefixes/prefix_frontend.h8
-rw-r--r--backends/platform/PalmOS/Src/prefixes/prefix_os5.h11
-rw-r--r--backends/platform/PalmOS/Src/prefixes/prefix_zodiac.h11
-rw-r--r--backends/platform/PalmOS/Src/rumble.cpp139
-rw-r--r--backends/platform/PalmOS/Src/rumble.h33
-rw-r--r--backends/platform/PalmOS/Src/scumm_globals.cpp155
-rw-r--r--backends/platform/PalmOS/Src/scumm_globals.h91
-rw-r--r--backends/platform/PalmOS/Src/snd_pa1.cpp113
-rw-r--r--backends/platform/PalmOS/Src/stuffs.h31
-rw-r--r--backends/platform/PalmOS/Src/vibrate.h61
-rw-r--r--backends/platform/PalmOS/Src/zodiac_event.cpp124
-rw-r--r--backends/platform/PalmOS/Src/zodiac_gfx.cpp322
-rw-r--r--backends/platform/PalmOS/Src/zodiac_mouse.cpp153
-rw-r--r--backends/platform/PalmOS/Src/zodiac_overlay.cpp79
-rw-r--r--backends/platform/PalmOS/scummvm.mcpbin0 -> 1425522 bytes
179 files changed, 35122 insertions, 0 deletions
diff --git a/backends/platform/PalmOS/Rsc/Resource.Frk/Starter.rsrc b/backends/platform/PalmOS/Rsc/Resource.Frk/Starter.rsrc
new file mode 100644
index 0000000000..026c42d300
--- /dev/null
+++ b/backends/platform/PalmOS/Rsc/Resource.Frk/Starter.rsrc
Binary files differ
diff --git a/backends/platform/PalmOS/Rsc/Resource.Frk/builder.rsrc b/backends/platform/PalmOS/Rsc/Resource.Frk/builder.rsrc
new file mode 100644
index 0000000000..18adade224
--- /dev/null
+++ b/backends/platform/PalmOS/Rsc/Resource.Frk/builder.rsrc
Binary files differ
diff --git a/backends/platform/PalmOS/Rsc/Starter.rsrc b/backends/platform/PalmOS/Rsc/Starter.rsrc
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/backends/platform/PalmOS/Rsc/Starter.rsrc
diff --git a/backends/platform/PalmOS/Rsc/StarterRsc.h b/backends/platform/PalmOS/Rsc/StarterRsc.h
new file mode 100644
index 0000000000..0f2d7476f2
--- /dev/null
+++ b/backends/platform/PalmOS/Rsc/StarterRsc.h
@@ -0,0 +1,392 @@
+#ifndef STARTERRSC_H
+#define STARTERRSC_H
+
+// Header generated by Constructor for Palm OS (R) 1.9.1
+//
+// Generated at 20:53:03 on lundi 5 juin 2006
+//
+// Generated for file: Starter.rsrc
+//
+// THIS IS AN AUTOMATICALLY GENERATED HEADER FILE
+// DO NOT EDIT - CHANGES MADE TO THIS FILE WILL BE LOST
+//
+// Palm App Name: "ScummVM"
+//
+// Palm App Version: "1.0"
+
+
+// Resource: tFRM 1000
+#define MainForm 1000 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 160, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 1000, Default Button ID = 0)
+#define MainCardsButton 1003 //(Left Origin = 135, Top Origin = 1, Width = 12, Height = 12, Usable = 1, Anchor Left = 1, Frame = 0, Non-bold Frame = 0, Font = Standard)
+#define MainAboutButton 1012 //(Left Origin = 148, Top Origin = 1, Width = 12, Height = 12, Usable = 1, Anchor Left = 1, Frame = 0, Non-bold Frame = 1, Font = Standard)
+#define MainMSBitMap 1100 //(Left Origin = 135, Top Origin = 1, Bitmap Resource ID = 1100, Usable = 0)
+#define MainMSNoneBitMap 1110 //(Left Origin = 135, Top Origin = 1, Bitmap Resource ID = 1110, Usable = 0)
+#define MainUnnamed1010BitMap 2000 //(Left Origin = 148, Top Origin = 1, Bitmap Resource ID = 2000, Usable = 1)
+
+// Resource: tFRM 1200
+#define SkinsForm 1200 //(Left Origin = 2, Top Origin = 2, Width = 156, Height = 156, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 1203)
+#define SkinsOKButton 1202 //(Left Origin = 5, Top Origin = 139, Width = 32, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard)
+#define SkinsCancelButton 1203 //(Left Origin = 43, Top Origin = 139, Width = 32, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard)
+#define SkinsDeleteButton 1205 //(Left Origin = 119, Top Origin = 139, Width = 32, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard)
+#define SkinsBeamButton 1206 //(Left Origin = 81, Top Origin = 139, Width = 32, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard)
+#define SkinsSoundClickCheckbox 1204 //(Left Origin = 5, Top Origin = 118, Width = 93, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard)
+#define SkinsSkinList 1201 //(Left Origin = 5, Top Origin = 17, Width = 146, Usable = 1, Font = Standard, Visible Items = 9)
+
+// Resource: tFRM 1500
+#define CardSlotForm 1500 //(Left Origin = 2, Top Origin = 2, Width = 156, Height = 156, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0)
+#define CardSlotOkButton 1510 //(Left Origin = 3, Top Origin = 140, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard)
+#define CardSlotCancelButton 1511 //(Left Origin = 44, Top Origin = 140, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard)
+
+// Resource: tFRM 2700
+#define MiscForm 2700 //(Left Origin = 2, Top Origin = 2, Width = 156, Height = 156, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0)
+#define MiscOKButton 2710 //(Left Origin = 5, Top Origin = 139, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard)
+#define MiscCancelButton 2711 //(Left Origin = 46, Top Origin = 139, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard)
+
+// Resource: tFRM 2000
+#define ConvertForm 2000 //(Left Origin = 34, Top Origin = 64, Width = 91, Height = 32, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0)
+#define ConvertUnnamed2001Label 2001 //(Left Origin = 7, Top Origin = 4, Usable = 1, Font = Standard)
+#define ConvertUnnamed2002Label 2002 //(Left Origin = 16, Top Origin = 16, Usable = 1, Font = Bold)
+
+// Resource: tFRM 2100
+#define BeamForm 2100 //(Left Origin = 2, Top Origin = 72, Width = 156, Height = 86, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0)
+#define BeamSendButton 2105 //(Left Origin = 5, Top Origin = 69, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard)
+#define BeamCancelButton 2106 //(Left Origin = 47, Top Origin = 69, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard)
+#define BeamMathlibCheckbox 2101 //(Left Origin = 4, Top Origin = 28, Width = 55, Height = 12, Usable = 1, Selected = 1, Group ID = 0, Font = Standard)
+#define BeamGamesCheckbox 2103 //(Left Origin = 4, Top Origin = 40, Width = 86, Height = 12, Usable = 1, Selected = 1, Group ID = 0, Font = Standard)
+#define BeamSkinCheckbox 2104 //(Left Origin = 4, Top Origin = 52, Width = 84, Height = 12, Usable = 1, Selected = 1, Group ID = 0, Font = Standard)
+#define BeamUnnamed2102Label 2102 //(Left Origin = 4, Top Origin = 16, Usable = 1, Font = Bold)
+
+// Resource: tFRM 2200
+#define MusicForm 2200 //(Left Origin = 2, Top Origin = 2, Width = 156, Height = 156, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0)
+#define MusicOKButton 2210 //(Left Origin = 5, Top Origin = 139, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard)
+#define MusicCancelButton 2211 //(Left Origin = 46, Top Origin = 139, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard)
+
+// Resource: tFRM 2300
+#define TabMusicForm 2300 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 120, Usable = 0, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0)
+#define TabMusicMusicCheckbox 2301 //(Left Origin = 4, Top Origin = 12, Width = 100, Height = 12, Usable = 1, Selected = 1, Group ID = 0, Font = Standard)
+#define TabMusicMultiMidiCheckbox 2308 //(Left Origin = 4, Top Origin = 24, Width = 120, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard)
+#define TabMusicTempoField 2302 //(Left Origin = 54, Top Origin = 36, Width = 16, Height = 12, Usable = 1, Editable = 1, Underline = 1, Single Line = 1, Dynamic Size = 0, Left Justified = 1, Max Characters = 3, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 1)
+#define TabMusicTitleLabel 2303 //(Left Origin = 6, Top Origin = 0, Usable = 1, Font = Bold)
+#define TabMusicUnnamed2304Label 2304 //(Left Origin = 21, Top Origin = 48, Usable = 1, Font = Standard)
+#define TabMusicUnnamed2305Label 2305 //(Left Origin = 16, Top Origin = 60, Usable = 1, Font = Standard)
+#define TabMusicUnnamed2306Label 2306 //(Left Origin = 18, Top Origin = 36, Usable = 1, Font = Standard)
+#define TabMusicUnnamed2307Label 2307 //(Left Origin = 72, Top Origin = 36, Usable = 1, Font = Standard)
+#define TabMusicUnnamed2309Label 2309 //(Left Origin = 28, Top Origin = 72, Usable = 1, Font = Standard)
+#define TabMusicRateList 2311 //(Left Origin = 54, Top Origin = 73, Width = 55, Usable = 0, Font = Standard, Visible Items = 3)
+#define TabMusicQualityList 2313 //(Left Origin = 54, Top Origin = 60, Width = 60, Usable = 0, Font = Standard, Visible Items = 3)
+#define TabMusicDriverList 2331 //(Left Origin = 54, Top Origin = 24, Width = 65, Usable = 0, Font = Standard, Visible Items = 4)
+#define TabMusicRatePopTrigger 2310 //(Left Origin = 54, Top Origin = 72, Width = 55, Height = 12, Usable = 1, Anchor Left = 1, Font = Standard, List ID = 2311)
+#define TabMusicQualityPopTrigger 2312 //(Left Origin = 54, Top Origin = 60, Width = 50, Height = 12, Usable = 1, Anchor Left = 1, Font = Standard, List ID = 2313)
+#define TabMusicDriverPopTrigger 2330 //(Left Origin = 54, Top Origin = 48, Width = 65, Height = 12, Usable = 1, Anchor Left = 1, Font = Standard, List ID = 2331)
+
+// Resource: tFRM 2500
+#define TabAudioCDForm 2500 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 110, Usable = 0, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0)
+#define TabAudioCDMP3Checkbox 2502 //(Left Origin = 4, Top Origin = 12, Width = 125, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard)
+#define TabAudioCDLengthSecsField 2504 //(Left Origin = 112, Top Origin = 60, Width = 16, Height = 12, Usable = 1, Editable = 1, Underline = 1, Single Line = 1, Dynamic Size = 0, Left Justified = 1, Max Characters = 3, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 1)
+#define TabAudioCDFirstTrackField 2507 //(Left Origin = 112, Top Origin = 50, Width = 16, Height = 12, Usable = 1, Editable = 1, Underline = 1, Single Line = 1, Dynamic Size = 0, Left Justified = 1, Max Characters = 80, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 1)
+#define TabAudioCDUnnamed2501Label 2501 //(Left Origin = 6, Top Origin = 0, Usable = 1, Font = Bold)
+#define TabAudioCDUnnamed2503Label 2503 //(Left Origin = 20, Top Origin = 60, Usable = 1, Font = Standard)
+#define TabAudioCDUnnamed2505Label 2505 //(Left Origin = 130, Top Origin = 61, Usable = 1, Font = Standard)
+#define TabAudioCDUnnamed2506Label 2506 //(Left Origin = 21, Top Origin = 48, Usable = 1, Font = Standard)
+#define TabAudioCDUnnamed2508Label 2508 //(Left Origin = 25, Top Origin = 24, Usable = 1, Font = Standard)
+#define TabAudioCDUnnamed2511Label 2511 //(Left Origin = 21, Top Origin = 36, Usable = 1, Font = Standard)
+#define TabAudioCDUnnamed2514Label 2514 //(Left Origin = 4, Top Origin = 80, Usable = 1, Font = Standard)
+#define TabAudioCDDriverList 2510 //(Left Origin = 58, Top Origin = 24, Width = 90, Usable = 0, Font = Standard, Visible Items = 4)
+#define TabAudioCDFormatList 2513 //(Left Origin = 58, Top Origin = 36, Width = 70, Usable = 0, Font = Standard, Visible Items = 2)
+#define TabAudioCDDriverPopTrigger 2509 //(Left Origin = 58, Top Origin = 24, Width = 90, Height = 12, Usable = 1, Anchor Left = 1, Font = Standard, List ID = 2510)
+#define TabAudioCDFormatPopTrigger 2512 //(Left Origin = 58, Top Origin = 36, Width = 70, Height = 12, Usable = 1, Anchor Left = 1, Font = Standard, List ID = 2513)
+
+// Resource: tFRM 2600
+#define TabVolumeForm 2600 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 100, Usable = 0, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0)
+#define TabVolumeUnnamed2601Label 2601 //(Left Origin = 29, Top Origin = 69, Usable = 1, Font = Standard)
+#define TabVolumeUnnamed2603Label 2603 //(Left Origin = 6, Top Origin = 0, Usable = 1, Font = Bold)
+#define TabVolumeUnnamed2606Label 2606 //(Left Origin = 26, Top Origin = 15, Usable = 1, Font = Standard)
+#define TabVolumeUnnamed2607Label 2607 //(Left Origin = 12, Top Origin = 30, Usable = 1, Font = Standard)
+#define TabVolumeUnnamed2608Label 2608 //(Left Origin = 20, Top Origin = 45, Usable = 1, Font = Standard)
+#define TabVolumeUnnamed2610Label 2610 //(Left Origin = 14, Top Origin = 84, Usable = 1, Font = Standard)
+#define TabVolumeMusicSliderControl 2602 //(Left Origin = 58, Top Origin = 12, Width = 93, Height = 15, Usable = 1, Initial Value = 0, Minimum Value = 0, Maximum Value = 255, Page Jump Amount = 1, Thumb Bitmap = 0, Background Bitmap = 0)
+#define TabVolumeSfxSliderControl 2604 //(Left Origin = 58, Top Origin = 27, Width = 93, Height = 15, Usable = 1, Initial Value = 0, Minimum Value = 0, Maximum Value = 255, Page Jump Amount = 1, Thumb Bitmap = 0, Background Bitmap = 0)
+#define TabVolumePalmSliderControl 2605 //(Left Origin = 58, Top Origin = 66, Width = 93, Height = 15, Usable = 1, Initial Value = 0, Minimum Value = 0, Maximum Value = 100, Page Jump Amount = 1, Thumb Bitmap = 0, Background Bitmap = 0)
+#define TabVolumeSpeechSliderControl 2609 //(Left Origin = 58, Top Origin = 42, Width = 93, Height = 15, Usable = 1, Initial Value = 0, Minimum Value = 0, Maximum Value = 255, Page Jump Amount = 1, Thumb Bitmap = 0, Background Bitmap = 0)
+#define TabVolumeAudioCDSliderControl 2611 //(Left Origin = 58, Top Origin = 81, Width = 93, Height = 15, Usable = 1, Initial Value = 0, Minimum Value = 0, Maximum Value = 100, Page Jump Amount = 1, Thumb Bitmap = 0, Background Bitmap = 0)
+
+// Resource: tFRM 2800
+#define TabMiscPalmOSForm 2800 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 120, Usable = 0, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0)
+#define TabMiscPalmOSVibratorCheckbox 2802 //(Left Origin = 4, Top Origin = 12, Width = 128, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard)
+#define TabMiscPalmOSNoAutoOffCheckbox 2803 //(Left Origin = 4, Top Origin = 24, Width = 152, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard)
+#define TabMiscPalmOSStdPaletteCheckbox 2804 //(Left Origin = 4, Top Origin = 84, Width = 146, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard)
+#define TabMiscPalmOSLargerStackCheckbox 2805 //(Left Origin = 4, Top Origin = 36, Width = 100, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard)
+#define TabMiscPalmOSAdvancedCheckbox 2806 //(Left Origin = 4, Top Origin = 96, Width = 100, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard)
+#define TabMiscPalmOSArrowCheckbox 2807 //(Left Origin = 4, Top Origin = 72, Width = 150, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard)
+#define TabMiscPalmOSExitLauncherCheckbox 2810 //(Left Origin = 4, Top Origin = 48, Width = 150, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard)
+#define TabMiscPalmOSStylusClickCheckbox 2811 //(Left Origin = 4, Top Origin = 60, Width = 120, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard)
+#define TabMiscPalmOSTabTitlePalmLabel 2801 //(Left Origin = 4, Top Origin = 0, Usable = 1, Font = Bold)
+
+// Resource: tFRM 2900
+#define TabMiscScummVMForm 2900 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 90, Usable = 0, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0)
+#define TabMiscScummVMAutosaveCheckbox 2902 //(Left Origin = 4, Top Origin = 24, Width = 90, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard)
+#define TabMiscScummVMDebugCheckbox 2904 //(Left Origin = 4, Top Origin = 12, Width = 90, Height = 12, Usable = 0, Selected = 0, Group ID = 0, Font = Standard)
+#define TabMiscScummVMDemoCheckbox 2905 //(Left Origin = 4, Top Origin = 36, Width = 100, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard)
+#define TabMiscScummVMCopyProtectionCheckbox 2906 //(Left Origin = 4, Top Origin = 48, Width = 120, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard)
+#define TabMiscScummVMAltIntroCheckbox 2908 //(Left Origin = 4, Top Origin = 60, Width = 120, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard)
+#define TabMiscScummVMDebugLevelField 2907 //(Left Origin = 101, Top Origin = 12, Width = 12, Height = 12, Usable = 1, Editable = 1, Underline = 1, Single Line = 1, Dynamic Size = 0, Left Justified = 1, Max Characters = 1, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 1)
+#define TabMiscScummVMAutosaveField 2910 //(Left Origin = 101, Top Origin = 24, Width = 20, Height = 12, Usable = 1, Editable = 1, Underline = 1, Single Line = 1, Dynamic Size = 0, Left Justified = 1, Max Characters = 4, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 1)
+#define TabMiscScummVMTabTitleScummLabel 2901 //(Left Origin = 4, Top Origin = 0, Usable = 1, Font = Bold)
+#define TabMiscScummVMUnnamed2903Label 2903 //(Left Origin = 97, Top Origin = 12, Usable = 1, Font = Standard)
+#define TabMiscScummVMUnnamed2909Label 2909 //(Left Origin = 97, Top Origin = 24, Usable = 1, Font = Standard)
+#define TabMiscScummVMUnnamed2911Label 2911 //(Left Origin = 123, Top Origin = 24, Usable = 1, Font = Standard)
+
+// Resource: tFRM 3000
+#define GameEditForm 3000 //(Left Origin = 2, Top Origin = 2, Width = 156, Height = 156, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 1411)
+#define GameEditOKButton 3020 //(Left Origin = 5, Top Origin = 139, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard)
+#define GameEditCancelButton 3021 //(Left Origin = 46, Top Origin = 139, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard)
+#define GameEditDeleteButton 3023 //(Left Origin = 109, Top Origin = 139, Width = 42, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard)
+#define GameEditUnnamed3022GraffitiShift 3022 //(Left Origin = 87, Top Origin = 140)
+
+// Resource: tFRM 3100
+#define TabGameInfoForm 3100 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 120, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0)
+#define TabGameInfoEntryNameField 3102 //(Left Origin = 4, Top Origin = 12, Width = 151, Height = 24, Usable = 1, Editable = 1, Underline = 1, Single Line = 0, Dynamic Size = 0, Left Justified = 1, Max Characters = 50, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 0)
+#define TabGameInfoPathField 3104 //(Left Origin = 37, Top Origin = 38, Width = 118, Height = 24, Usable = 1, Editable = 1, Underline = 1, Single Line = 0, Dynamic Size = 0, Left Justified = 1, Max Characters = 150, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 0)
+#define TabGameInfoGameField 3106 //(Left Origin = 37, Top Origin = 64, Width = 52, Height = 12, Usable = 1, Editable = 1, Underline = 1, Single Line = 1, Dynamic Size = 0, Left Justified = 1, Max Characters = 15, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 0)
+#define TabGameInfoUnnamed3101Label 3101 //(Left Origin = 4, Top Origin = 0, Usable = 1, Font = Bold)
+#define TabGameInfoUnnamed3103Label 3103 //(Left Origin = 11, Top Origin = 38, Usable = 1, Font = Standard)
+#define TabGameInfoUnnamed3105Label 3105 //(Left Origin = 6, Top Origin = 64, Usable = 1, Font = Standard)
+#define TabGameInfoUnnamed3107Label 3107 //(Left Origin = 4, Top Origin = 79, Usable = 1, Font = Standard)
+#define TabGameInfoEngineList 3109 //(Left Origin = 37, Top Origin = 57, Width = 115, Usable = 0, Font = Standard, Visible Items = 3)
+#define TabGameInfoBrowsePushButton 3110 //(Left Origin = 11, Top Origin = 50, Width = 22, Height = 12, Usable = 1, Group ID = 0, Font = Standard)
+#define TabGameInfoEnginePopTrigger 3108 //(Left Origin = 37, Top Origin = 79, Width = 115, Height = 12, Usable = 1, Anchor Left = 1, Font = Standard, List ID = 3109)
+
+// Resource: tFRM 3200
+#define TabGameDisplayForm 3200 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 95, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0)
+#define TabGameDisplayFilterCheckbox 3205 //(Left Origin = 4, Top Origin = 36, Width = 80, Height = 12, Usable = 1, Selected = 1, Group ID = 0, Font = Standard)
+#define TabGameDisplayFullscreenCheckbox 3206 //(Left Origin = 4, Top Origin = 60, Width = 100, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard)
+#define TabGameDisplayAspectRatioCheckbox 3207 //(Left Origin = 4, Top Origin = 48, Width = 120, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard)
+#define TabGameDisplayUnnamed3201Label 3201 //(Left Origin = 4, Top Origin = 0, Usable = 1, Font = Bold)
+#define TabGameDisplayUnnamed3202Label 3202 //(Left Origin = 5, Top Origin = 24, Usable = 1, Font = Standard)
+#define TabGameDisplayUnnamed3208Label 3208 //(Left Origin = 10, Top Origin = 12, Usable = 1, Font = Standard)
+#define TabGameDisplayGfxListList 3204 //(Left Origin = 38, Top Origin = 12, Width = 75, Usable = 0, Font = Standard, Visible Items = 2)
+#define TabGameDisplayRenderList 3210 //(Left Origin = 38, Top Origin = 24, Width = 75, Usable = 0, Font = Standard, Visible Items = 6)
+#define TabGameDisplayGfxPopupPopTrigger 3203 //(Left Origin = 38, Top Origin = 12, Width = 80, Height = 12, Usable = 1, Anchor Left = 1, Font = Standard, List ID = 3204)
+#define TabGameDisplayRenderPopTrigger 3209 //(Left Origin = 38, Top Origin = 24, Width = 85, Height = 12, Usable = 1, Anchor Left = 1, Font = Standard, List ID = 3209)
+
+// Resource: tFRM 3300
+#define TabGameOptionsForm 3300 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 160, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0)
+#define TabGameOptionsLoadSlotCheckbox 3302 //(Left Origin = 4, Top Origin = 24, Width = 85, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard)
+#define TabGameOptionsStartRoomCheckbox 3303 //(Left Origin = 4, Top Origin = 36, Width = 84, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard)
+#define TabGameOptionsAmigaCheckbox 3306 //(Left Origin = 4, Top Origin = 48, Width = 81, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard)
+#define TabGameOptionsSubtitlesCheckbox 3307 //(Left Origin = 4, Top Origin = 60, Width = 82, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard)
+#define TabGameOptionsTalkSpeedCheckbox 3308 //(Left Origin = 4, Top Origin = 12, Width = 66, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard)
+#define TabGameOptionsLoadSlotField 3304 //(Left Origin = 92, Top Origin = 24, Width = 12, Height = 12, Usable = 1, Editable = 1, Underline = 1, Single Line = 1, Dynamic Size = 0, Left Justified = 1, Max Characters = 2, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 1)
+#define TabGameOptionsStartRoomField 3305 //(Left Origin = 92, Top Origin = 36, Width = 18, Height = 12, Usable = 1, Editable = 1, Underline = 1, Single Line = 1, Dynamic Size = 0, Left Justified = 1, Max Characters = 4, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 1)
+#define TabGameOptionsTalkSpeedField 3309 //(Left Origin = 92, Top Origin = 12, Width = 18, Height = 12, Usable = 1, Editable = 1, Underline = 1, Single Line = 1, Dynamic Size = 0, Left Justified = 1, Max Characters = 3, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 1)
+#define TabGameOptionsUnnamed3301Label 3301 //(Left Origin = 4, Top Origin = 0, Usable = 1, Font = Bold)
+#define TabGameOptionsUnnamed3314Label 3314 //(Left Origin = 88, Top Origin = 24, Usable = 1, Font = Standard)
+#define TabGameOptionsUnnamed3315Label 3315 //(Left Origin = 88, Top Origin = 36, Usable = 1, Font = Standard)
+#define TabGameOptionsUnnamed3316Label 3316 //(Left Origin = 88, Top Origin = 12, Usable = 1, Font = Standard)
+#define TabGameOptionsUnnamed3317Label 3317 //(Left Origin = 88, Top Origin = 48, Usable = 1, Font = Standard)
+#define TabGameOptionsUnnamed3318Label 3318 //(Left Origin = 88, Top Origin = 60, Usable = 1, Font = Standard)
+#define TabGameOptionsLanguageList 3311 //(Left Origin = 92, Top Origin = 15, Width = 64, Usable = 0, Font = Standard, Visible Items = 5)
+#define TabGameOptionsPlatformList 3313 //(Left Origin = 92, Top Origin = 15, Width = 64, Usable = 0, Font = Standard, Visible Items = 4)
+#define TabGameOptionsLanguagePopTrigger 3310 //(Left Origin = 90, Top Origin = 60, Width = 65, Height = 12, Usable = 1, Anchor Left = 1, Font = Standard, List ID = 3311)
+#define TabGameOptionsPlatformPopTrigger 3312 //(Left Origin = 90, Top Origin = 48, Width = 65, Height = 12, Usable = 1, Anchor Left = 1, Font = Standard, List ID = 3313)
+
+// Resource: tFRM 3400
+#define ImportForm 3400 //(Left Origin = 34, Top Origin = 64, Width = 91, Height = 32, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0)
+#define ImportUnnamed3401Label 3401 //(Left Origin = 4, Top Origin = 4, Usable = 1, Font = Standard)
+#define ImportUnnamed3402Label 3402 //(Left Origin = 16, Top Origin = 16, Usable = 1, Font = Bold)
+
+// Resource: tFRM 1400
+#define EngineForm 1400 //(Left Origin = 2, Top Origin = 2, Width = 156, Height = 156, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0)
+#define EngineOkButton 1403 //(Left Origin = 4, Top Origin = 139, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard)
+#define EngineCancelButton 1420 //(Left Origin = 45, Top Origin = 139, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard)
+#define EngineUnnamed1402Label 1402 //(Left Origin = 4, Top Origin = 16, Usable = 1, Font = Bold)
+#define EngineListList 1401 //(Left Origin = 4, Top Origin = 30, Width = 148, Usable = 1, Font = Standard, Visible Items = 9)
+
+// Resource: tFRM 4000
+#define InfoForm 4000 //(Left Origin = 2, Top Origin = 2, Width = 156, Height = 156, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0)
+#define InfoOKButton 4020 //(Left Origin = 5, Top Origin = 139, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard)
+
+// Resource: tFRM 4100
+#define TabInfoAboutForm 4100 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 125, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0)
+#define TabInfoAboutTabTitleAboutLabel 4101 //(Left Origin = 4, Top Origin = 0, Usable = 1, Font = Bold)
+#define TabInfoAboutUnnamed4103Label 4103 //(Left Origin = 23, Top Origin = 58, Usable = 1, Font = Bold)
+#define TabInfoAboutUnnamed4104Label 4104 //(Left Origin = 34, Top Origin = 70, Usable = 1, Font = Standard)
+#define TabInfoAboutUnnamed4105Label 4105 //(Left Origin = 8, Top Origin = 82, Usable = 1, Font = Bold)
+
+// Resource: tFRM 4200
+#define TabInfoVersionForm 4200 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 100, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0)
+#define TabInfoVersionTabTitleAboutLabel 4201 //(Left Origin = 4, Top Origin = 0, Usable = 1, Font = Bold)
+#define TabInfoVersionUnnamed4202Label 4202 //(Left Origin = 10, Top Origin = 12, Usable = 1, Font = Standard)
+#define TabInfoVersionUnnamed4203Label 4203 //(Left Origin = 24, Top Origin = 24, Usable = 1, Font = Standard)
+#define TabInfoVersionUnnamed4204Label 4204 //(Left Origin = 4, Top Origin = 42, Usable = 1, Font = Bold)
+#define TabInfoVersionUnnamed4205Label 4205 //(Left Origin = 5, Top Origin = 53, Usable = 1, Font = Standard)
+#define TabInfoVersionUnnamed4206Label 4206 //(Left Origin = 4, Top Origin = 72, Usable = 1, Font = Bold)
+#define TabInfoVersionUnnamed4207Label 4207 //(Left Origin = 4, Top Origin = 84, Usable = 1, Font = Standard)
+
+// Resource: tFRM 4300
+#define TabInfoSystemForm 4300 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 100, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0)
+#define TabInfoSystemTabTitleAboutLabel 4301 //(Left Origin = 4, Top Origin = 0, Usable = 1, Font = Bold)
+#define TabInfoSystemUnnamed4302Label 4302 //(Left Origin = 10, Top Origin = 12, Usable = 1, Font = Standard)
+#define TabInfoSystemUnnamed4303Label 4303 //(Left Origin = 13, Top Origin = 24, Usable = 1, Font = Standard)
+#define TabInfoSystemUnnamed4304Label 4304 //(Left Origin = 5, Top Origin = 36, Usable = 1, Font = Standard)
+#define TabInfoSystemUnnamed4305Label 4305 //(Left Origin = 96, Top Origin = 0, Usable = 1, Font = Standard)
+#define TabInfoSystemUnnamed4306Label 4306 //(Left Origin = 132, Top Origin = 0, Usable = 1, Font = Standard)
+
+// Resource: tFRM 1600
+#define TabCardConfigForm 1600 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 110, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0)
+#define TabCardConfigCacheCheckbox 1604 //(Left Origin = 4, Top Origin = 62, Width = 120, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard)
+#define TabCardConfigLedCheckbox 1608 //(Left Origin = 4, Top Origin = 50, Width = 130, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard)
+#define TabCardConfigCacheSizeField 1606 //(Left Origin = 68, Top Origin = 74, Width = 18, Height = 12, Usable = 1, Editable = 1, Underline = 1, Single Line = 1, Dynamic Size = 0, Left Justified = 1, Max Characters = 3, Font = Standard, Auto Shift = 0, Has Scroll Bar = 0, Numeric = 1)
+#define TabCardConfigTabTitleAboutLabel 1601 //(Left Origin = 4, Top Origin = 0, Usable = 1, Font = Bold)
+#define TabCardConfigUnnamed1605Label 1605 //(Left Origin = 21, Top Origin = 74, Usable = 1, Font = Standard)
+#define TabCardConfigUnnamed1607Label 1607 //(Left Origin = 88, Top Origin = 74, Usable = 1, Font = Standard)
+#define TabCardConfigSlotList 1620 //(Left Origin = 7, Top Origin = 14, Width = 146, Usable = 1, Font = Standard, Visible Items = 3)
+
+// Resource: tFRM 1700
+#define TabCardGameListForm 1700 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 100, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0)
+#define TabCardGameListMoveCheckbox 1702 //(Left Origin = 4, Top Origin = 12, Width = 143, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard)
+#define TabCardGameListDeleteCheckbox 1703 //(Left Origin = 4, Top Origin = 24, Width = 142, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard)
+#define TabCardGameListConfirmCheckbox 1704 //(Left Origin = 4, Top Origin = 36, Width = 152, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard)
+#define TabCardGameListUnnamed1701Label 1701 //(Left Origin = 4, Top Origin = 0, Usable = 1, Font = Bold)
+
+// Resource: tFRM 3500
+#define TabMiscExtsForm 3500 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 80, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0)
+#define TabMiscExtsLightspeedCheckbox 3502 //(Left Origin = 4, Top Origin = 24, Width = 95, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard)
+#define TabMiscExtsGolcdCheckbox 3505 //(Left Origin = 4, Top Origin = 12, Width = 120, Height = 12, Usable = 1, Selected = 0, Group ID = 0, Font = Standard)
+#define TabMiscExtsTabTitleMoreLabel 3501 //(Left Origin = 4, Top Origin = 0, Usable = 1, Font = Bold)
+#define TabMiscExtsNothingLabel 3506 //(Left Origin = 4, Top Origin = 36, Usable = 0, Font = Standard)
+#define TabMiscExtsLightspeedList 3504 //(Left Origin = 96, Top Origin = 24, Width = 50, Usable = 0, Font = Standard, Visible Items = 3)
+#define TabMiscExtsLightspeedPopTrigger 3503 //(Left Origin = 96, Top Origin = 24, Width = 60, Height = 12, Usable = 1, Anchor Left = 1, Font = Standard, List ID = 3504)
+
+
+// Resource: Talt 1001
+#define RomIncompatibleAlert 1001
+#define RomIncompatibleOK 0
+
+// Resource: Talt 1000
+#define FrmWarnAlert 1000
+#define FrmWarnOK 0
+
+// Resource: Talt 1100
+#define FrmErrorAlert 1100
+#define FrmErrorCancel 0
+
+// Resource: Talt 1300
+#define FrmConfirmAlert 1300
+#define FrmConfirmYes 0
+#define FrmConfirmNo 1
+
+// Resource: Talt 1400
+#define FrmInfoAlert 1400
+#define FrmInfoOK 0
+
+
+// Resource: MBAR 1000
+#define MainFormMenuBar 1000
+
+
+// Resource: MENU 1000
+#define MainOptionsMenu 1000
+#define MainOptionsMisc 1000 // Command Key: I
+#define MainOptionsSkins 1001
+#define MainOptionsBeam 1003
+#define MainOptionsAbout 1005
+
+// Resource: MENU 1100
+#define MainGamesMenu 1100
+#define MainGamesNew 1100 // Command Key: N
+#define MainGamesEdit 1101 // Command Key: E
+#define MainGamesMusicSound 1102 // Command Key: M
+#define MainGamesDelete 1103
+#define MainGamesMemoryCard 1105 // Command Key: C
+
+
+// Resource: tSTR 9991
+#define ClieCatString 9991 // "32779"
+
+// Resource: tSTR 9990
+#define ClieDescString 9990 // "Play your favorite Point'n'Click games"
+
+
+// Resource: PICT 1001
+#define Bitmap 1001
+
+// Resource: PICT 1002
+#define Bitmap2 1002
+
+// Resource: PICT 1008
+#define Bitmap3 1008
+
+// Resource: PICT 1011
+#define Bitmap4 1011
+
+// Resource: PICT 1012
+#define Bitmap5 1012
+
+// Resource: PICT 1018
+#define Bitmap6 1018
+
+// Resource: PICT 2000
+#define infoBitmap 2000
+
+// Resource: PICT 1100
+#define msOnBitmap 1100
+
+// Resource: PICT 1009
+#define Bitmap7 1009
+
+// Resource: PICT 1010
+#define Bitmap8 1010
+
+// Resource: PICT 1110
+#define msNoneBitmap 1110
+
+// Resource: PICT 1020
+#define BitmapID1020Bitmap 1020
+
+// Resource: PICT 1019
+#define BitmapID1019Bitmap 1019
+
+// Resource: PICT 1200
+#define msOnD2Bitmap 1200
+
+// Resource: PICT 1300
+#define msNoneD2Bitmap 1300
+
+// Resource: PICT 2100
+#define infoD2Bitmap 2100
+
+// Resource: PICT 1501
+#define ScummVMlogoD1Bitmap 1501
+
+// Resource: PICT 1502
+#define ScummVMlogoD2Bitmap 1502
+
+// Resource: PICT 1000
+#define icon16bitD2Bitmap 1000
+
+
+// Resource: tbmf 1000
+#define Icon_infoBitmapFamily 1000
+
+// Resource: tbmf 1100
+#define MsOnBitmapFamily 1100
+
+// Resource: tbmf 2000
+#define InfoBitmapFamily 2000
+
+// Resource: tbmf 1110
+#define MsNoneBitmapFamily 1110
+
+// Resource: tbmf 1200
+#define LogoBitmapFamily 1200
+
+
+// Resource: taif 1000
+#define Largeicons12and8bitsAppIconFamily 1000
+
+// Resource: taif 1001
+#define Smallicons12and8bitsAppIconFamily 1001
+
+
+#endif // STARTERRSC_H
diff --git a/backends/platform/PalmOS/Rsc/batLow.bmp b/backends/platform/PalmOS/Rsc/batLow.bmp
new file mode 100644
index 0000000000..1d18131450
--- /dev/null
+++ b/backends/platform/PalmOS/Rsc/batLow.bmp
Binary files differ
diff --git a/backends/platform/PalmOS/Rsc/builder.rsrc b/backends/platform/PalmOS/Rsc/builder.rsrc
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/backends/platform/PalmOS/Rsc/builder.rsrc
diff --git a/backends/platform/PalmOS/Rsc/builderrsc.h b/backends/platform/PalmOS/Rsc/builderrsc.h
new file mode 100644
index 0000000000..ae91f3b924
--- /dev/null
+++ b/backends/platform/PalmOS/Rsc/builderrsc.h
@@ -0,0 +1,93 @@
+#ifndef BUILDERRSC_H
+#define BUILDERRSC_H
+
+// Header generated by Constructor for Palm OS (R) 1.9.1
+//
+// Generated at 17:44:44 on mardi 16 mars 2004
+//
+// Generated for file: Builder.rsrc
+//
+// THIS IS AN AUTOMATICALLY GENERATED HEADER FILE
+// DO NOT EDIT - CHANGES MADE TO THIS FILE WILL BE LOST
+//
+// Palm App Name: "ScummBuilder"
+//
+// Palm App Version: "1.0"
+
+
+// Resource: tFRM 1000
+#define MainForm 1000 //(Left Origin = 0, Top Origin = 0, Width = 160, Height = 160, Usable = 1, Modal = 0, Save Behind = 0, Help ID = 0, Menu Bar ID = 1000, Default Button ID = 0)
+#define MainBuildButton 1001 //(Left Origin = 58, Top Origin = 138, Width = 36, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard)
+#define MainUnnamed1002Label 1002 //(Left Origin = 0, Top Origin = 17, Usable = 1, Font = Standard)
+
+// Resource: tFRM 1100
+#define AboutForm 1100 //(Left Origin = 2, Top Origin = 2, Width = 156, Height = 156, Usable = 1, Modal = 1, Save Behind = 1, Help ID = 0, Menu Bar ID = 0, Default Button ID = 0)
+#define AboutOKButton 1105 //(Left Origin = 58, Top Origin = 133, Width = 40, Height = 12, Usable = 1, Anchor Left = 1, Frame = 1, Non-bold Frame = 1, Font = Standard)
+#define AboutTitleLabel 1102 //(Left Origin = 61, Top Origin = 23, Usable = 1, Font = Large)
+#define AboutText1Label 1103 //(Left Origin = 23, Top Origin = 54, Usable = 1, Font = Standard)
+#define AboutText2Label 1104 //(Left Origin = 50, Top Origin = 104, Usable = 1, Font = Bold)
+
+
+// Resource: Talt 1001
+#define RomIncompatibleAlert 1001
+#define RomIncompatibleOK 0
+
+// Resource: Talt 1000
+#define TestAlert 1000
+#define TestOK 0
+
+
+// Resource: MBAR 1000
+#define MainFormMenuBar 1000
+
+
+// Resource: MENU 1000
+#define MainOptionsMenu 1000
+#define MainOptionsAboutStarterApp 1000
+
+
+// Resource: PICT 1001
+#define Largeicon1bitBitmap 1001
+
+// Resource: PICT 1002
+#define Largeicon2bitBitmap 1002
+
+// Resource: PICT 1008
+#define Largeicon8bitBitmap 1008
+
+// Resource: PICT 1011
+#define Smallicon1bitBitmap 1011
+
+// Resource: PICT 1012
+#define Smallicon2bitBitmap 1012
+
+// Resource: PICT 1018
+#define Smallicon8bitBitmap 1018
+
+// Resource: PICT 21001
+#define LargeiconX21bitBitmap 21001
+
+// Resource: PICT 21002
+#define LargeiconX22bitBitmap 21002
+
+// Resource: PICT 21008
+#define LargeiconX28bitBitmap 21008
+
+// Resource: PICT 21011
+#define SmalliconX21bitBitmap 21011
+
+// Resource: PICT 21018
+#define SmalliconX28bitBitmap 21018
+
+// Resource: PICT 21012
+#define SmalliconX22bitBitmap 21012
+
+
+// Resource: taif 1000
+#define Largeicons12and8bitsAppIconFamily 1000
+
+// Resource: taif 1001
+#define Smallicons12and8bitsAppIconFamily 1001
+
+
+#endif // BUILDERRSC_H
diff --git a/backends/platform/PalmOS/Rsc/keyAlt.bmp b/backends/platform/PalmOS/Rsc/keyAlt.bmp
new file mode 100644
index 0000000000..28165394f8
--- /dev/null
+++ b/backends/platform/PalmOS/Rsc/keyAlt.bmp
Binary files differ
diff --git a/backends/platform/PalmOS/Rsc/keyCommand.bmp b/backends/platform/PalmOS/Rsc/keyCommand.bmp
new file mode 100644
index 0000000000..1324037cd3
--- /dev/null
+++ b/backends/platform/PalmOS/Rsc/keyCommand.bmp
Binary files differ
diff --git a/backends/platform/PalmOS/Rsc/keyCtrl.bmp b/backends/platform/PalmOS/Rsc/keyCtrl.bmp
new file mode 100644
index 0000000000..fed20fd8d0
--- /dev/null
+++ b/backends/platform/PalmOS/Rsc/keyCtrl.bmp
Binary files differ
diff --git a/backends/platform/PalmOS/Rsc/modules.rcp b/backends/platform/PalmOS/Rsc/modules.rcp
new file mode 100644
index 0000000000..7a7afe96be
--- /dev/null
+++ b/backends/platform/PalmOS/Rsc/modules.rcp
@@ -0,0 +1,67 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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$
+ *
+ */
+
+BITMAP ID 3100
+BEGIN
+ BITMAP "keyCommand.bmp" BPP 1 DENSITY 2
+END
+BITMAP ID 3101
+BEGIN
+ BITMAP "keyAlt.bmp" BPP 1 DENSITY 2
+END
+BITMAP ID 3102
+BEGIN
+ BITMAP "keyCtrl.bmp" BPP 1 DENSITY 2
+END
+BITMAP ID 3120
+BEGIN
+ BITMAP "batLow.bmp" BPP 1 DENSITY 2
+END
+BITMAP ID 3130
+BEGIN
+ BITMAP "numpad.bmp" BPP 1 DENSITY 2
+END
+
+/*
+BITMAP ID 3100 "keyCommand.bmp" DENSITY 2
+BITMAP ID 3101 "keyAlt.bmp" DENSITY 2
+BITMAP ID 3102 "keyCtrl.bmp" DENSITY 2
+BITMAP ID 3120 "batLow.bmp" DENSITY 2
+BITMAP ID 3130 "numpad.bmp" DENSITY 2
+*/
+BITMAP ID 3000 "keyCommand.bmp" DENSITY 1
+BITMAP ID 3001 "keyAlt.bmp" DENSITY 1
+BITMAP ID 3002 "keyCtrl.bmp" DENSITY 1
+BITMAP ID 3020 "batLow.bmp" DENSITY 1
+BITMAP ID 3030 "numpad.bmp" DENSITY 1
+
+ALERT ID 1200
+ DEFAULTBUTTON 0
+ ERROR
+BEGIN
+ TITLE "ScummVM Fatal Error"
+ MESSAGE "^1"
+ BUTTONS "Exit"
+END
+
diff --git a/backends/platform/PalmOS/Rsc/modulesrsc.h b/backends/platform/PalmOS/Rsc/modulesrsc.h
new file mode 100644
index 0000000000..14b32ee0b6
--- /dev/null
+++ b/backends/platform/PalmOS/Rsc/modulesrsc.h
@@ -0,0 +1,6 @@
+#ifndef MODULESRSC_H
+#define MODULESRSC_H
+
+#define FrmFatalErrorAlert 1200
+
+#endif
diff --git a/backends/platform/PalmOS/Rsc/numpad.bmp b/backends/platform/PalmOS/Rsc/numpad.bmp
new file mode 100644
index 0000000000..7763d76c05
--- /dev/null
+++ b/backends/platform/PalmOS/Rsc/numpad.bmp
Binary files differ
diff --git a/backends/platform/PalmOS/Src/args.cpp b/backends/platform/PalmOS/Src/args.cpp
new file mode 100644
index 0000000000..941072aff8
--- /dev/null
+++ b/backends/platform/PalmOS/Src/args.cpp
@@ -0,0 +1,106 @@
+#include <PalmOS.h>
+#include "palmdefs.h"
+#include "args.h"
+#include "pace.h"
+#include "endianutils.h"
+
+Char **ArgsInit() {
+ // first 4 bytes keep the real address of the chunk
+ MemHandle argvH = MemHandleNew(sizeof(Char *) + (MAX_ARG * sizeof(Char **) + 2));
+ // real addr
+ Char *lockP = (Char *)MemHandleLock(argvH);
+ // 4byte aligned
+ Char **argvP = (Char **)ALIGN_4BYTE(lockP);
+ // save real addr
+ argvP[0] = lockP;
+ // initial position
+ argvP++;
+
+ for(UInt8 count = 0; count < MAX_ARG; count++)
+ argvP[count] = NULL;
+
+ return argvP;
+}
+
+void ArgsAdd(Char **argvP, const Char *argP, const Char *parmP, UInt8 *countArgP) {
+ if (argP) {
+ MemHandle newArg;
+ UInt16 len2 = 0;
+ UInt16 len1 = StrLen(argP);
+
+ if (len1 > 0) {
+ if (parmP)
+ len2 = StrLen(parmP);
+
+ (*countArgP)++;
+ newArg = MemHandleNew(len1 + len2 + 1); // +1 = NULL CHAR
+ *argvP = (Char *)MemHandleLock(newArg);
+ StrCopy(*argvP, argP);
+
+ if (parmP)
+ StrCat(*argvP, parmP);
+ }
+ }
+}
+
+void ArgsFree(Char **argvP) {
+ if (!argvP)
+ return;
+
+ MemHandle oldH;
+
+ for(UInt8 count = 0; count < MAX_ARG; count++)
+ if (argvP[count]) {
+ oldH = MemPtrRecoverHandle(argvP[count]);
+ MemHandleUnlock(oldH);
+ MemHandleFree(oldH);
+ }
+
+ argvP--;
+ oldH = MemPtrRecoverHandle(argvP[0]);
+ MemHandleUnlock(oldH);
+ MemHandleFree(oldH);
+}
+
+void ArgsSetOwner(Char **argvP, UInt16 owner) {
+ if (!argvP)
+ return;
+
+ MemHandle oldH;
+
+ for(UInt8 count = 0; count < MAX_ARG; count++)
+ if (argvP[count]) {
+ oldH = MemPtrRecoverHandle(argvP[count]);
+ MemHandleSetOwner(oldH, owner);
+ }
+
+ argvP--;
+ oldH = MemPtrRecoverHandle(argvP[0]);
+ MemHandleSetOwner(oldH, owner);
+}
+
+void ArgsExportInit(Char **argvP, UInt32 countArg, Boolean arm) {
+ if (arm) {
+ for(UInt8 count = 0; count < MAX_ARG; count++)
+ if (argvP[count])
+ argvP[count] = (Char *)ByteSwap32(argvP[count]);
+ }
+
+ FtrSet(appFileCreator, ftrArgsData , (UInt32)argvP);
+ FtrSet(appFileCreator, ftrArgsCount, (UInt32)countArg);
+}
+
+void ArgsExportRelease(Boolean arm) {
+ if (arm) {
+ Char **argvP;
+ Err e = FtrGet(appFileCreator, ftrArgsData, (UInt32 *)&argvP);
+
+ if (argvP)
+ for(UInt8 count = 0; count < MAX_ARG; count++)
+ if (argvP[count])
+ argvP[count] = (Char *)ByteSwap32(argvP[count]);
+ }
+
+ FtrUnregister(appFileCreator, ftrArgsCount);
+ FtrUnregister(appFileCreator, ftrArgsData);
+}
diff --git a/backends/platform/PalmOS/Src/args.h b/backends/platform/PalmOS/Src/args.h
new file mode 100644
index 0000000000..f8b5cb9aa0
--- /dev/null
+++ b/backends/platform/PalmOS/Src/args.h
@@ -0,0 +1,43 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 ARGS_H
+#define ARGS_H
+
+#define MAX_ARG 25
+
+#define ftrArgsData 1300
+#define ftrArgsCount 1301
+#define ftrVars 1302
+#define ftrStack 1303
+
+Char **ArgsInit();
+void ArgsAdd(Char **argvP, const Char *argP, const Char *parmP, UInt8 *countArgP);
+void ArgsFree(Char **argvP);
+void ArgsSetOwner(Char **argvP, UInt16 owner);
+
+void ArgsExportInit(Char **argvP, UInt32 countArg, Boolean arm);
+void ArgsExportRelease(Boolean arm);
+
+#endif
diff --git a/backends/platform/PalmOS/Src/base_event.cpp b/backends/platform/PalmOS/Src/base_event.cpp
new file mode 100644
index 0000000000..9a5e972bbd
--- /dev/null
+++ b/backends/platform/PalmOS/Src/base_event.cpp
@@ -0,0 +1,333 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 "be_base.h"
+
+#if defined(COMPILE_OS5) && defined(PALMOS_ARM)
+extern "C" void SysEventGet(EventType *eventP, Int32 timeout);
+extern "C" void SysEventAddToQueue (const EventType *eventP);
+#endif
+
+void OSystem_PalmBase::timer_handler() {
+ UInt32 msecs = getMillis();
+
+ if (_timer.active && (msecs >= _timer.nextExpiry)) {
+ _timer.duration = _timer.callback(_timer.duration);
+ _timer.nextExpiry = msecs + _timer.duration;
+ }
+}
+
+void OSystem_PalmBase::battery_handler() {
+ // check battery level every 15secs
+ if ((TimGetTicks() - _batCheckLast) > _batCheckTicks) {
+ UInt16 voltage, warnThreshold, criticalThreshold;
+ Boolean pluggedIn;
+ voltage = SysBatteryInfoV20(false, &warnThreshold, &criticalThreshold, NULL, NULL, &pluggedIn);
+
+ if (!pluggedIn) {
+ if (voltage <= warnThreshold) {
+ if (!_showBatLow) {
+ _showBatLow = true;
+ draw_osd(kDrawBatLow, _screenDest.w - 18, -16, true, 2);
+ displayMessageOnOSD("Battery low.");
+ }
+ } else {
+ if (_showBatLow) {
+ _showBatLow = false;
+ draw_osd(kDrawBatLow, _screenDest.w - 18, -16, false);
+ }
+ }
+
+ if (voltage <= criticalThreshold) {
+ ::EventType event;
+ event.eType = keyDownEvent;
+ event.data.keyDown.chr = vchrPowerOff;
+ event.data.keyDown.modifiers = commandKeyMask;
+#if defined(COMPILE_OS5) && defined(PALMOS_ARM)
+ SysEventAddToQueue(&event);
+#else
+ EvtAddEventToQueue(&event);
+#endif
+ }
+ }
+
+ _batCheckLast = TimGetTicks();
+ }
+}
+
+bool OSystem_PalmBase::pollEvent(Event &event) {
+ ::EventType ev;
+ Boolean handled;
+ UInt32 keyCurrentState;
+ Coord x, y;
+
+ battery_handler();
+ timer_handler();
+ sound_handler();
+
+ for(;;) {
+#if defined(COMPILE_OS5) && defined(PALMOS_ARM)
+ SysEventGet(&ev, evtNoWait);
+#else
+ EvtGetEvent(&ev, evtNoWait);
+#endif
+ // check for hardkey repeat for mouse emulation
+ keyCurrentState = KeyCurrentState();
+ // check_hard_keys();
+
+ if (!(keyCurrentState & _keyMouseMask)) {
+ _lastKeyRepeat = 0;
+ } else {
+ if (getMillis() >= (_keyMouseRepeat + _keyMouseDelay)) {
+ _keyMouseRepeat = getMillis();
+
+ if (gVars->arrowKeys) {
+ if (keyCurrentState & _keyMouse.bitUp)
+ event.kbd.keycode = 273;
+ else if (keyCurrentState & _keyMouse.bitDown)
+ event.kbd.keycode = 274;
+ else if (keyCurrentState & _keyMouse.bitLeft)
+ event.kbd.keycode = 276;
+ else if (keyCurrentState & _keyMouse.bitRight)
+ event.kbd.keycode = 275;
+ else if (keyCurrentState & _keyMouse.bitButLeft)
+ event.kbd.keycode = chrLineFeed;
+
+ event.type = EVENT_KEYDOWN;
+ event.kbd.ascii = event.kbd.keycode;
+ event.kbd.flags = 0;
+
+ } else {
+ Int8 sx = 0;
+ Int8 sy = 0;
+
+ if (keyCurrentState & _keyMouse.bitUp)
+ sy = -1;
+ else if (keyCurrentState & _keyMouse.bitDown)
+ sy = +1;
+
+ if (keyCurrentState & _keyMouse.bitLeft)
+ sx = -1;
+ else if (keyCurrentState & _keyMouse.bitRight)
+ sx = +1;
+
+ if (sx || sy) {
+ simulate_mouse(event, sx, sy, &x, &y);
+ event.type = EVENT_MOUSEMOVE;
+ _lastKey = kKeyMouseMove;
+
+ } else {
+ x = _mouseCurState.x;
+ y = _mouseCurState.y;
+
+ if (keyCurrentState & _keyMouse.bitButLeft) {
+ event.type = EVENT_LBUTTONDOWN;
+ _lastKey = kKeyMouseLButton;
+
+ } else if (_lastKey == kKeyMouseLButton) {
+ event.type = EVENT_LBUTTONUP;
+ _lastKey = kKeyNone;
+ }
+ }
+
+ event.mouse.x = x;
+ event.mouse.y = y;
+ warpMouse(x, y);
+ // updateCD();
+ }
+ return true;
+ }
+ }
+
+ if (ev.eType == keyDownEvent) {
+ switch (ev.data.keyDown.chr) {
+ // ESC key
+ case vchrLaunch:
+ _lastKey = kKeyNone;
+ event.type = EVENT_KEYDOWN;
+ event.kbd.keycode = 27;
+ event.kbd.ascii = 27;
+ event.kbd.flags = 0;
+ return true;
+
+ // F5 = menu
+ case vchrMenu:
+ _lastKey = kKeyNone;
+ event.type = EVENT_KEYDOWN;
+ event.kbd.keycode = 319;
+ event.kbd.ascii = 319;
+ event.kbd.flags = 0;
+ return true;
+
+ // if hotsync pressed, etc...
+ case vchrHardCradle:
+ case vchrHardCradle2:
+ case vchrLowBattery:
+ case vchrFind:
+// case vchrBrightness: // volume control on Zodiac, let other backends disable it
+ case vchrContrast:
+ // do nothing
+ _lastKey = kKeyNone;
+ return true;
+ }
+ }
+
+ if (check_event(event, &ev))
+ return true;
+ _lastKey = kKeyNone;
+
+ // prevent crash when alarm is raised
+ handled = ((ev.eType == keyDownEvent) &&
+ (ev.data.keyDown.modifiers & commandKeyMask) &&
+ ((ev.data.keyDown.chr == vchrAttnStateChanged) ||
+ (ev.data.keyDown.chr == vchrAttnUnsnooze)));
+
+ // graffiti strokes, auto-off, etc...
+ if (!handled)
+ if (SysHandleEvent(&ev))
+ continue;
+
+ switch(ev.eType) {
+ case penMoveEvent:
+ get_coordinates(&ev, x, y);
+
+ if (y > _screenHeight || y < 0 || x > _screenWidth || x < 0)
+ return false;
+
+ if (_lastEvent != penMoveEvent && (abs(y - event.mouse.y) <= 2 || abs(x - event.mouse.x) <= 2)) // move only if
+ return false;
+
+ _lastEvent = penMoveEvent;
+ event.type = EVENT_MOUSEMOVE;
+ event.mouse.x = x;
+ event.mouse.y = y;
+ warpMouse(x, y);
+ return true;
+
+ case penDownEvent:
+ get_coordinates(&ev, x, y);
+
+ // indy fight mode
+ if (_useNumPad && !_overlayVisible) {
+ char num = '1';
+ num += 9 -
+ (3 - (3 * x / _screenWidth )) -
+ (3 * (3 * y / _screenHeight));
+
+ event.type = EVENT_KEYDOWN;
+ event.kbd.keycode = num;
+ event.kbd.ascii = num;
+ event.kbd.flags = 0;
+
+ _lastEvent = keyDownEvent;
+ return true;
+ }
+
+ _lastEvent = penDownEvent;
+ if (y > _screenHeight || y < 0 || x > _screenWidth || x < 0)
+ return false;
+
+ event.type = ((gVars->stylusClick || _overlayVisible) ? EVENT_LBUTTONDOWN : EVENT_MOUSEMOVE);
+ event.mouse.x = x;
+ event.mouse.y = y;
+ warpMouse(x, y);
+ return true;
+
+ case penUpEvent:
+ get_coordinates(&ev, x, y);
+
+ event.type = ((gVars->stylusClick || _overlayVisible) ? EVENT_LBUTTONUP : EVENT_MOUSEMOVE);
+ if (y > _screenHeight || y < 0 || x > _screenWidth || x < 0)
+ return false;
+
+ event.mouse.x = x;
+ event.mouse.y = y;
+ warpMouse(x, y);
+ return true;
+
+ case keyDownEvent:
+ if (ev.data.keyDown.chr == vchrCommand &&
+ (ev.data.keyDown.modifiers & commandKeyMask)) {
+
+ _lastKeyModifier++;
+ _lastKeyModifier %= kModifierCount;
+
+ if (_lastKeyModifier)
+ draw_osd((kDrawKeyState + _lastKeyModifier - 1), 2, _screenDest.h + 2, true);
+ else
+ draw_osd(kDrawKeyState, 2, _screenDest.h + 2, false);
+
+ return false;
+ }
+
+ char mask = 0;
+ UInt16 key = ev.data.keyDown.chr;
+
+ if (_lastKeyModifier == kModifierNone) {
+ // for keyboard mode
+ if (ev.data.keyDown.modifiers & shiftKeyMask) mask |= KBD_SHIFT;
+ if (ev.data.keyDown.modifiers & controlKeyMask) mask |= KBD_CTRL;
+ if (ev.data.keyDown.modifiers & optionKeyMask) mask |= KBD_ALT;
+ if (ev.data.keyDown.modifiers & commandKeyMask) mask |= KBD_CTRL|KBD_ALT;
+ } else {
+ // for grafiti mode
+ if (_lastKeyModifier == kModifierCommand) mask = KBD_CTRL|KBD_ALT;
+ if (_lastKeyModifier == kModifierAlt) mask = KBD_ALT;
+ if (_lastKeyModifier == kModifierCtrl) mask = KBD_CTRL;
+ }
+
+ if (_lastKeyModifier)
+ draw_osd(kDrawKeyState, 2, _screenDest.h + 2, false);
+ _lastKeyModifier = kModifierNone;
+
+ // F1 -> F10 key
+ if (key >= '0' && key <= '9' && mask == (KBD_CTRL|KBD_ALT)) {
+ key = (key == '0') ? 324 : (315 + key - '1');
+ mask = 0;
+
+ // exit
+ } else if ((key == 'z' && mask == KBD_CTRL) || (mask == KBD_ALT && key == 'x')) {
+ event.type = EVENT_QUIT;
+ return true;
+
+ // num pad (indy fight mode)
+ } else if (key == 'n' && mask == (KBD_CTRL|KBD_ALT) && !_overlayVisible) {
+ _useNumPad = !_useNumPad;
+ draw_osd(kDrawFight, _screenDest.w - 34, _screenDest.h + 2, _useNumPad, 1);
+ displayMessageOnOSD(_useNumPad ? "Fight mode on." : "Fight mode off.");
+ return false;
+ }
+
+ // other keys
+ event.type = EVENT_KEYDOWN;
+ event.kbd.keycode = key;
+ event.kbd.ascii = key;
+ event.kbd.flags = mask;
+ return true;
+
+ default:
+ return false;
+ };
+ }
+}
diff --git a/backends/platform/PalmOS/Src/base_gfx.cpp b/backends/platform/PalmOS/Src/base_gfx.cpp
new file mode 100644
index 0000000000..f9d3db5d4a
--- /dev/null
+++ b/backends/platform/PalmOS/Src/base_gfx.cpp
@@ -0,0 +1,280 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 "be_base.h"
+
+#ifdef PALMOS_68K
+# include <BmpGlue.h>
+#endif
+
+/*
+ * Graphics modes
+ *
+ */
+
+static const OSystem::GraphicsMode s_supportedGraphicsModes[] = {
+ {"1x", "Normal", GFX_NORMAL},
+ {"wide", "Wide", GFX_WIDE},
+ {0, 0, 0}
+};
+
+int OSystem_PalmBase::getDefaultGraphicsMode() const {
+ return GFX_NORMAL;
+}
+
+const OSystem::GraphicsMode *OSystem_PalmBase::getSupportedGraphicsModes() const {
+ return int_getSupportedGraphicsModes();
+}
+
+const OSystem::GraphicsMode *OSystem_PalmBase::int_getSupportedGraphicsModes() const {
+ return s_supportedGraphicsModes;
+}
+
+int OSystem_PalmBase::getGraphicsMode() const {
+ return _mode;
+}
+
+bool OSystem_PalmBase::setGraphicsMode(int mode) {
+ switch(mode) {
+ case GFX_NORMAL:
+ case GFX_WIDE:
+ _setMode = mode;
+ break;
+
+ default:
+ warning("unknown gfx mode %d", mode);
+ _setMode = GFX_NORMAL;
+ return false;
+ }
+
+ return true;
+}
+
+/*
+ * Init
+ *
+ */
+
+void OSystem_PalmBase::initSize(uint w, uint h) {
+ _screenWidth = w;
+ _screenHeight = h;
+
+ _screenDest.w = _screenWidth;
+ _screenDest.h = _screenHeight;
+
+ unload_gfx_mode();
+ _mode = _setMode;
+ load_gfx_mode();
+
+ warpMouse(200, 150);
+ int_initSize(w, h);
+}
+
+/*
+ * Palette
+ *
+ */
+void OSystem_PalmBase::setPalette(const byte *colors, uint start, uint num) {
+ RGBColorType *base = _currentPalette + start;
+
+ for(uint i = 0; i < num; i++) {
+ base[i].r = colors[0];
+ base[i].g = colors[1];
+ base[i].b = colors[2];
+
+ extras_palette(i + start, colors[0], colors[1], colors[2]);
+ colors += 4;
+ }
+
+ if (start < _paletteDirtyStart)
+ _paletteDirtyStart = start;
+
+ if (start + num > _paletteDirtyEnd)
+ _paletteDirtyEnd = start + num;
+}
+
+void OSystem_PalmBase::grabPalette(byte *colors, uint start, uint num) {
+ const RGBColorType *base = _currentPalette + start;
+
+ for (uint i = 0; i < num; ++i) {
+ colors[i * 4] = base[i].r;
+ colors[i * 4 + 1] = base[i].g;
+ colors[i * 4 + 2] = base[i].b;
+ colors[i * 4 + 3] = 0xFF;
+ }
+}
+
+/*
+ * Screen
+ *
+ */
+
+void OSystem_PalmBase::setShakePos(int shakeOffset) {
+ _new_shake_pos = shakeOffset;
+ int_setShakePos(shakeOffset);
+}
+
+void OSystem_PalmBase::updateScreen() {
+ // Check whether the palette was changed in the meantime and update the
+ // screen surface accordingly.
+ if (_paletteDirtyEnd != 0 && _setPalette) {
+ WinSetDrawWindow(WinGetDisplayWindow());
+ WinPalette(winPaletteSet, _paletteDirtyStart, _paletteDirtyEnd - _paletteDirtyStart, _currentPalette + _paletteDirtyStart);
+ _paletteDirtyEnd = 0;
+ //_redawOSD = true;
+
+#ifdef PALMOS_68Ks
+ UInt8 oldCol;
+ oldCol = gVars->indicator.on;
+ gVars->indicator.on = RGBToColor(0,255,0);
+
+ if (oldCol != gVars->indicator.on)
+ _redrawOSD = true;
+
+/* {
+ // redraw if needed
+ if (_lastKeyModifier)
+ draw1BitGfx((kDrawKeyState + _lastKeyModifier - 1), 2, getHeight() + 2, true);
+
+ if(_useNumPad)
+ draw1BitGfx(kDrawNumPad, (getWidth() >> 1) - 32, getHeight() + 2, true);
+
+ if (_showBatLow)
+ draw1BitGfx(kDrawBatLow, (getWidth() >> 1), -16, true);
+ }*/
+#endif
+ }
+ if (_redawOSD) {
+ _redawOSD = false;
+ draw_osd(kDrawBatLow, _screenDest.w - 18, -16, _showBatLow, 2);
+ draw_osd(kDrawFight, _screenDest.w - 34, _screenDest.h + 2, (_useNumPad && !_overlayVisible), 1);
+ }
+ int_updateScreen();
+
+}
+
+void OSystem_PalmBase::clearScreen() {
+ WinSetDrawWindow(WinGetDisplayWindow());
+ WinSetBackColor(RGBToColor(0,0,0));
+ WinEraseWindow();
+}
+
+void OSystem_PalmBase::draw_osd(UInt16 id, Int32 x, Int32 y, Boolean show, UInt8 color) {
+//return;
+
+#ifdef PALMOS_68K
+ MemHandle hTemp = DmGetResource(bitmapRsc, id);
+#else
+ MemHandle hTemp = DmGetResource('abmp', id + 100);
+#endif
+
+ if (hTemp) {
+ /*static const UInt32 pal[3] = {
+ (TwGfxComponentsToPackedRGB(0,255,0)),
+ (TwGfxComponentsToPackedRGB(255,255,0)),
+ (TwGfxComponentsToPackedRGB(255,0,0))
+ };*/
+
+ BitmapType *bmTemp;
+ bmTemp = (BitmapType *)MemHandleLock(hTemp);
+
+ Coord w, h;
+#ifdef PALMOS_68K
+ BmpGlueGetDimensions(bmTemp, &w, &h, 0);
+#else
+ BmpGetDimensions(bmTemp, &w, &h, 0);
+#endif
+ PointType dst = { _screenOffset.x + x, _screenOffset.y + y };
+ RectangleType r = { dst.x, dst.y, w, h };
+
+ RectangleType c;
+
+ UInt16 old = WinSetCoordinateSystem(kCoordinatesNative);
+ WinGetClip(&c);
+ WinResetClip();
+ if (show) {
+ WinSetDrawWindow(_screenH);
+ WinSetBackColor(0);
+ WinSetForeColor(120); // pal[color]
+ WinFillRectangle(&r, 0);
+ WinSetDrawMode(winOverlay);
+ WinDrawBitmap(bmTemp, 0, 0);
+ WinSetDrawMode(winPaint);
+
+ } else {
+ WinSetBackColor(0);
+ WinFillRectangle(&r, 0);
+ }
+ WinSetClip(&c);
+ WinSetCoordinateSystem(old);
+
+ MemPtrUnlock(bmTemp);
+ DmReleaseResource(hTemp);
+ }
+
+/* MemHandle hTemp = DmGetResource(bitmapRsc, id);
+
+ if (hTemp) {
+ BitmapType *bmTemp;
+ UInt32 *bmData;
+ UInt8 ih, iw, ib;
+ Coord w, h;
+ Int16 blocks, next;
+
+ UInt8 *scr = _screenP + x + _screenPitch * y;
+ bmTemp = (BitmapType *)MemHandleLock(hTemp);
+ bmData = (UInt32 *)BmpGetBits(bmTemp);
+
+#ifdef PALMOS_68K
+ BmpGlueGetDimensions(bmTemp, &w, &h, 0);
+#else
+ BmpGetDimensions(bmTemp, &w, &h, 0);
+#endif
+
+ blocks = w >> 5;
+ next = w - (blocks << 5);
+
+ if (next)
+ blocks++;
+
+ for (ih = 0; ih < h; ih++) { // line
+ for (ib = 0; ib < blocks; ib++) { // 32pix block
+ next = w - (ib << 5);
+ next = MIN(next, (Coord)32);
+
+ for (iw = 0; iw < next; iw++) { // row
+ *scr++ = ((*bmData & (1 << (31 - iw))) && show) ?
+ gVars->indicator.on :
+ gVars->indicator.off;
+ }
+
+ bmData++;
+ }
+ scr += _screenPitch - w;
+ }
+
+ MemHandleUnlock(hTemp);
+ DmReleaseResource(hTemp);
+ }*/
+}
diff --git a/backends/platform/PalmOS/Src/base_mouse.cpp b/backends/platform/PalmOS/Src/base_mouse.cpp
new file mode 100644
index 0000000000..1fb00e1551
--- /dev/null
+++ b/backends/platform/PalmOS/Src/base_mouse.cpp
@@ -0,0 +1,72 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 "be_base.h"
+
+void OSystem_PalmBase::warpMouse(int x, int y) {
+ if (x != _mouseCurState.x || y != _mouseCurState.y) {
+ _mouseCurState.x = x;
+ _mouseCurState.y = y;
+ undraw_mouse();
+ }
+}
+
+bool OSystem_PalmBase::showMouse(bool visible) {
+ if (_mouseVisible == visible)
+ return visible;
+
+ bool last = _mouseVisible;
+ _mouseVisible = visible;
+
+ if (visible)
+ draw_mouse();
+ else
+ undraw_mouse();
+
+ return last;
+}
+
+void OSystem_PalmBase::simulate_mouse(Event &event, Int8 iHoriz, Int8 iVert, Coord *xr, Coord *yr) {
+ Int16 x = _mouseCurState.x;
+ Int16 y = _mouseCurState.y;
+ Int16 slow;
+
+ _lastKeyRepeat++;
+
+ if (_lastKeyRepeat > 32)
+ _lastKeyRepeat = 32;
+
+ slow = (iHoriz && iVert) ? 2 : 1;
+
+ x += iHoriz * (_lastKeyRepeat >> 2) / slow;
+ y += iVert * (_lastKeyRepeat >> 2) / slow;
+
+ x = (x < 0 ) ? 0 : x;
+ x = (x >= _screenWidth ) ? _screenWidth - 1 : x;
+ y = (y < 0 ) ? 0 : y;
+ y = (y >= _screenHeight ) ? _screenHeight - 1 : y;
+
+ *xr = x;
+ *yr = y;
+}
diff --git a/backends/platform/PalmOS/Src/be_68k.cpp b/backends/platform/PalmOS/Src/be_68k.cpp
new file mode 100644
index 0000000000..102f8da397
--- /dev/null
+++ b/backends/platform/PalmOS/Src/be_68k.cpp
@@ -0,0 +1,26 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2005 The ScummVM project
+ * Copyright (C) 2002-2005 Chris Apers - PalmOS Backend
+ *
+ * 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$
+ *
+ */
+
+
+/* More to come */
diff --git a/backends/platform/PalmOS/Src/be_68k.h b/backends/platform/PalmOS/Src/be_68k.h
new file mode 100644
index 0000000000..102f8da397
--- /dev/null
+++ b/backends/platform/PalmOS/Src/be_68k.h
@@ -0,0 +1,26 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2005 The ScummVM project
+ * Copyright (C) 2002-2005 Chris Apers - PalmOS Backend
+ *
+ * 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$
+ *
+ */
+
+
+/* More to come */
diff --git a/backends/platform/PalmOS/Src/be_base.cpp b/backends/platform/PalmOS/Src/be_base.cpp
new file mode 100644
index 0000000000..938b3b98c6
--- /dev/null
+++ b/backends/platform/PalmOS/Src/be_base.cpp
@@ -0,0 +1,116 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 "be_base.h"
+#include "common/config-file.h"
+#include "common/config-manager.h"
+
+OSystem_PalmBase::OSystem_PalmBase() {
+ _overlayVisible = false;
+
+ _current_shake_pos = 0;
+ _new_shake_pos = 0;
+
+ _paletteDirtyStart = 0;
+ _paletteDirtyEnd = 0;
+
+ _gfxLoaded = false;
+ _modeChanged = false;
+ _setMode = GFX_NORMAL;
+ _mode = _setMode;
+ _redawOSD = false;
+ _setPalette = true;
+
+ _offScreenH = NULL;
+ _screenH = NULL;
+ _offScreenP = NULL;
+ _screenP = NULL;
+ _screenPitch = gVars->screenPitch;
+
+ _lastEvent = nilEvent;
+ _lastKey = kKeyNone;
+ _lastKeyModifier = kModifierNone;
+ _lastKeyRepeat = 100;
+ _useNumPad = false;
+ _showBatLow = false;
+ _batCheckTicks = SysTicksPerSecond() * 15;
+ _batCheckLast = TimGetTicks();
+
+ _mouseDataH = NULL;
+ _mouseDataP = NULL;
+ _mouseVisible = false;
+ _mouseDrawn = false;
+ MemSet(&_keyMouse, sizeof(_keyMouse), 0);
+ MemSet(&_mouseCurState, sizeof(_mouseCurState), 0);
+ MemSet(&_mouseOldState, sizeof(_mouseOldState), 0);
+ MemSet(&_timer, sizeof(TimerType), 0);
+ MemSet(&_sound, sizeof(SoundType), 0);
+
+ _keyMouseRepeat = 0;
+ _keyMouseDelay = (gVars->arrowKeys) ? computeMsecs(125) : computeMsecs(25);
+}
+
+void OSystem_PalmBase::initBackend() {
+ if (gVars->autoSave != -1)
+ ConfMan.setInt("autosave_period", gVars->autoSave);
+
+ _keyMouse.bitUp = keyBitPageUp;
+ _keyMouse.bitDown = keyBitPageDown;
+ _keyMouse.bitLeft = keyBitHard1;
+ _keyMouse.bitRight = keyBitHard2;
+ _keyMouse.bitButLeft= keyBitHard3;
+ _keyMouse.hasMore = false;
+
+ int_initBackend();
+ _keyMouseMask = (_keyMouse.bitUp | _keyMouse.bitDown | _keyMouse.bitLeft | _keyMouse.bitRight | _keyMouse.bitButLeft);
+}
+
+uint32 OSystem_PalmBase::getMillis() {
+ return TimGetTicks() * 1000 / SysTicksPerSecond();
+}
+
+void OSystem_PalmBase::delayMillis(uint msecs) {
+ Int32 delay = computeMsecs(msecs);
+
+ if (delay > 0)
+ SysTaskDelay(delay);
+}
+
+void OSystem_PalmBase::setTimerCallback(TimerProc callback, int timer) {
+ if (callback != NULL) {
+ _timer.duration = timer;
+ _timer.nextExpiry = getMillis() + timer;
+ _timer.callback = callback;
+ _timer.active = true;
+ } else {
+ _timer.active = false;
+ }
+}
+
+void OSystem_PalmBase::quit() {
+ int_quit();
+ clearSoundCallback();
+ unload_gfx_mode();
+ exit(0);
+}
diff --git a/backends/platform/PalmOS/Src/be_base.h b/backends/platform/PalmOS/Src/be_base.h
new file mode 100644
index 0000000000..bfbe8e9b23
--- /dev/null
+++ b/backends/platform/PalmOS/Src/be_base.h
@@ -0,0 +1,246 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 BE_BASE_H
+#define BE_BASE_H
+
+#include "common/stdafx.h"
+#include "common/scummsys.h"
+#include "common/system.h"
+
+enum {
+ GFX_NORMAL = 0,
+ GFX_WIDE,
+};
+
+// OSD key state
+enum {
+ kModifierNone = 0,
+ kModifierCommand,
+ kModifierAlt,
+ kModifierCtrl,
+ kModifierCount
+};
+
+// OSD resource id
+#define kDrawKeyState 3000
+#define kDrawNumPad 3010
+#define kDrawBatLow 3020
+#define kDrawFight 3030
+
+#define computeMsecs(x) ((SysTicksPerSecond() * x) / 1000)
+
+typedef struct {
+ UInt32 duration, nextExpiry;
+ Boolean active;
+ OSystem::TimerProc callback;
+} TimerType, *TimerPtr;
+
+typedef struct {
+ Boolean active;
+ void *proc;
+ void *param;
+} SoundType, *SoundPtr;
+
+class OSystem_PalmBase : public OSystem {
+private:
+ virtual void int_initBackend() { }
+
+ virtual const GraphicsMode *int_getSupportedGraphicsModes() const;
+ virtual void int_updateScreen() = 0;
+ virtual void int_initSize(uint w, uint h) = 0;
+ virtual void int_setShakePos(int shakeOffset) { }
+
+ virtual void extras_palette(uint8 index, uint8 r, uint8 g, uint8 b) { }
+ virtual void int_quit() { }
+
+ virtual void unload_gfx_mode() = 0;
+ virtual void load_gfx_mode() = 0;
+
+ virtual void draw_mouse() = 0;
+ virtual void undraw_mouse() = 0;
+
+// virtual bool check_hard_keys() = 0;
+ virtual bool check_event(Event &event, EventPtr ev) = 0;
+
+ virtual void timer_handler();
+ void battery_handler();
+ virtual void get_coordinates(EventPtr ev, Coord &x, Coord &y) = 0;
+ void simulate_mouse(Event &event, Int8 iHoriz, Int8 iVert, Coord *xr, Coord *yr);
+ virtual void sound_handler() = 0;
+
+protected:
+ virtual void draw_osd(UInt16 id, Int32 x, Int32 y, Boolean show, UInt8 color = 0);
+
+ enum {
+ kKeyNone = 0,
+ kKeyMouseMove = 1 << 0,
+ kKeyMouseLButton = 1 << 1,
+
+ kKeyCalc = 1 << 30,
+ kKeyAny = 1 << 31
+ };
+ enum {
+ MAX_MOUSE_W = 40,
+ MAX_MOUSE_H = 40
+ };
+ struct MousePos {
+ int16 x,y,w,h;
+ };
+
+ TimerType _timer;
+ SoundType _sound;
+
+ RGBColorType _currentPalette[256];
+ uint _paletteDirtyStart, _paletteDirtyEnd;
+
+ int _mode, _setMode;
+ int16 _screenWidth, _screenHeight;
+ Boolean _modeChanged, _gfxLoaded;
+ UInt32 _screenPitch;
+
+ PointType _screenOffset;
+ struct {
+ Coord w, h;
+ } _screenDest;
+ byte *_screenP, *_offScreenP;
+ WinHandle _screenH, _offScreenH;
+
+ int _current_shake_pos;
+ int _new_shake_pos;
+
+ Boolean _overlayVisible;
+ Boolean _redawOSD, _setPalette;
+
+ UInt32 _keyMouseMask, _keyMouseRepeat, _keyMouseDelay;
+ struct {
+ UInt32 bitUp;
+ UInt32 bitDown;
+ UInt32 bitLeft;
+ UInt32 bitRight;
+ UInt32 bitButLeft;
+ Boolean hasMore;
+ } _keyMouse;
+
+ bool _mouseVisible;
+ bool _mouseDrawn;
+ MousePos _mouseCurState;
+ MousePos _mouseOldState;
+ int16 _mouseHotspotX;
+ int16 _mouseHotspotY;
+ byte _mouseKeyColor;
+ byte *_mouseDataP, *_mouseBackupP;
+ WinHandle _mouseDataH, _mouseBackupH;
+
+ eventsEnum _lastEvent;
+ WChar _lastKey;
+ UInt8 _lastKeyModifier;
+ UInt32 _lastKeyRepeat;
+ Boolean _useNumPad, _showBatLow;
+ UInt32 _batCheckTicks, _batCheckLast;
+
+ int _samplesPerSec;
+
+public:
+ OSystem_PalmBase();
+ void initBackend();
+
+/*
+ virtual void setFeatureState(Feature f, bool enable) {};
+
+
+ bool hasFeature(Feature f);
+ bool getFeatureState(Feature f);
+
+ virtual void beginGFXTransaction();
+ virtual void endGFXTransaction();
+
+ virtual int16 getOverlayHeight();
+ virtual int16 getOverlayWidth();
+ virtual int screenToOverlayX(int x);
+ virtual int screenToOverlayY(int y);
+ virtual int overlayToScreenX(int x);
+ virtual int overlayToScreenY(int y);
+
+ virtual OverlayColor ARGBToColor(uint8 a, uint8 r, uint8 g, uint8 b);
+ virtual void colorToARGB(OverlayColor color, uint8 &a, uint8 &r, uint8 &g, uint8 &b);
+
+ virtual void setCursorPalette(const byte *colors, uint start, uint num);
+ virtual void disableCursorPalette(bool disable);
+
+ virtual void displayMessageOnOSD(const char *msg);
+*/
+ const GraphicsMode *getSupportedGraphicsModes() const;
+ int getGraphicsMode() const;
+ virtual int getDefaultGraphicsMode() const;
+ virtual bool setGraphicsMode(int mode);
+ virtual bool grabRawScreen(Graphics::Surface *surf) { return false; }
+
+ void initSize(uint w, uint h);
+ int16 getWidth() { return _screenWidth; }
+ int16 getHeight() { return _screenHeight; }
+
+ void setShakePos(int shakeOffset);
+ virtual void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h) = 0;
+ virtual void updateScreen();
+ virtual void clearScreen();
+
+ bool showMouse(bool visible);
+ void warpMouse(int x, int y);
+ virtual void setMouseCursor(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, byte keycolor, int cursorTargetScale) = 0;
+
+ virtual void showOverlay() = 0;
+ virtual void hideOverlay() = 0;
+ virtual void clearOverlay() = 0;
+ virtual void grabOverlay(OverlayColor *buf, int pitch) = 0;
+ virtual void copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h) = 0;
+
+ void setPalette(const byte *colors, uint start, uint num);
+ void grabPalette(byte *colors, uint start, uint num);
+ virtual OverlayColor RGBToColor(uint8 r, uint8 g, uint8 b) = 0;
+ virtual void colorToRGB(OverlayColor color, uint8 &r, uint8 &g, uint8 &b) = 0;
+
+ bool pollEvent(Event &event);
+
+ virtual uint32 getMillis();
+ virtual void delayMillis(uint msecs);
+
+ virtual void setTimerCallback(TimerProc callback, int interval);
+
+ virtual MutexRef createMutex() { return NULL; }
+ virtual void lockMutex(MutexRef mutex) {}
+ virtual void unlockMutex(MutexRef mutex) {}
+ virtual void deleteMutex(MutexRef mutex) {}
+
+ virtual bool setSoundCallback(SoundProc proc, void *param) = 0;
+ virtual void clearSoundCallback() = 0;
+ int getOutputSampleRate() const { return _samplesPerSec; }
+
+ void quit();
+ virtual void setWindowCaption(const char *caption) = 0;
+
+ Common::SaveFileManager *getSavefileManager();
+};
+
+#endif
diff --git a/backends/platform/PalmOS/Src/be_os5.cpp b/backends/platform/PalmOS/Src/be_os5.cpp
new file mode 100644
index 0000000000..6b00351f49
--- /dev/null
+++ b/backends/platform/PalmOS/Src/be_os5.cpp
@@ -0,0 +1,111 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 "be_os5.h"
+
+#ifndef __TWKEYS_H__
+#include <PalmNavigator.h>
+#include <HsKeyCommon.h>
+#endif
+
+OSystem_PalmOS5::OSystem_PalmOS5() : OSystem_PalmBase() {
+ _sound.active = false;
+ _setPalette = false;
+
+ _workScreenH = NULL;
+ _overlayH = NULL;
+ _isSwitchable = false;
+ _wasRotated = false;
+
+ MemSet(&_soundEx, sizeof(SoundExType), 0);
+ _soundEx.sound = &_sound;
+}
+
+void OSystem_PalmOS5::int_initBackend() {
+ if (OPTIONS_TST(kOpt5WayNavigatorV1)) {
+ _keyMouse.bitUp = keyBitPageUp;
+ _keyMouse.bitDown = keyBitPageDown;
+ _keyMouse.bitLeft = keyBitNavLeft;
+ _keyMouse.bitRight = keyBitNavRight;
+ _keyMouse.bitButLeft= keyBitNavSelect;
+ _keyMouse.hasMore = true;
+
+ } else if (OPTIONS_TST(kOpt5WayNavigatorV2)) {
+ _keyMouse.bitUp = keyBitRockerUp|keyBitPageUp;
+ _keyMouse.bitDown = keyBitRockerDown|keyBitPageDown;
+ _keyMouse.bitLeft = keyBitRockerLeft;
+ _keyMouse.bitRight = keyBitRockerRight;
+ _keyMouse.bitButLeft= keyBitRockerCenter;
+ _keyMouse.hasMore = true;
+ }
+}
+
+void OSystem_PalmOS5::setWindowCaption(const char *caption) {
+ Err e;
+ Char buf[64];
+ Coord w, y, h = FntLineHeight() + 2;
+ const Char *loading = "Loading, please wait\0";
+
+ // allocate bitmap
+ BitmapTypeV3 *bmp2P;
+ BitmapType *bmp1P = BmpCreate(320, (h * 3), 8, NULL, &e);
+ WinHandle tmpH = WinCreateBitmapWindow(bmp1P, &e);
+
+ WinSetDrawWindow(tmpH);
+ WinSetBackColor(0);
+ WinSetTextColor(255);
+ WinEraseWindow();
+
+ // loading message
+ FntSetFont(boldFont);
+ w = FntCharsWidth(loading, StrLen(loading));
+ w = (320 - w) / 2;
+ WinDrawChars(loading, StrLen(loading), w, 0 + h);
+
+ // caption
+ FntSetFont(stdFont);
+ w = FntCharsWidth(caption, StrLen(caption));
+ w = (320 - w) / 2;
+ WinDrawChars(caption, StrLen(caption), w, 0);
+
+ // memory size
+ StrPrintF(buf, "memory : %ld KB", gVars->startupMemory);
+ w = FntCharsWidth(buf, StrLen(buf));
+ w = (320 - w) / 2;
+ WinDrawChars(buf, StrLen(buf), w, h * 2);
+
+ // set the bitmap as v3
+ bmp2P = BmpCreateBitmapV3(bmp1P, kDensityDouble, BmpGetBits(bmp1P), NULL);
+ y = (80 - (h / 4) - 5);
+
+ // draw it
+ WinSetDrawWindow(WinGetDisplayWindow());
+ WinEraseWindow();
+ WinDrawBitmap((BitmapPtr)bmp2P, 0, y);
+
+ // free
+ WinDeleteWindow(tmpH, 0);
+ BmpDelete((BitmapPtr)bmp2P);
+ BmpDelete(bmp1P);
+}
diff --git a/backends/platform/PalmOS/Src/be_os5.h b/backends/platform/PalmOS/Src/be_os5.h
new file mode 100644
index 0000000000..40a8340820
--- /dev/null
+++ b/backends/platform/PalmOS/Src/be_os5.h
@@ -0,0 +1,164 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 BE_OS5_H
+#define BE_OS5_H
+
+#include "be_base.h"
+
+#if !defined(SYSTEM_CALLBACK) || defined(PALMOS_68K)
+# define SYSTEM_CALLBACK
+# ifdef PALMOS_ARM
+# define CALLBACK_PROLOGUE \
+ __asm { \
+ stmfd r13!,{r9,r10}; \
+ ldr r9,[r0]; \
+ ldr r10,[r0,#4]; \
+ }
+# define CALLBACK_EPILOGUE __asm { ldmfd r13!,{r9,r10} }
+# define CALLBACK_INIT(regs) \
+ __asm { \
+ ldr r0, = regs; \
+ add r0,r0,r10; \
+ str r9,[r0]; \
+ str r10,[r0,#4]; \
+ }
+# else
+# define CALLBACK_PROLOGUE \
+ asm ( \
+ movem.l a4-a5, -(sp); \
+ move.l UserDataP, a0; \
+ move.l 0(a0), a4; \
+ move.l 4(a0), a5; \
+ );
+# define CALLBACK_EPILOGUE asm ( movem.l (sp)+, a4-a5 );
+# define CALLBACK_INIT(regs) \
+ { \
+ void *ptr = &regs; \
+ asm ( \
+ move.l ptr, a0; \
+ move.l a4, 0(a0); \
+ move.l a5, 4(a0); \
+ ); \
+ }
+# endif
+#else
+# define CALLBACK_PROLOGUE
+# define CALLBACK_EPILOGUE
+# define CALLBACK_INIT(regs)
+#endif
+
+// TODO : change / remove this
+#define gfxMakeDisplayRGB_BigEndian(_r,_g,_b) \
+ ( (((_g) & 0xFC) << 11) | (((_b) & 0xF8) << 5) | ((_r) & 0xF8) | (((_g) & 0xFF) >> 5) )
+
+#define gfxMakeDisplayRGB_LittleEndian(_r,_g,_b) \
+ ( (((_r) & 0xF8) << 8) | (((_g) & 0xFC) << 3) | (((_b) & 0xF8) >> 3) )
+
+#if CPU_TYPE == CPU_68K
+#define gfxMakeDisplayRGB(_r,_g,_b) gfxMakeDisplayRGB_BigEndian(_r,_g,_b)
+#else
+#define gfxMakeDisplayRGB(_r,_g,_b) gfxMakeDisplayRGB_LittleEndian(_r,_g,_b)
+#endif
+
+typedef struct {
+ // for real thread version only
+ UInt32 __reg1;
+ UInt32 __reg2;
+
+ // no real thread version
+ Boolean set;
+ UInt32 size;
+ void *dataP;
+
+ // default sound stuff
+ SndStreamRef handle;
+ SoundPtr sound;
+} SoundExType, *SoundExPtr;
+extern SoundExType _soundEx;
+
+class OSystem_PalmOS5 : public OSystem_PalmBase {
+private:
+ typedef void (OSystem_PalmOS5::*RendererProc)(RectangleType &r, PointType &p);
+ RendererProc _render;
+
+ OverlayColor *_overlayP;
+ WinHandle _overlayH, _workScreenH;
+ int16 _nativePal[256];
+ int16 *_workScreenP;
+
+ Boolean _isSwitchable, _wasRotated;
+
+ virtual void int_initBackend();
+ virtual void int_updateScreen();
+ virtual void int_initSize(uint w, uint h);
+
+ virtual void unload_gfx_mode();
+ virtual void load_gfx_mode();
+ virtual void hotswap_gfx_mode(int mode);
+
+ void draw_mouse();
+ void undraw_mouse();
+ virtual void get_coordinates(EventPtr ev, Coord &x, Coord &y);
+ virtual bool check_event(Event &event, EventPtr ev);
+ virtual void extras_palette(uint8 index, uint8 r, uint8 g, uint8 b);
+
+ void render_landscape(RectangleType &r, PointType &p);
+ void render_portrait(RectangleType &r, PointType &p);
+ void render_1x(RectangleType &r, PointType &p);
+ WinHandle alloc_screen(Coord w, Coord h);
+ virtual void draw_osd(UInt16 id, Int32 x, Int32 y, Boolean show, UInt8 color = 0);
+
+ virtual SndStreamVariableBufferCallback sound_callback();
+ virtual void sound_handler();
+
+protected:
+ UInt16 _sysOldCoord, _sysOldOrientation;
+ Boolean _stretched;
+
+public:
+ OSystem_PalmOS5();
+ static OSystem *create();
+
+ void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h);
+ void clearScreen();
+
+ void setMouseCursor(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, byte keycolor, int cursorTargetScale);
+
+ void showOverlay();
+ void hideOverlay();
+ virtual void clearOverlay();
+ virtual void grabOverlay(OverlayColor *buf, int pitch);
+ virtual void copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h);
+ virtual OverlayColor RGBToColor(uint8 r, uint8 g, uint8 b);
+ virtual void colorToRGB(OverlayColor color, uint8 &r, uint8 &g, uint8 &b);
+
+ virtual bool setSoundCallback(SoundProc proc, void *param);
+ void clearSoundCallback();
+
+ void setWindowCaption(const char *caption);
+
+};
+
+#endif
diff --git a/backends/platform/PalmOS/Src/be_os5ex.cpp b/backends/platform/PalmOS/Src/be_os5ex.cpp
new file mode 100644
index 0000000000..f6f95ac06e
--- /dev/null
+++ b/backends/platform/PalmOS/Src/be_os5ex.cpp
@@ -0,0 +1,103 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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$
+ *
+ */
+
+// for DAL.h
+#define ALLOW_ACCESS_TO_INTERNALS_OF_BITMAPS
+
+#include "be_os5ex.h"
+#include "palmdefs.h"
+
+#include <System/WIP.h>
+#include <System/DAL.h>
+
+static TimerExType _timerEx;
+
+OSystem_PalmOS5Ex::OSystem_PalmOS5Ex() : OSystem_PalmOS5() {
+ _timerEx.timerID = 0;
+ _timerEx.timer = &_timer;
+ _timerEx.ticks = SysTicksPerSecond();
+}
+/*
+static SYSTEM_CALLBACK void timer_handler(void *userDataP) {
+ CALLBACK_PROLOGUE
+ TimerExPtr _timerEx = (TimerExPtr)userDataP;
+ TimerPtr _timer = _timerEx->timer;
+ _timer->duration = _timer->callback(_timer->duration);
+ KALTimerSet(_timerEx->timerID, (_timer->duration * _timerEx->ticks / 1000));
+ CALLBACK_EPILOGUE
+}
+
+void OSystem_PalmOS5Ex::setTimerCallback(TimerProc callback, int timer) {
+ if (_timer.active && _timerEx.timerID)
+ KALTimerDelete(_timerEx.timerID);
+
+ if (callback != NULL) {
+ Err e;
+ CALLBACK_INIT(_timerEx);
+ _timer.duration = timer;
+ _timer.callback = callback;
+
+ // create the timer
+ e = KALTimerCreate(&_timerEx.timerID, appFileCreator, &::timer_handler, &_timerEx);
+ if (!e) {
+ e = KALTimerSet(_timerEx.timerID, (timer * _timerEx.ticks / 1000));
+ if (e) KALTimerDelete(_timerEx.timerID);
+ }
+ _timer.active = (!e);
+
+ } else {
+ _timer.active = false;
+ }
+
+ if (!_timer.active)
+ _timerEx.timerID = 0;
+}
+*/
+OSystem::MutexRef OSystem_PalmOS5Ex::createMutex() {
+ UInt32 mutexID;
+ Err e = KALMutexCreate(&mutexID, appFileCreator);
+ return (MutexRef)(e ? NULL : mutexID);
+
+}
+
+void OSystem_PalmOS5Ex::lockMutex(MutexRef mutex) {
+ if (mutex)
+ KALMutexReserve((UInt32)mutex);
+}
+
+void OSystem_PalmOS5Ex::unlockMutex(MutexRef mutex) {
+ if (mutex)
+ KALMutexRelease((UInt32)mutex, 0);
+}
+
+void OSystem_PalmOS5Ex::deleteMutex(MutexRef mutex) {
+ if (mutex)
+ KALMutexDelete((UInt32)mutex);
+}
+/*
+void OSystem_PalmOS5Ex::int_quit() {
+ if (_timerEx.timerID)
+ KALTimerDelete(_timerEx.timerID);
+}
+*/ \ No newline at end of file
diff --git a/backends/platform/PalmOS/Src/be_os5ex.h b/backends/platform/PalmOS/Src/be_os5ex.h
new file mode 100644
index 0000000000..fb4027ccce
--- /dev/null
+++ b/backends/platform/PalmOS/Src/be_os5ex.h
@@ -0,0 +1,67 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 BE_OS5EX_H
+#define BE_OS5EX_H
+
+#include "be_os5.h"
+
+#undef dprintf // fix compilation in Zodiac mode
+
+#ifndef PALMOS_ARM
+// Not usable with 68k mode (?), so ...
+#define OSystem_PalmOS5Ex OSystem_PalmOS5
+#else
+
+typedef struct {
+ UInt32 __r9;
+ UInt32 __r10;
+ UInt32 timerID;
+ UInt32 ticks;
+
+ TimerPtr timer;
+} TimerExType, *TimerExPtr;
+
+class OSystem_PalmOS5Ex : public OSystem_PalmOS5 {
+private:
+// void timer_handler() {};
+ void sound_handler() {};
+// void int_quit();
+
+ SndStreamVariableBufferCallback sound_callback();
+
+public:
+ OSystem_PalmOS5Ex();
+ static OSystem *create();
+
+// void setTimerCallback(TimerProc callback, int interval);
+
+ MutexRef createMutex();
+ void lockMutex(MutexRef mutex);
+ void unlockMutex(MutexRef mutex);
+ void deleteMutex(MutexRef mutex);
+};
+#endif
+
+#endif
diff --git a/backends/platform/PalmOS/Src/be_save.cpp b/backends/platform/PalmOS/Src/be_save.cpp
new file mode 100644
index 0000000000..a96770f437
--- /dev/null
+++ b/backends/platform/PalmOS/Src/be_save.cpp
@@ -0,0 +1,163 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 "be_base.h"
+#include "common/savefile.h"
+
+// SaveFile class
+
+class PalmSaveFile : public Common::SaveFile {
+private:
+ FILE *fh;
+public:
+ PalmSaveFile(const char *filename, bool saveOrLoad) {
+ fh = ::fopen(filename, (saveOrLoad? "wb" : "rb"));
+ }
+ ~PalmSaveFile() {
+ if (fh) ::fclose(fh);
+ }
+
+ bool eos() const { return feof(fh) != 0; }
+ bool ioFailed() const { return ferror(fh) != 0; }
+ void clearIOFailed() { clearerr(fh); }
+
+ bool isOpen() const { return fh != NULL; }
+
+ uint32 read(void *buf, uint32 size);
+ uint32 write(const void *buf, uint32 size);
+
+ uint32 pos() const {
+ assert(fh);
+ return ftell(fh);
+ }
+ uint32 size() const {
+ assert(fh);
+ uint32 oldPos = ftell(fh);
+ fseek(fh, 0, SEEK_END);
+ uint32 length = ftell(fh);
+ fseek(fh, oldPos, SEEK_SET);
+ return length;
+ }
+ void seek(int32 offs, int whence = SEEK_SET) {
+ assert(fh);
+ fseek(fh, offs, whence);
+ }
+};
+
+uint32 PalmSaveFile::read(void *buf, uint32 size) {
+ // we must return the size, where fread return nitems upon success ( 1 <=> size)
+ if (fh) return (::fread(buf, 1, size, fh));
+ return 0;
+}
+
+uint32 PalmSaveFile::write(const void *buf, uint32 size) {
+ // we must return the size, where fwrite return nitems upon success ( 1 <=> size)
+ if (fh) return ::fwrite(buf, 1, size, fh);
+ return 0;
+}
+
+
+
+
+
+// SaveFileManager class
+
+class PalmSaveFileManager : public Common::SaveFileManager {
+public:
+ virtual Common::OutSaveFile *openForSaving(const char *filename) {
+ return openSavefile(filename, true);
+ }
+ virtual Common::InSaveFile *openForLoading(const char *filename) {
+ return openSavefile(filename, false);
+ }
+
+ Common::SaveFile *openSavefile(const char *filename, bool saveOrLoad);
+ void listSavefiles(const char *prefix, bool *marks, int num);
+
+protected:
+ Common::SaveFile *makeSaveFile(const char *filename, bool saveOrLoad);
+};
+
+Common::SaveFile *PalmSaveFileManager::openSavefile(const char *filename, bool saveOrLoad) {
+ char buf[256];
+
+ strcpy(buf, getSavePath());
+ strcat(buf, "/");
+ strcat(buf, filename);
+
+ return makeSaveFile(buf, saveOrLoad);
+}
+
+void PalmSaveFileManager::listSavefiles(const char *prefix, bool *marks, int num) {
+ FileRef fileRef;
+ // try to open the dir
+ Err e = VFSFileOpen(gVars->VFS.volRefNum, getSavePath(), vfsModeRead, &fileRef);
+ memset(marks, false, num*sizeof(bool));
+
+ if (e != errNone)
+ return;
+
+ // enumerate all files
+ UInt32 dirEntryIterator = vfsIteratorStart;
+ Char filename[32];
+ FileInfoType info = {0, filename, 32};
+ UInt16 length = StrLen(prefix);
+ int slot = 0;
+
+ while (dirEntryIterator != vfsIteratorStop) {
+ e = VFSDirEntryEnumerate (fileRef, &dirEntryIterator, &info);
+
+ if (e != expErrEnumerationEmpty) { // there is something
+
+ if (StrLen(info.nameP) == (length + 2)) { // consider max 99, filename length is ok
+ if (StrNCaselessCompare(prefix, info.nameP, length) == 0) { // this seems to be a save file
+ if (isdigit(info.nameP[length]) && isdigit(info.nameP[length+1])) {
+
+ slot = StrAToI(filename + length);
+ if (slot >= 0 && slot < num)
+ *(marks+slot) = true;
+
+ }
+ }
+ }
+
+ }
+ }
+
+ VFSFileClose(fileRef);
+}
+
+Common::SaveFile *PalmSaveFileManager::makeSaveFile(const char *filename, bool saveOrLoad) {
+ PalmSaveFile *sf = new PalmSaveFile(filename, saveOrLoad);
+
+ if (!sf->isOpen()) {
+ delete sf;
+ sf = 0;
+ }
+ return sf;
+}
+
+Common::SaveFileManager *OSystem_PalmBase::getSavefileManager() {
+ return new PalmSaveFileManager();
+}
diff --git a/backends/platform/PalmOS/Src/be_zodiac.cpp b/backends/platform/PalmOS/Src/be_zodiac.cpp
new file mode 100644
index 0000000000..6fd8c5cc06
--- /dev/null
+++ b/backends/platform/PalmOS/Src/be_zodiac.cpp
@@ -0,0 +1,90 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 "be_zodiac.h"
+
+OSystem_PalmZodiac::OSystem_PalmZodiac() : OSystem_PalmOS5Ex() {
+ _gfxH = NULL;
+ _overlayP = NULL;
+ _palmScreenP = NULL;
+ _tmpScreenP = NULL;
+ _stretched = false;
+}
+
+void OSystem_PalmZodiac::int_initBackend() {
+ _keyMouse.bitUp = keyBitRockerUp;
+ _keyMouse.bitDown = keyBitRockerDown;
+ _keyMouse.bitLeft = keyBitRockerLeft;
+ _keyMouse.bitRight = keyBitRockerRight;
+ _keyMouse.bitButLeft= keyBitRockerCenter;
+ _keyMouse.hasMore = true;
+}
+
+void OSystem_PalmZodiac::calc_rect(Boolean fullscreen) {
+ Int32 w, h;
+
+ if (fullscreen) {
+ w = (_ratio.adjustAspect == kRatioWidth) ? _ratio.width : gVars->screenFullWidth;
+ h = (_ratio.adjustAspect == kRatioHeight) ? _ratio.height : gVars->screenFullHeight;
+
+ _screenOffset.x = (_ratio.adjustAspect == kRatioWidth) ? (gVars->screenFullWidth - _ratio.width) / 2 : 0;
+ _screenOffset.y = (_ratio.adjustAspect == kRatioHeight) ? (gVars->screenFullHeight - _ratio.height) / 2 : 0;
+
+ } else {
+ w = gVars->screenWidth;
+ h = gVars->screenHeight - MIN_OFFSET * 2;
+
+ _screenOffset.x = 0;
+ _screenOffset.y = MIN_OFFSET;
+ }
+
+ _dstRect.x = _screenOffset.x;
+ _dstRect.y = _screenOffset.y;
+ _dstRect.w = w;
+ _dstRect.h = h;
+
+ _screenDest.w = _dstRect.w;
+ _screenDest.h = _dstRect.h;
+}
+
+void OSystem_PalmZodiac::setFeatureState(Feature f, bool enable) {
+ switch (f) {
+/* case kFeatureFullscreenMode:
+ if (_gfxLoaded)
+ if (OPTIONS_TST(kOptModeWide) && _initMode != GFX_WIDE) {
+ _fullscreen = enable;
+ hotswap_gfx_mode(_mode);
+ }
+ break;
+*/
+ case kFeatureAspectRatioCorrection:
+ if (_mode == GFX_WIDE) {
+ _ratio.adjustAspect = (_ratio.adjustAspect + 1) % 3;
+ calc_rect(true);
+ TwGfxSetClip(_palmScreenP, &_dstRect);
+ clearScreen();
+ }
+ break;
+ }
+}
diff --git a/backends/platform/PalmOS/Src/be_zodiac.h b/backends/platform/PalmOS/Src/be_zodiac.h
new file mode 100644
index 0000000000..7f5290bed1
--- /dev/null
+++ b/backends/platform/PalmOS/Src/be_zodiac.h
@@ -0,0 +1,90 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 BE_ZODIAC_H
+#define BE_ZODIAC_H
+
+#include <tapwave.h>
+#include "be_os5ex.h"
+
+#define MIN_OFFSET 20
+
+class OSystem_PalmZodiac : public OSystem_PalmOS5Ex {
+private:
+ enum {
+ kRatioNone = 0,
+ kRatioHeight,
+ kRatioWidth
+ };
+ struct {
+ UInt8 adjustAspect;
+ Coord width; // (width x 320)
+ Coord height; // (480 x height)
+ } _ratio;
+
+ TwGfxType *_gfxH;
+ TwGfxSurfaceType *_palmScreenP, *_tmpScreenP;
+ TwGfxSurfaceType *_overlayP;
+ UInt16 _nativePal[256];
+ Boolean _fullscreen;
+
+ TwGfxPointType _srcPos;
+ TwGfxRectType _srcRect, _dstRect;
+ TwGfxBitmapType _srcBmp;
+
+ void int_initBackend();
+ void int_setShakePos(int shakeOffset);
+
+ void draw_mouse();
+ void undraw_mouse();
+
+ void unload_gfx_mode();
+ void load_gfx_mode();
+ void hotswap_gfx_mode(int mode);
+
+ void extras_palette(uint8 index, uint8 r, uint8 g, uint8 b);
+ void calc_rect(Boolean fullscreen);
+ void get_coordinates(EventPtr ev, Coord &x, Coord &y);
+ bool check_event(Event &event, EventPtr ev);
+ void draw_osd(UInt16 id, Int32 x, Int32 y, Boolean show, UInt8 color = 0);
+
+public:
+ OSystem_PalmZodiac();
+
+ static OSystem *create();
+
+ void setFeatureState(Feature f, bool enable);
+ int getDefaultGraphicsMode() const;
+
+ void updateScreen();
+ bool grabRawScreen(Graphics::Surface *surf);
+
+ void clearOverlay();
+ void grabOverlay(OverlayColor *buf, int pitch);
+ void copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h);
+ OverlayColor RGBToColor(uint8 r, uint8 g, uint8 b);
+ void colorToRGB(OverlayColor color, uint8 &r, uint8 &g, uint8 &b);
+};
+
+#endif
diff --git a/backends/platform/PalmOS/Src/builder/b_globals.c b/backends/platform/PalmOS/Src/builder/b_globals.c
new file mode 100644
index 0000000000..dec25e96b4
--- /dev/null
+++ b/backends/platform/PalmOS/Src/builder/b_globals.c
@@ -0,0 +1,85 @@
+#include <PalmOS.h>
+#include "b_globals.h"
+
+
+//#define BUILD_COMMON
+//#define BUILD_SIMON
+#define BUILD_SCUMM
+//#define BUILD_SKY
+//#define BUILD_QUEEN
+//#define BUILD_SWORD1
+
+#ifdef BUILD_COMMON
+# define BUILD_RES GBVARS_COMMON
+# define BUILD_NAME "Common"
+#else
+# define BUILD_RES GBVARS_ENGINE
+# define BUILD_NAME "Engine"
+#endif
+
+DmOpenRef dbP[GBVARS_COUNT];
+///////////////////////////////////////////////////////////////////
+
+void writeRecord(MemPtr ptr, UInt32 size, UInt16 index, UInt16 dbID) {
+ Err e;
+
+ MemHandle recordH = DmNewRecord(dbP[dbID], &index, size);
+ MemPtr save = MemHandleLock(recordH);
+ e = DmWrite(save, 0, ptr, size);
+ MemHandleUnlock(recordH);
+ DmReleaseRecord (dbP[dbID], index, 0);
+}
+///////////////////////////////////////////////////////////////////
+
+void buildAll() {
+ Err err;
+ LocalID olddb;
+
+ olddb = DmFindDatabase(0, "Glbs::" BUILD_NAME);
+ if (olddb) {
+ DmDeleteDatabase(0,olddb);
+ FrmCustomAlert(1000,"delete old " BUILD_NAME " DB",0,0);
+ }
+ err = DmCreateDatabase (0, "Glbs::" BUILD_NAME, 'ScVM', 'GLBS', false);
+ olddb = DmFindDatabase(0, "Glbs::" BUILD_NAME);
+ dbP[BUILD_RES] = DmOpenDatabase(0, olddb, dmModeReadWrite);
+
+#if defined(BUILD_COMMON)
+ addNewGui();
+
+#elif defined(BUILD_SCUMM)
+ addDimuseTables();
+ // temp removed
+ // TODO ::scummvm use sizeof(OLD256_MIDI_HACK) so i need to fix it
+ // directly in the code or call MemHandleSize but it may slow down
+ // code execution
+ addAkos();
+ addDimuseCodecs();
+ addCodec47();
+ addGfx();
+ addDialogs();
+ addCharset();
+ addCostume();
+ addPlayerV2();
+ addScummTables();
+
+#elif defined(BUILD_SIMON)
+ addSimon();
+ Simon_addCharset();
+
+#elif defined(BUILD_SKY)
+ Sky_addHufftext();
+
+#elif defined(BUILD_QUEEN)
+ Queen_addTalk();
+ Queen_addRestables();
+ Queen_addGraphics();
+ Queen_addDisplay();
+ Queen_addMusicdata();
+
+#elif defined(BUILD_SWORD1)
+ Sword1_addStaticres();
+#endif
+
+ DmCloseDatabase(dbP[BUILD_RES]);
+}
diff --git a/backends/platform/PalmOS/Src/builder/b_globals.h b/backends/platform/PalmOS/Src/builder/b_globals.h
new file mode 100644
index 0000000000..6954a50999
--- /dev/null
+++ b/backends/platform/PalmOS/Src/builder/b_globals.h
@@ -0,0 +1,37 @@
+#include "enum_globals.h"
+
+typedef unsigned char byte;
+typedef UInt32 uint;
+typedef Int32 int32;
+typedef UInt32 uint32;
+
+
+void writeRecord(MemPtr ptr, UInt32 size, UInt16 index, UInt16 dbID);
+void buildAll();
+
+void addNewGui();
+void addGraphics();
+/////////////////////////////////
+void addDimuseTables();
+void addAkos();
+void addDimuseCodecs();
+void addCodec47();
+void addGfx();
+void addDialogs();
+void addCharset();
+void addCostume();
+void addPlayerV2();
+void addScummTables();
+/////////////////////////////////
+void addSimon();
+void Simon_addCharset();
+/////////////////////////////////
+void Queen_addTalk();
+void Queen_addRestables();
+void Queen_addGraphics();
+void Queen_addDisplay();
+void Queen_addMusicdata();
+/////////////////////////////////
+void Sky_addHufftext();
+/////////////////////////////////
+void Sword1_addStaticres();
diff --git a/backends/platform/PalmOS/Src/builder/builder.c b/backends/platform/PalmOS/Src/builder/builder.c
new file mode 100644
index 0000000000..8b30707b81
--- /dev/null
+++ b/backends/platform/PalmOS/Src/builder/builder.c
@@ -0,0 +1,442 @@
+#include <PalmOS.h>
+#include "BuilderRsc.h"
+
+
+/***********************************************************************
+ *
+ * Entry Points
+ *
+ ***********************************************************************/
+
+void buildAll();
+/***********************************************************************
+ *
+ * Internal Structures
+ *
+ ***********************************************************************/
+typedef struct
+ {
+ UInt8 replaceme;
+ } StarterPreferenceType;
+
+typedef struct
+ {
+ UInt8 replaceme;
+ } StarterAppInfoType;
+
+typedef StarterAppInfoType* StarterAppInfoPtr;
+
+
+/***********************************************************************
+ *
+ * Global variables
+ *
+ ***********************************************************************/
+//static Boolean HideSecretRecords;
+
+
+/***********************************************************************
+ *
+ * Internal Constants
+ *
+ ***********************************************************************/
+#define appFileCreator 'STRT' // register your own at http://www.palmos.com/dev/creatorid/
+#define appVersionNum 0x01
+#define appPrefID 0x00
+#define appPrefVersionNum 0x01
+
+// Define the minimum OS version we support.
+#define ourMinVersion sysMakeROMVersion(3,5,0,sysROMStageRelease,0)
+#define kPalmOS10Version sysMakeROMVersion(1,0,0,sysROMStageRelease,0)
+
+
+/***********************************************************************
+ *
+ * Internal Functions
+ *
+ ***********************************************************************/
+
+
+/***********************************************************************
+ *
+ * FUNCTION: RomVersionCompatible
+ *
+ * DESCRIPTION: This routine checks that a ROM version is meet your
+ * minimum requirement.
+ *
+ * PARAMETERS: requiredVersion - minimum rom version required
+ * (see sysFtrNumROMVersion in SystemMgr.h
+ * for format)
+ * launchFlags - flags that indicate if the application
+ * UI is initialized.
+ *
+ * RETURNED: error code or zero if rom is compatible
+ *
+ * REVISION HISTORY:
+ *
+ *
+ ***********************************************************************/
+static Err RomVersionCompatible(UInt32 requiredVersion, UInt16 launchFlags)
+{
+ UInt32 romVersion;
+
+ // See if we're on in minimum required version of the ROM or later.
+ FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion);
+ if (romVersion < requiredVersion)
+ {
+ if ((launchFlags & (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) ==
+ (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp))
+ {
+ FrmAlert (RomIncompatibleAlert);
+
+ // Palm OS 1.0 will continuously relaunch this app unless we switch to
+ // another safe one.
+ if (romVersion <= kPalmOS10Version)
+ {
+ AppLaunchWithCommand(sysFileCDefaultApp, sysAppLaunchCmdNormalLaunch, NULL);
+ }
+ }
+
+ return sysErrRomIncompatible;
+ }
+
+ return errNone;
+}
+
+
+/***********************************************************************
+ *
+ * FUNCTION: GetObjectPtr
+ *
+ * DESCRIPTION: This routine returns a pointer to an object in the current
+ * form.
+ *
+ * PARAMETERS: formId - id of the form to display
+ *
+ * RETURNED: void *
+ *
+ * REVISION HISTORY:
+ *
+ *
+ ***********************************************************************/
+static void * GetObjectPtr(UInt16 objectID)
+{
+ FormPtr frmP;
+
+ frmP = FrmGetActiveForm();
+ return FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, objectID));
+}
+
+
+/***********************************************************************
+ *
+ * FUNCTION: MainFormInit
+ *
+ * DESCRIPTION: This routine initializes the MainForm form.
+ *
+ * PARAMETERS: frm - pointer to the MainForm form.
+ *
+ * RETURNED: nothing
+ *
+ * REVISION HISTORY:
+ *
+ *
+ ***********************************************************************/
+static void MainFormInit(FormPtr /*frmP*/)
+{
+}
+
+
+/***********************************************************************
+ *
+ * FUNCTION: MainFormDoCommand
+ *
+ * DESCRIPTION: This routine performs the menu command specified.
+ *
+ * PARAMETERS: command - menu item id
+ *
+ * RETURNED: nothing
+ *
+ * REVISION HISTORY:
+ *
+ *
+ ***********************************************************************/
+static Boolean MainFormDoCommand(UInt16 command)
+{
+ Boolean handled = false;
+ FormPtr frmP;
+
+ switch (command)
+ {
+ case MainOptionsAboutStarterApp:
+ MenuEraseStatus(0); // Clear the menu status from the display.
+ frmP = FrmInitForm (AboutForm);
+ FrmDoDialog (frmP); // Display the About Box.
+ FrmDeleteForm (frmP);
+ handled = true;
+ break;
+
+ }
+
+ return handled;
+}
+
+
+/***********************************************************************
+ *
+ * FUNCTION: MainFormHandleEvent
+ *
+ * DESCRIPTION: This routine is the event handler for the
+ * "MainForm" of this application.
+ *
+ * PARAMETERS: eventP - a pointer to an EventType structure
+ *
+ * RETURNED: true if the event has handle and should not be passed
+ * to a higher level handler.
+ *
+ * REVISION HISTORY:
+ *
+ *
+ ***********************************************************************/
+static Boolean MainFormHandleEvent(EventPtr eventP)
+{
+ Boolean handled = false;
+ FormPtr frmP;
+
+ switch (eventP->eType)
+ {
+ case menuEvent:
+ return MainFormDoCommand(eventP->data.menu.itemID);
+
+ case frmOpenEvent:
+ frmP = FrmGetActiveForm();
+ MainFormInit( frmP);
+ FrmDrawForm ( frmP);
+ handled = true;
+ break;
+
+ case ctlSelectEvent:
+ switch (eventP->data.ctlSelect.controlID)
+ {
+ case MainBuildButton:
+ buildAll();
+ break;
+ }
+ handled = true;
+ break;
+
+ case frmUpdateEvent:
+ // To do any custom drawing here, first call FrmDrawForm(), then do your
+ // drawing, and then set handled to true.
+ break;
+
+ default:
+ break;
+
+ }
+
+ return handled;
+}
+
+
+/***********************************************************************
+ *
+ * FUNCTION: AppHandleEvent
+ *
+ * DESCRIPTION: This routine loads form resources and set the event
+ * handler for the form loaded.
+ *
+ * PARAMETERS: event - a pointer to an EventType structure
+ *
+ * RETURNED: true if the event has handle and should not be passed
+ * to a higher level handler.
+ *
+ * REVISION HISTORY:
+ *
+ *
+ ***********************************************************************/
+static Boolean AppHandleEvent(EventPtr eventP)
+{
+ UInt16 formId;
+ FormPtr frmP;
+
+ if (eventP->eType == frmLoadEvent)
+ {
+ // Load the form resource.
+ formId = eventP->data.frmLoad.formID;
+ frmP = FrmInitForm(formId);
+ FrmSetActiveForm(frmP);
+
+ // Set the event handler for the form. The handler of the currently
+ // active form is called by FrmHandleEvent each time is receives an
+ // event.
+ switch (formId)
+ {
+ case MainForm:
+ FrmSetEventHandler(frmP, MainFormHandleEvent);
+ break;
+
+ default:
+// ErrFatalDisplay("Invalid Form Load Event");
+ break;
+
+ }
+ return true;
+ }
+
+ return false;
+}
+
+
+/***********************************************************************
+ *
+ * FUNCTION: AppEventLoop
+ *
+ * DESCRIPTION: This routine is the event loop for the application.
+ *
+ * PARAMETERS: nothing
+ *
+ * RETURNED: nothing
+ *
+ * REVISION HISTORY:
+ *
+ *
+ ***********************************************************************/
+static void AppEventLoop(void)
+{
+ UInt16 error;
+ EventType event;
+
+ do {
+ EvtGetEvent(&event, evtWaitForever);
+
+ if (! SysHandleEvent(&event))
+ if (! MenuHandleEvent(0, &event, &error))
+ if (! AppHandleEvent(&event))
+ FrmDispatchEvent(&event);
+
+ } while (event.eType != appStopEvent);
+}
+
+
+/***********************************************************************
+ *
+ * FUNCTION: AppStart
+ *
+ * DESCRIPTION: Get the current application's preferences.
+ *
+ * PARAMETERS: nothing
+ *
+ * RETURNED: Err value 0 if nothing went wrong
+ *
+ * REVISION HISTORY:
+ *
+ *
+ ***********************************************************************/
+static Err AppStart(void)
+{
+ StarterPreferenceType prefs;
+ UInt16 prefsSize;
+
+ // Read the saved preferences / saved-state information.
+ prefsSize = sizeof(StarterPreferenceType);
+ if (PrefGetAppPreferences(appFileCreator, appPrefID, &prefs, &prefsSize, true) !=
+ noPreferenceFound)
+ {
+ }
+
+ return errNone;
+}
+
+
+/***********************************************************************
+ *
+ * FUNCTION: AppStop
+ *
+ * DESCRIPTION: Save the current state of the application.
+ *
+ * PARAMETERS: nothing
+ *
+ * RETURNED: nothing
+ *
+ * REVISION HISTORY:
+ *
+ *
+ ***********************************************************************/
+static void AppStop(void)
+{
+ StarterPreferenceType prefs;
+
+ // Write the saved preferences / saved-state information. This data
+ // will saved during a HotSync backup.
+ PrefSetAppPreferences (appFileCreator, appPrefID, appPrefVersionNum,
+ &prefs, sizeof (prefs), true);
+
+ // Close all the open forms.
+ FrmCloseAllForms ();
+}
+
+
+/***********************************************************************
+ *
+ * FUNCTION: StarterPalmMain
+ *
+ * DESCRIPTION: This is the main entry point for the application.
+ *
+ * PARAMETERS: cmd - word value specifying the launch code.
+ * cmdPB - pointer to a structure that is associated with the launch code.
+ * launchFlags - word value providing extra information about the launch.
+ *
+ * RETURNED: Result of launch
+ *
+ * REVISION HISTORY:
+ *
+ *
+ ***********************************************************************/
+static UInt32 StarterPalmMain(UInt16 cmd, MemPtr /*cmdPBP*/, UInt16 launchFlags)
+{
+ Err error;
+
+ error = RomVersionCompatible (ourMinVersion, launchFlags);
+ if (error) return (error);
+
+ switch (cmd)
+ {
+ case sysAppLaunchCmdNormalLaunch:
+ error = AppStart();
+ if (error)
+ return error;
+
+ FrmGotoForm(MainForm);
+ AppEventLoop();
+ AppStop();
+ break;
+
+ default:
+ break;
+
+ }
+
+ return errNone;
+}
+
+
+/***********************************************************************
+ *
+ * FUNCTION: PilotMain
+ *
+ * DESCRIPTION: This is the main entry point for the application.
+ *
+ * PARAMETERS: cmd - word value specifying the launch code.
+ * cmdPB - pointer to a structure that is associated with the launch code.
+ * launchFlags - word value providing extra information about the launch.
+ * RETURNED: Result of launch
+ *
+ * REVISION HISTORY:
+ *
+ *
+ ***********************************************************************/
+UInt32 PilotMain( UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags)
+{
+ return StarterPalmMain(cmd, cmdPBP, launchFlags);
+}
diff --git a/backends/platform/PalmOS/Src/builder/enum_globals.h b/backends/platform/PalmOS/Src/builder/enum_globals.h
new file mode 100644
index 0000000000..45425299c6
--- /dev/null
+++ b/backends/platform/PalmOS/Src/builder/enum_globals.h
@@ -0,0 +1,112 @@
+#ifndef __ENUM_GLOBALS_H__
+#define __ENUM_GLOBALS_H__
+
+// Common
+enum {
+ GBVARS_GUIFONT_INDEX = 0
+};
+
+// Scumm
+enum {
+ GBVARS_DIGSTATEMUSICMAP_INDEX = 0,
+ GBVARS_DIGSTATEMUSICTABLE_INDEX,
+ GBVARS_DIGSEQMUSICTABLE_INDEX,
+ GBVARS_COMISTATEMUSICTABLE_INDEX,
+ GBVARS_COMISEQMUSICTABLE_INDEX,
+ GBVARS_FTSTATEMUSICTABLE_INDEX,
+ GBVARS_FTSEQMUSICTABLE_INDEX,
+ GBVARS_FTSEQNAMES_INDEX,
+ GBVARS_SMALLSCALETABLE_INDEX,
+ GBVARS_BIGSCALETABLE_INDEX,
+ GBVARS_IMCTABLE_INDEX,
+ GBVARS_CODEC47TABLE_INDEX,
+ GBVARS_TRANSITIONEFFECTS_INDEX,
+ GBVARS_STRINGMAPTABLEV7_INDEX,
+ GBVARS_STRINGMAPTABLEV6_INDEX,
+ GBVARS_STRINGMAPTABLEV5_INDEX,
+ GBVARS_GERMANCHARSETDATAV2_INDEX,
+ GBVARS_FRENCHCHARSETDATAV2_INDEX,
+ GBVARS_ENGLISHCHARSETDATAV2_INDEX,
+ GBVARS_ITALIANCHARSETDATAV2_INDEX,
+ GBVARS_SPANISHCHARSETDATAV2_INDEX,
+ GBVARS_NOTELENGTHS_INDEX,
+ GBVARS_HULLOFFSETS_INDEX,
+ GBVARS_HULLS_INDEX,
+ GBVARS_FREQMODLENGTHS_INDEX,
+ GBVARS_FREQMODOFFSETS_INDEX,
+ GBVARS_FREQMODTABLE_INDEX,
+ GBVARS_SPKFREQTABLE_INDEX,
+ GBVARS_PCJRFREQTABLE_INDEX,
+
+ GBVARS_MD5TABLE_INDEX
+//GBVARS_SMALLSCALETABLEAKOS_INDEX
+};
+// Simon
+enum {
+ GBVARS_SIMON1SETTINGS_INDEX = 0,
+ GBVARS_SIMON1ACORNSETTINGS_INDEX,
+ GBVARS_SIMON1AMIGASETTINGS_INDEX,
+ GBVARS_SIMON1DEMOSETTINGS_INDEX,
+ GBVARS_SIMON2WINSETTINGS_INDEX,
+ GBVARS_SIMON2DOSSETTINGS_INDEX,
+ GBVARS_RUSSIANVIDEOFONT_INDEX,
+ GBVARS_FRENCHVIDEOFONT_INDEX,
+ GBVARS_GERMANVIDEOFONT_INDEX,
+ GBVARS_HEBREWVIDEOFONT_INDEX,
+ GBVARS_ITALIANVIDEOFONT_INDEX,
+ GBVARS_SPANISHVIDEOFONT_INDEX,
+ GBVARS_VIDEOFONT_INDEX,
+ GBVARS_SIMON1CURSOR_INDEX
+// GBVARS_SIMON2CURSORS_INDEX
+};
+// Queen
+enum {
+ GBVARS_SPEECHPARAMETERS_INDEX = 0,
+ GBVARS_RESOURCETABLEPM10_INDEX,
+ GBVARS_GRAPHICSCARDATA_INDEX,
+ GBVARS_GRAPHICSFIGHT1DATA_INDEX,
+ GBVARS_GRAPHICSFIGHT2DATA_INDEX,
+ GBVARS_GRAPHICSFIGHT3DATA_INDEX,
+ GBVARS_DISPLAYFONTREGULAR_INDEX,
+ GBVARS_DISPLAYFONTHEBREW_INDEX,
+ GBVARS_DISPLAYPALJOECLOTHES_INDEX,
+ GBVARS_DISPLAYPALJOEDRESS_INDEX,
+ GBVARS_MUSICDATASONGDEMO_INDEX,
+ GBVARS_MUSICDATASONG_INDEX,
+ GBVARS_MUSICDATATUNEDEMO_INDEX,
+ GBVARS_MUSICDATATUNE_INDEX,
+ GBVARS_MUSICDATASFXNAME_INDEX,
+ GBVARS_MUSICDATAJUNGLELIST_INDEX
+};
+// Sky
+enum {
+ GBVARS_HUFFTREE_00109_INDEX = 0,
+ GBVARS_HUFFTREE_00267_INDEX,
+ GBVARS_HUFFTREE_00288_INDEX,
+ GBVARS_HUFFTREE_00303_INDEX,
+ GBVARS_HUFFTREE_00331_INDEX,
+ GBVARS_HUFFTREE_00348_INDEX,
+ GBVARS_HUFFTREE_00365_INDEX,
+ GBVARS_HUFFTREE_00368_INDEX,
+ GBVARS_HUFFTREE_00372_INDEX,
+};
+// Sword1
+enum {
+ GBVARS_FXLIST_INDEX = 0
+};
+
+enum {
+ GBVARS_COMMON = 0,
+ GBVARS_ENGINE = 1,
+ GBVARS_SCUMM = GBVARS_ENGINE,
+ GBVARS_SIMON = GBVARS_ENGINE,
+ GBVARS_SKY = GBVARS_ENGINE,
+ GBVARS_SWORD1 = GBVARS_ENGINE,
+// GBVARS_SWORD2 = GBVARS_ENGINE,
+ GBVARS_QUEEN = GBVARS_ENGINE,
+ GBVARS_SAGA = GBVARS_ENGINE,
+
+ GBVARS_COUNT
+};
+
+#endif
diff --git a/backends/platform/PalmOS/Src/builder/queen/bq_display.c b/backends/platform/PalmOS/Src/builder/queen/bq_display.c
new file mode 100644
index 0000000000..9601729de7
--- /dev/null
+++ b/backends/platform/PalmOS/Src/builder/queen/bq_display.c
@@ -0,0 +1,297 @@
+#include <PalmOS.h>
+#include "b_globals.h"
+
+typedef UInt8 uint8;
+
+static void addDisplay_fontRegular() {
+ uint8 _fontRegular[] = {
+ 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+ 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+ 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+ 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+ 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+ 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+ 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+ 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+ 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+ 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+ 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+ 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+ 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+ 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+ 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+ 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0x00,
+ 0xD8, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x6C, 0xFE, 0x6C, 0xFE, 0x6C, 0x6C, 0x00,
+ 0x30, 0x7C, 0xC0, 0x78, 0x0C, 0xF8, 0x30, 0x00, 0x00, 0xC6, 0xCC, 0x18, 0x30, 0x66, 0xC6, 0x00,
+ 0x38, 0x6C, 0x68, 0x36, 0xDC, 0xCC, 0x76, 0x00, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x30, 0x60, 0xC0, 0xC0, 0xC0, 0x60, 0x30, 0x00, 0xC0, 0x60, 0x30, 0x30, 0x30, 0x60, 0xC0, 0x00,
+ 0x00, 0x6C, 0x38, 0xFE, 0x38, 0x6C, 0x00, 0x00, 0x00, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x00,
+ 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x30, 0x70, 0xF0, 0x30, 0x30, 0x30, 0x30, 0x00,
+ 0x78, 0xCC, 0x0C, 0x78, 0xC0, 0xC0, 0xFC, 0x00, 0x78, 0xCC, 0x0C, 0x38, 0x0C, 0xCC, 0x78, 0x00,
+ 0x1C, 0x3C, 0x6C, 0xCC, 0xFC, 0x0C, 0x0C, 0x00, 0xFC, 0xC0, 0xF8, 0x0C, 0x0C, 0xCC, 0x78, 0x00,
+ 0x78, 0xCC, 0xC0, 0xF8, 0xCC, 0xCC, 0x78, 0x00, 0xFC, 0xCC, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x00,
+ 0x78, 0xCC, 0xCC, 0x78, 0xCC, 0xCC, 0x78, 0x00, 0x78, 0xCC, 0xCC, 0x7C, 0x0C, 0xCC, 0x78, 0x00,
+ 0x00, 0xC0, 0xC0, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0xC0,
+ 0x18, 0x30, 0x60, 0xC0, 0x60, 0x30, 0x18, 0x00, 0x00, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0x00, 0x00,
+ 0xC0, 0x60, 0x30, 0x18, 0x30, 0x60, 0xC0, 0x00, 0x78, 0xCC, 0x0C, 0x18, 0x30, 0x00, 0x30, 0x00,
+ 0x6C, 0xFE, 0xFE, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x38, 0x7C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0x00,
+ 0xF8, 0xCC, 0xCC, 0xF8, 0xCC, 0xCC, 0xF8, 0x00, 0x78, 0xCC, 0xC0, 0xC0, 0xC0, 0xCC, 0x78, 0x00,
+ 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xF8, 0x00, 0xFC, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xFC, 0x00,
+ 0xFC, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xC0, 0x00, 0x78, 0xCC, 0xC0, 0xDC, 0xCC, 0xCC, 0x7C, 0x00,
+ 0xCC, 0xCC, 0xCC, 0xFC, 0xCC, 0xCC, 0xCC, 0x00, 0xF0, 0x60, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00,
+ 0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0xCC, 0x78, 0x00, 0xC6, 0xCC, 0xD8, 0xF8, 0xD8, 0xCC, 0xC6, 0x00,
+ 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFC, 0x00, 0x82, 0xC6, 0xEE, 0xFE, 0xD6, 0xC6, 0xC6, 0x00,
+ 0xC6, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0xC6, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00,
+ 0xF8, 0xCC, 0xCC, 0xF8, 0xC0, 0xC0, 0xC0, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xDC, 0x78, 0x0C,
+ 0xF8, 0xCC, 0xCC, 0xF8, 0xD8, 0xCC, 0xCC, 0x00, 0x78, 0xCC, 0xC0, 0x78, 0x0C, 0xCC, 0x78, 0x00,
+ 0xFC, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x00,
+ 0xC6, 0xC6, 0x6C, 0x6C, 0x38, 0x38, 0x10, 0x00, 0xC6, 0xC6, 0xC6, 0xD6, 0xFE, 0xEE, 0xC6, 0x00,
+ 0xC6, 0x6C, 0x38, 0x10, 0x38, 0x6C, 0xC6, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x30, 0x30, 0x00,
+ 0xFC, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xFC, 0x00, 0xF0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xF0, 0x00,
+ 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x00, 0xF0, 0x30, 0x30, 0x30, 0x30, 0x30, 0xF0, 0x00,
+ 0xE8, 0x4D, 0x4A, 0x48, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0xC0, 0xC0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0x7C, 0x00,
+ 0xC0, 0xC0, 0xF8, 0xCC, 0xCC, 0xCC, 0xF8, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xC0, 0xCC, 0x78, 0x00,
+ 0x0C, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xFC, 0xC0, 0x78, 0x00,
+ 0x38, 0x6C, 0x60, 0xF8, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x7C, 0xCC, 0xCC, 0x7C, 0x0C, 0x78,
+ 0xC0, 0xC0, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00,
+ 0x0C, 0x00, 0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0x78, 0xC0, 0xC0, 0xCC, 0xD8, 0xF0, 0xD8, 0xCC, 0x00,
+ 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0xCC, 0xEE, 0xD6, 0xC6, 0xC6, 0x00,
+ 0x00, 0x00, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0x78, 0x00,
+ 0x00, 0x00, 0xF8, 0xCC, 0xCC, 0xF8, 0xC0, 0xC0, 0x00, 0x00, 0x7C, 0xCC, 0xCC, 0x7C, 0x0C, 0x0C,
+ 0x00, 0x00, 0xF8, 0xCC, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x7C, 0xC0, 0x78, 0x0C, 0x78, 0x00,
+ 0x30, 0x30, 0xFC, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x00,
+ 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x00, 0x00, 0x00, 0xC6, 0xD6, 0xD6, 0x6C, 0x6C, 0x00,
+ 0x00, 0x00, 0xCC, 0x78, 0x30, 0x78, 0xCC, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0xE0,
+ 0x00, 0x00, 0xFC, 0x18, 0x30, 0x60, 0xFC, 0x00, 0x38, 0x60, 0x60, 0xC0, 0x60, 0x60, 0x38, 0x00,
+ 0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0x00, 0xE0, 0x30, 0x30, 0x18, 0x30, 0x30, 0xE0, 0x00,
+ 0x38, 0x44, 0xBA, 0xAA, 0xBA, 0x44, 0x38, 0x00, 0x00, 0x98, 0x30, 0x60, 0xC8, 0x98, 0x30, 0x00,
+ 0x1E, 0x30, 0x60, 0x60, 0x30, 0x1E, 0x0C, 0x18, 0x00, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00,
+ 0x0C, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x18, 0x66, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x18, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x30, 0x60, 0x60, 0x30, 0x1E, 0x0C, 0x18,
+ 0x18, 0x66, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x66, 0x00, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00,
+ 0x30, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x00, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00,
+ 0x18, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x30, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x30, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00,
+ 0x00, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x30, 0x18, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00,
+ 0x18, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x30, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x30, 0x78, 0x0C, 0x7C, 0xCC, 0x7C, 0x00, 0x0C, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00,
+ 0x18, 0x30, 0x00, 0x78, 0xCC, 0xCC, 0x78, 0x00, 0x18, 0x30, 0x00, 0xCC, 0xCC, 0xCC, 0x7C, 0x00,
+ 0x71, 0x8E, 0x00, 0x7C, 0x66, 0x66, 0x66, 0x00, 0x71, 0xCE, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0x00,
+ 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00, 0x3C, 0x60, 0x3C, 0x66, 0x3C, 0x06, 0x3C, 0x00,
+ 0x18, 0x00, 0x18, 0x30, 0x60, 0x66, 0x3C, 0x00, 0x3F, 0x40, 0x4E, 0x58, 0x4E, 0x40, 0x3F, 0x00,
+ 0x1C, 0xA4, 0xC4, 0xBC, 0x80, 0xFE, 0x00, 0x00, 0x00, 0x33, 0x66, 0xCC, 0x66, 0x33, 0x00, 0x00,
+ 0x3E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0x00,
+ 0x81, 0xB9, 0xA5, 0xB9, 0xA5, 0x81, 0x7E, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x78, 0xCC, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x00, 0xFC, 0x00,
+ 0xF0, 0x18, 0x30, 0x60, 0xF8, 0x00, 0x00, 0x00, 0xF0, 0x18, 0x30, 0x18, 0xF0, 0x00, 0x00, 0x00,
+ 0x30, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xFE, 0xC0,
+ 0x3E, 0x7A, 0x7A, 0x3A, 0x0A, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0x60, 0xE0, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00,
+ 0x38, 0x44, 0x44, 0x38, 0x00, 0x7C, 0x00, 0x00, 0x00, 0xCC, 0x66, 0x33, 0x66, 0xCC, 0x00, 0x00,
+ 0x40, 0xC6, 0x4C, 0x58, 0x32, 0x66, 0xCF, 0x02, 0x40, 0xC6, 0x4C, 0x58, 0x3E, 0x62, 0xC4, 0x0E,
+ 0xC0, 0x23, 0x66, 0x2C, 0xD9, 0x33, 0x67, 0x01, 0x18, 0x00, 0x18, 0x30, 0x60, 0x66, 0x3C, 0x00,
+ 0x60, 0x30, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x0C, 0x18, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00,
+ 0x38, 0xC6, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x71, 0x8E, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00,
+ 0x6C, 0x00, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x38, 0x44, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00,
+ 0x1F, 0x3C, 0x3C, 0x6F, 0x7C, 0xCC, 0xCF, 0x00, 0x1E, 0x30, 0x60, 0x60, 0x30, 0x1E, 0x0C, 0x18,
+ 0x60, 0x30, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 0x18, 0x30, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00,
+ 0x30, 0xCC, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 0xCC, 0x00, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00,
+ 0x60, 0x30, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, 0x18, 0x30, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00,
+ 0x30, 0xCC, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, 0xCC, 0x00, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00,
+ 0x78, 0x6C, 0x66, 0xF6, 0x66, 0x6C, 0x78, 0x00, 0x71, 0xCE, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0x00,
+ 0x30, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x0C, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00,
+ 0x18, 0x66, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00,
+ 0xC3, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x00, 0xC6, 0x6C, 0x38, 0x6C, 0xC6, 0x00, 0x00,
+ 0x3F, 0x66, 0x6E, 0x7E, 0x76, 0x66, 0xFC, 0x00, 0x30, 0x18, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00,
+ 0x0C, 0x18, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x18, 0x24, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00,
+ 0x66, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x06, 0x08, 0xC3, 0x66, 0x3C, 0x18, 0x18, 0x00,
+ 0x60, 0x60, 0x7E, 0x63, 0x7E, 0x60, 0x60, 0x00, 0x3C, 0x66, 0x66, 0x6C, 0x66, 0x66, 0x6C, 0x60,
+ 0x30, 0x18, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x0C, 0x18, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00,
+ 0x18, 0x66, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x71, 0x8E, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00,
+ 0x66, 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x18, 0x24, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00,
+ 0x00, 0x00, 0x7E, 0x1B, 0x7F, 0xD8, 0x77, 0x00, 0x00, 0x00, 0x3C, 0x60, 0x60, 0x60, 0x3C, 0x18,
+ 0x30, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x0C, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00,
+ 0x18, 0x66, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x66, 0x00, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00,
+ 0x30, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x0C, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00,
+ 0x18, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00,
+ 0x60, 0xFC, 0x18, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x00, 0x7C, 0x66, 0x66, 0x66, 0x00,
+ 0x30, 0x18, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x0C, 0x18, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00,
+ 0x18, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00,
+ 0x00, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x18, 0x00, 0x7E, 0x00, 0x18, 0x00, 0x00,
+ 0x00, 0x02, 0x7C, 0xCE, 0xD6, 0xE6, 0x7C, 0x80, 0x30, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00,
+ 0x0C, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x18, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00,
+ 0x00, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x0C, 0x18, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x30,
+ 0x60, 0x60, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x00, 0x66, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x30
+ };
+ writeRecord(_fontRegular, sizeof(_fontRegular), GBVARS_DISPLAYFONTREGULAR_INDEX , GBVARS_QUEEN);
+}
+
+static void addDisplay_fontHebrew() {
+ uint8 _fontHebrew[] = {
+ 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+ 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+ 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+ 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+ 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+ 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+ 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+ 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+ 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+ 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+ 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+ 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+ 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+ 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+ 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+ 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0x00,
+ 0xD8, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x6C, 0xFE, 0x6C, 0xFE, 0x6C, 0x6C, 0x00,
+ 0x30, 0x7C, 0xC0, 0x78, 0x0C, 0xF8, 0x30, 0x00, 0x00, 0xC6, 0xCC, 0x18, 0x30, 0x66, 0xC6, 0x00,
+ 0x38, 0x6C, 0x68, 0x36, 0xDC, 0xCC, 0x76, 0x00, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x30, 0x60, 0xC0, 0xC0, 0xC0, 0x60, 0x30, 0x00, 0xC0, 0x60, 0x30, 0x30, 0x30, 0x60, 0xC0, 0x00,
+ 0x00, 0x6C, 0x38, 0xFE, 0x38, 0x6C, 0x00, 0x00, 0x00, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x00,
+ 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x30, 0x70, 0xF0, 0x30, 0x30, 0x30, 0x30, 0x00,
+ 0x78, 0xCC, 0x0C, 0x78, 0xC0, 0xC0, 0xFC, 0x00, 0x78, 0xCC, 0x0C, 0x38, 0x0C, 0xCC, 0x78, 0x00,
+ 0x1C, 0x3C, 0x6C, 0xCC, 0xFC, 0x0C, 0x0C, 0x00, 0xFC, 0xC0, 0xF8, 0x0C, 0x0C, 0xCC, 0x78, 0x00,
+ 0x78, 0xCC, 0xC0, 0xF8, 0xCC, 0xCC, 0x78, 0x00, 0xFC, 0xCC, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x00,
+ 0x78, 0xCC, 0xCC, 0x78, 0xCC, 0xCC, 0x78, 0x00, 0x78, 0xCC, 0xCC, 0x7C, 0x0C, 0xCC, 0x78, 0x00,
+ 0x00, 0xC0, 0xC0, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0xC0,
+ 0x18, 0x30, 0x60, 0xC0, 0x60, 0x30, 0x18, 0x00, 0x00, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0x00, 0x00,
+ 0xC0, 0x60, 0x30, 0x18, 0x30, 0x60, 0xC0, 0x00, 0x78, 0xCC, 0x0C, 0x18, 0x30, 0x00, 0x30, 0x00,
+ 0x6C, 0xFE, 0xFE, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x38, 0x7C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0x00,
+ 0xF8, 0xCC, 0xCC, 0xF8, 0xCC, 0xCC, 0xF8, 0x00, 0x78, 0xCC, 0xC0, 0xC0, 0xC0, 0xCC, 0x78, 0x00,
+ 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xF8, 0x00, 0xFC, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xFC, 0x00,
+ 0xFC, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xC0, 0x00, 0x78, 0xCC, 0xC0, 0xDC, 0xCC, 0xCC, 0x7C, 0x00,
+ 0xCC, 0xCC, 0xCC, 0xFC, 0xCC, 0xCC, 0xCC, 0x00, 0xF0, 0x60, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00,
+ 0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0xCC, 0x78, 0x00, 0xC6, 0xCC, 0xD8, 0xF8, 0xD8, 0xCC, 0xC6, 0x00,
+ 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFC, 0x00, 0x82, 0xC6, 0xEE, 0xFE, 0xD6, 0xC6, 0xC6, 0x00,
+ 0xC6, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0xC6, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00,
+ 0xF8, 0xCC, 0xCC, 0xF8, 0xC0, 0xC0, 0xC0, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xDC, 0x78, 0x0C,
+ 0xF8, 0xCC, 0xCC, 0xF8, 0xD8, 0xCC, 0xCC, 0x00, 0x78, 0xCC, 0xC0, 0x78, 0x0C, 0xCC, 0x78, 0x00,
+ 0xFC, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x00,
+ 0xC6, 0xC6, 0x6C, 0x6C, 0x38, 0x38, 0x10, 0x00, 0xC6, 0xC6, 0xC6, 0xD6, 0xFE, 0xEE, 0xC6, 0x00,
+ 0xC6, 0x6C, 0x38, 0x10, 0x38, 0x6C, 0xC6, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x30, 0x30, 0x00,
+ 0xFC, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xFC, 0x00, 0xF0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xF0, 0x00,
+ 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x00, 0xF0, 0x30, 0x30, 0x30, 0x30, 0x30, 0xF0, 0x00,
+ 0xE8, 0x4D, 0x4A, 0x48, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0xC0, 0xC0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0x7C, 0x00,
+ 0xC0, 0xC0, 0xF8, 0xCC, 0xCC, 0xCC, 0xF8, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xC0, 0xCC, 0x78, 0x00,
+ 0x0C, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xFC, 0xC0, 0x78, 0x00,
+ 0x38, 0x6C, 0x60, 0xF8, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x7C, 0xCC, 0xCC, 0x7C, 0x0C, 0x78,
+ 0xC0, 0xC0, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00,
+ 0x0C, 0x00, 0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0x78, 0xC0, 0xC0, 0xCC, 0xD8, 0xF0, 0xD8, 0xCC, 0x00,
+ 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0xCC, 0xEE, 0xD6, 0xC6, 0xC6, 0x00,
+ 0x00, 0x00, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0x78, 0x00,
+ 0x00, 0x00, 0xF8, 0xCC, 0xCC, 0xF8, 0xC0, 0xC0, 0x00, 0x00, 0x7C, 0xCC, 0xCC, 0x7C, 0x0C, 0x0C,
+ 0x00, 0x00, 0xF8, 0xCC, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x7C, 0xC0, 0x78, 0x0C, 0x78, 0x00,
+ 0x30, 0x30, 0xFC, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x00,
+ 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x00, 0x00, 0x00, 0xC6, 0xD6, 0xD6, 0x6C, 0x6C, 0x00,
+ 0x00, 0x00, 0xCC, 0x78, 0x30, 0x78, 0xCC, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0xE0,
+ 0x00, 0x00, 0xFC, 0x18, 0x30, 0x60, 0xFC, 0x00, 0x38, 0x60, 0x60, 0xC0, 0x60, 0x60, 0x38, 0x00,
+ 0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0x00, 0xE0, 0x30, 0x30, 0x18, 0x30, 0x30, 0xE0, 0x00,
+ 0x38, 0x44, 0xBA, 0xAA, 0xBA, 0x44, 0x38, 0x00, 0x00, 0x98, 0x30, 0x60, 0xC8, 0x98, 0x30, 0x00,
+ 0xCC, 0x66, 0x76, 0xBC, 0x98, 0x8C, 0xE6, 0x00, 0xFC, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xFE, 0x00,
+ 0x78, 0x18, 0x18, 0x18, 0x38, 0x78, 0xD8, 0x00, 0xFE, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00,
+ 0xFE, 0x06, 0x06, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00,
+ 0x7C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0xFE, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00,
+ 0xDC, 0x66, 0xE6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0xF0, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xFE, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0xF8, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xF8, 0x00,
+ 0xC0, 0xFE, 0x06, 0x06, 0x0C, 0x18, 0x18, 0x00, 0xFE, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7E, 0x00,
+ 0xFC, 0x76, 0x66, 0x66, 0x66, 0x66, 0x6E, 0x00, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x00, 0xFE, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00,
+ 0xEE, 0x66, 0x66, 0x66, 0x66, 0x6C, 0xF8, 0x00, 0xFE, 0xC6, 0xC6, 0xF6, 0x06, 0x06, 0x06, 0x06,
+ 0xFE, 0xC6, 0xC6, 0xFE, 0x06, 0x06, 0xFE, 0x00, 0xFE, 0x66, 0x6C, 0x78, 0x60, 0x60, 0x60, 0x60,
+ 0xEE, 0x66, 0x3C, 0x18, 0x0C, 0x06, 0xFE, 0x00, 0xFE, 0x06, 0x0E, 0xD8, 0xF0, 0xF0, 0xC0, 0xC0,
+ 0xFC, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x00, 0xEE, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0x7C, 0x00,
+ 0xFF, 0x67, 0x67, 0x67, 0x67, 0x67, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00,
+ 0x00, 0x0C, 0x3E, 0x6C, 0x3E, 0x0C, 0x00, 0x00, 0x38, 0x6C, 0x60, 0xF0, 0x60, 0x60, 0xFC, 0x00,
+ 0x42, 0x3C, 0x66, 0x3C, 0x42, 0x00, 0x00, 0x00, 0xC3, 0x66, 0x3C, 0x18, 0x3C, 0x18, 0x18, 0x00,
+ 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00, 0x3C, 0x60, 0x3C, 0x66, 0x3C, 0x06, 0x3C, 0x00,
+ 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x40, 0x4E, 0x58, 0x4E, 0x40, 0x3F, 0x00,
+ 0x1C, 0xA4, 0xC4, 0xBC, 0x80, 0xFE, 0x00, 0x00, 0x00, 0x33, 0x66, 0xCC, 0x66, 0x33, 0x00, 0x00,
+ 0x3E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00,
+ 0x81, 0xB9, 0xA5, 0xB9, 0xA5, 0x81, 0x7E, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x78, 0xCC, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x00, 0xFC, 0x00,
+ 0xF0, 0x18, 0x30, 0x60, 0xF8, 0x00, 0x00, 0x00, 0xF0, 0x18, 0x30, 0x18, 0xF0, 0x00, 0x00, 0x00,
+ 0x30, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xFE, 0xC0,
+ 0x3E, 0x7A, 0x7A, 0x3A, 0x0A, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0x60, 0xE0, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00,
+ 0x38, 0x44, 0x44, 0x38, 0x00, 0x7C, 0x00, 0x00, 0x00, 0xCC, 0x66, 0x33, 0x66, 0xCC, 0x00, 0x00,
+ 0x40, 0xC6, 0x4C, 0x58, 0x32, 0x66, 0xCF, 0x02, 0x40, 0xC6, 0x4C, 0x58, 0x3E, 0x62, 0xC4, 0x0E,
+ 0xC0, 0x23, 0x66, 0x2C, 0xD9, 0x33, 0x67, 0x01, 0x18, 0x00, 0x18, 0x30, 0x60, 0x66, 0x3C, 0x00,
+ 0x60, 0x30, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x0C, 0x18, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00,
+ 0x38, 0xC6, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x71, 0x8E, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00,
+ 0x6C, 0x00, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x38, 0x44, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00,
+ 0x1F, 0x3C, 0x3C, 0x6F, 0x7C, 0xCC, 0xCF, 0x00, 0x1E, 0x30, 0x60, 0x60, 0x30, 0x1E, 0x0C, 0x18,
+ 0x60, 0x30, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 0x18, 0x30, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00,
+ 0x30, 0xCC, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 0xCC, 0x00, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00,
+ 0x60, 0x30, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, 0x18, 0x30, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00,
+ 0x30, 0xCC, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, 0xCC, 0x00, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00,
+ 0x78, 0x6C, 0x66, 0xF6, 0x66, 0x6C, 0x78, 0x00, 0x71, 0xCE, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0x00,
+ 0x30, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x0C, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00,
+ 0x18, 0x66, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00,
+ 0xC3, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x00, 0xC6, 0x6C, 0x38, 0x6C, 0xC6, 0x00, 0x00,
+ 0x3F, 0x66, 0x6E, 0x7E, 0x76, 0x66, 0xFC, 0x00, 0x30, 0x18, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00,
+ 0x0C, 0x18, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x18, 0x24, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00,
+ 0x66, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x06, 0x08, 0xC3, 0x66, 0x3C, 0x18, 0x18, 0x00,
+ 0x60, 0x60, 0x7E, 0x63, 0x7E, 0x60, 0x60, 0x00, 0x3C, 0x66, 0x66, 0x6C, 0x66, 0x66, 0x6C, 0x60,
+ 0x30, 0x18, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x0C, 0x18, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00,
+ 0x18, 0x66, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x71, 0x8E, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00,
+ 0x66, 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x18, 0x24, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00,
+ 0x00, 0x00, 0x7E, 0x1B, 0x7F, 0xD8, 0x77, 0x00, 0x00, 0x00, 0x3C, 0x60, 0x60, 0x60, 0x3C, 0x18,
+ 0x30, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x0C, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00,
+ 0x18, 0x66, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x66, 0x00, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00,
+ 0x30, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x0C, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00,
+ 0x18, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00,
+ 0x60, 0xFC, 0x18, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x00, 0x7C, 0x66, 0x66, 0x66, 0x00,
+ 0x30, 0x18, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x0C, 0x18, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00,
+ 0x18, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00,
+ 0x00, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x18, 0x00, 0x7E, 0x00, 0x18, 0x00, 0x00,
+ 0x00, 0x02, 0x7C, 0xCE, 0xD6, 0xE6, 0x7C, 0x80, 0x30, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00,
+ 0x0C, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x18, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00,
+ 0x00, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x0C, 0x18, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x30,
+ 0x60, 0x60, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x00, 0x66, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x30
+ };
+ writeRecord(_fontHebrew, sizeof(_fontHebrew), GBVARS_DISPLAYFONTHEBREW_INDEX , GBVARS_QUEEN);
+}
+
+static void addDisplay_palJoeClothes() {
+ uint8 _palJoeClothes[] = {
+ 0x00, 0x00, 0x00, 0x60, 0x60, 0x60, 0x87, 0x87, 0x87, 0xB0, 0xB0, 0xB0, 0xDA, 0xDA, 0xDA, 0x43,
+ 0x34, 0x20, 0x77, 0x33, 0x1F, 0xA3, 0x43, 0x27, 0x80, 0x45, 0x45, 0x9E, 0x5D, 0x5B, 0xB9, 0x78,
+ 0x75, 0xDF, 0x97, 0x91, 0x17, 0x27, 0x63, 0x1F, 0x3F, 0x83, 0x27, 0x5B, 0xA7, 0x98, 0xD4, 0xFF
+ };
+ writeRecord(_palJoeClothes, sizeof(_palJoeClothes), GBVARS_DISPLAYPALJOECLOTHES_INDEX , GBVARS_QUEEN);
+}
+
+static void addDisplay_palJoeDress() {
+ uint8 _palJoeDress[] = {
+ 0x00, 0x00, 0x00, 0x50, 0x50, 0x50, 0x70, 0x70, 0x70, 0x90, 0x90, 0x90, 0xC6, 0xC6, 0xC6, 0xFF,
+ 0xFF, 0xFF, 0x30, 0x30, 0x90, 0x47, 0x49, 0xD0, 0x40, 0x24, 0x00, 0x79, 0x34, 0x0B, 0xB2, 0x3D,
+ 0x22, 0xED, 0x42, 0x42, 0x80, 0x45, 0x45, 0xA3, 0x5F, 0x5F, 0xC8, 0x7C, 0x7C, 0xEC, 0x9C, 0x9C
+ };
+ writeRecord(_palJoeDress, sizeof(_palJoeDress), GBVARS_DISPLAYPALJOEDRESS_INDEX , GBVARS_QUEEN);
+}
+
+void Queen_addDisplay() {
+ addDisplay_fontRegular();
+ addDisplay_fontHebrew();
+ addDisplay_palJoeClothes();
+ addDisplay_palJoeDress();
+} \ No newline at end of file
diff --git a/backends/platform/PalmOS/Src/builder/queen/bq_graphics.c b/backends/platform/PalmOS/Src/builder/queen/bq_graphics.c
new file mode 100644
index 0000000000..910e9b61fb
--- /dev/null
+++ b/backends/platform/PalmOS/Src/builder/queen/bq_graphics.c
@@ -0,0 +1,302 @@
+#include <PalmOS.h>
+#include "b_globals.h"
+
+typedef Int16 int16;
+
+typedef struct {
+ int16 x, y;
+ int16 frame;
+} BamDataObj;
+
+typedef struct {
+ BamDataObj obj1; // truck / Frank
+ BamDataObj obj2; // Rico / robot
+ BamDataObj fx;
+ int16 sfx;
+} BamDataBlock;
+
+static void addGraphics_carData() {
+ BamDataBlock _carData[] = {
+ { { 310, 105, 1 }, { 314, 106, 17 }, { 366, 101, 1 }, 0 },
+ { { 303, 105, 1 }, { 307, 106, 17 }, { 214, 0, 10 }, 0 },
+ { { 297, 104, 1 }, { 301, 105, 17 }, { 214, 0, 10 }, 0 },
+ { { 294, 103, 1 }, { 298, 104, 17 }, { 214, 0, 10 }, 0 },
+ { { 291, 102, 1 }, { 295, 103, 18 }, { 214, 0, 10 }, 0 },
+ { { 287, 101, 1 }, { 291, 102, 18 }, { 266, 51, 10 }, 2 },
+ { { 283, 100, 1 }, { 287, 101, 19 }, { 279, 47, 11 }, 0 },
+ { { 279, 99, 1 }, { 283, 100, 20 }, { 294, 46, 12 }, 0 },
+ { { 274, 98, 1 }, { 278, 99, 20 }, { 305, 44, 13 }, 0 },
+ { { 269, 98, 1 }, { 273, 99, 20 }, { 320, 42, 14 }, 0 },
+ { { 264, 98, 1 }, { 268, 99, 17 }, { 214, 0, 10 }, 0 },
+ { { 261, 98, 1 }, { 265, 99, 17 }, { 214, 0, 10 }, 0 },
+ { { 259, 98, 1 }, { 263, 99, 17 }, { 214, 0, 10 }, 0 },
+ { { 258, 98, 1 }, { 262, 99, 17 }, { 214, 0, 10 }, 0 },
+ { { 257, 98, 2 }, { 260, 99, 17 }, { 214, 0, 10 }, 0 },
+ { { 255, 99, 3 }, { 258, 100, 17 }, { 214, 0, 10 }, 0 },
+ { { 258, 99, 4 }, { 257, 100, 17 }, { 214, 0, 10 }, 0 },
+ { { 264, 102, 4 }, { 263, 103, 17 }, { 214, 0, 10 }, 0 },
+ { { 272, 105, 5 }, { 274, 106, 17 }, { 214, 0, 10 }, 0 },
+ { { 276, 107, 5 }, { 277, 108, 17 }, { 214, 0, 10 }, 0 },
+ { { 283, 108, 5 }, { 284, 109, 17 }, { 214, 0, 10 }, 0 },
+ { { 288, 109, 5 }, { 288, 110, 17 }, { 214, 0, 10 }, 0 },
+ { { 293, 110, 5 }, { 293, 111, 18 }, { 266, 59, 10 }, 2 },
+ { { 298, 110, 5 }, { 299, 111, 18 }, { 277, 56, 11 }, 0 },
+ { { 303, 110, 5 }, { 304, 111, 19 }, { 285, 55, 12 }, 0 },
+ { { 308, 110, 4 }, { 307, 111, 20 }, { 296, 54, 13 }, 0 },
+ { { 309, 110, 3 }, { 312, 111, 20 }, { 304, 53, 14 }, 0 },
+ { { 310, 110, 3 }, { 313, 111, 20 }, { 214, 0, 10 }, 0 },
+ { { 311, 110, 3 }, { 314, 111, 17 }, { 214, 0, 10 }, 0 },
+ { { 309, 110, 2 }, { 312, 111, 17 }, { 214, 0, 10 }, 0 },
+ { { 304, 111, 2 }, { 307, 112, 17 }, { 214, 0, 10 }, 0 },
+ { { 300, 110, 2 }, { 303, 111, 17 }, { 214, 0, 10 }, 0 },
+ { { 296, 109, 2 }, { 299, 110, 17 }, { 214, 0, 10 }, 0 },
+ { { 292, 108, 1 }, { 296, 109, 17 }, { 214, 0, 10 }, 0 },
+ { { 285, 107, 2 }, { 289, 108, 17 }, { 214, 0, 10 }, 0 },
+ { { 282, 107, 3 }, { 285, 108, 17 }, { 214, 0, 10 }, 0 },
+ { { 278, 107, 4 }, { 277, 108, 18 }, { 214, 0, 10 }, 0 },
+ { { 279, 108, 4 }, { 278, 109, 18 }, { 252, 57, 10 }, 2 },
+ { { 281, 108, 5 }, { 283, 109, 18 }, { 265, 55, 11 }, 0 },
+ { { 284, 109, 5 }, { 285, 110, 19 }, { 277, 55, 12 }, 0 },
+ { { 287, 110, 5 }, { 288, 111, 20 }, { 288, 54, 13 }, 0 },
+ { { 289, 111, 5 }, { 290, 112, 20 }, { 299, 54, 14 }, 0 },
+ { { 291, 112, 4 }, { 290, 113, 20 }, { 214, 0, 10 }, 0 },
+ { { 293, 113, 3 }, { 295, 114, 17 }, { 214, 0, 10 }, 0 },
+ { { 296, 114, 2 }, { 299, 115, 17 }, { 214, 0, 10 }, 0 },
+ { { 295, 115, 2 }, { 298, 116, 17 }, { 214, 0, 10 }, 0 },
+ { { 293, 116, 1 }, { 297, 117, 17 }, { 214, 0, 10 }, 0 },
+ { { 289, 116, 1 }, { 292, 117, 17 }, { 214, 0, 10 }, 0 },
+ { { 285, 115, 1 }, { 289, 116, 17 }, { 214, 0, 10 }, 0 },
+ { { 281, 114, 1 }, { 284, 115, 17 }, { 214, 0, 10 }, 0 },
+ { { 277, 113, 1 }, { 280, 114, 17 }, { 214, 0, 10 }, 0 },
+ { { 274, 112, 1 }, { 277, 113, 17 }, { 214, 0, 10 }, 0 },
+ { { 271, 111, 1 }, { 274, 112, 17 }, { 214, 0, 10 }, 0 },
+ { { 267, 110, 1 }, { 270, 111, 17 }, { 214, 0, 10 }, 0 },
+ { { 263, 109, 1 }, { 266, 110, 17 }, { 214, 0, 10 }, 0 },
+ { { 260, 108, 1 }, { 263, 109, 17 }, { 214, 0, 10 }, 0 },
+ { { 254, 108, 2 }, { 256, 109, 17 }, { 214, 0, 10 }, 0 },
+ { { 252, 107, 3 }, { 254, 108, 17 }, { 214, 0, 10 }, 0 },
+ { { 253, 108, 3 }, { 255, 109, 17 }, { 214, 0, 10 }, 0 },
+ { { 255, 109, 3 }, { 257, 110, 18 }, { 231, 59, 10 }, 2 },
+ { { 258, 111, 3 }, { 260, 112, 18 }, { 242, 57, 11 }, 0 },
+ { { 263, 112, 4 }, { 262, 113, 19 }, { 256, 57, 12 }, 0 },
+ { { 270, 111, 4 }, { 269, 112, 20 }, { 267, 57, 13 }, 0 },
+ { { 274, 112, 5 }, { 276, 113, 20 }, { 281, 56, 14 }, 0 },
+ { { 280, 111, 6 }, { 282, 112, 19 }, { 214, 0, 10 }, 0 },
+ { { 284, 109, 6 }, { 285, 110, 17 }, { 214, 0, 10 }, 0 },
+ { { 289, 108, 6 }, { 291, 109, 17 }, { 214, 0, 10 }, 0 },
+ { { 294, 107, 6 }, { 296, 108, 17 }, { 214, 0, 10 }, 0 },
+ { { 294, 107, 5 }, { 296, 108, 18 }, { 272, 57, 10 }, 2 },
+ { { 295, 107, 5 }, { 297, 108, 18 }, { 282, 57, 11 }, 0 },
+ { { 296, 108, 5 }, { 298, 109, 19 }, { 295, 57, 12 }, 0 },
+ { { 300, 108, 4 }, { 299, 109, 20 }, { 303, 57, 13 }, 0 },
+ { { 303, 108, 3 }, { 306, 109, 20 }, { 313, 57, 14 }, 0 },
+ { { 307, 109, 2 }, { 311, 110, 17 }, { 214, 0, 10 }, 0 },
+ { { 310, 110, 1 }, { 314, 111, 17 }, { 214, 0, 10 }, 99 }
+ };
+ writeRecord(_carData, sizeof(_carData), GBVARS_GRAPHICSCARDATA_INDEX , GBVARS_QUEEN);
+}
+
+static void addGraphics_fight1Data() {
+ BamDataBlock _fight1Data[] = {
+ { { 75, 96, 1 }, { 187, 96, -23 }, { 58, 37, 46 }, 0 },
+ { { 75, 96, 2 }, { 187, 96, -23 }, { 58, 37, 46 }, 0 },
+ { { 75, 96, 3 }, { 187, 96, -23 }, { 58, 37, 46 }, 0 },
+ { { 75, 96, 4 }, { 187, 96, -23 }, { 58, 37, 46 }, 0 },
+ { { 75, 96, 1 }, { 187, 96, -23 }, { 58, 37, 46 }, 0 },
+ { { 75, 96, 2 }, { 187, 96, -23 }, { 58, 37, 46 }, 0 },
+ { { 75, 96, 3 }, { 187, 96, -23 }, { 58, 37, 46 }, 0 },
+ { { 75, 96, 4 }, { 187, 96, -24 }, { 58, 37, 46 }, 0 },
+ { { 79, 96, 1 }, { 187, 96, -24 }, { 58, 37, 46 }, 0 },
+ { { 85, 96, 2 }, { 187, 96, -24 }, { 58, 37, 46 }, 0 },
+ { { 94, 96, 3 }, { 187, 96, -24 }, { 58, 37, 46 }, 0 },
+ { { 100, 96, 4 }, { 187, 96, -24 }, { 58, 37, 46 }, 0 },
+ { { 113, 96, 1 }, { 187, 96, -25 }, { 58, 37, 46 }, 0 },
+ { { 121, 96, 1 }, { 187, 96, -25 }, { 58, 37, 46 }, 0 },
+ { { 136, 96, 16 }, { 187, 96, -26 }, { 58, 37, 46 }, 0 },
+ { { 151, 93, 6 }, { 187, 96, -27 }, { 58, 37, 46 }, 0 },
+ { { 159, 83, 16 }, { 187, 96, -28 }, { 58, 37, 46 }, 0 },
+ { { 170, 73, 16 }, { 187, 96, -29 }, { 182, 96, 48 }, 3 },
+ { { 176, 69, 13 }, { 187, 96, -31 }, { 182, 94, 49 }, 1 },
+ { { 168, 66, 13 }, { 187, 98, -32 }, { 182, 92, 50 }, 0 },
+ { { 155, 75, 13 }, { 187, 96, -32 }, { 182, 88, 51 }, 3 },
+ { { 145, 86, 13 }, { 187, 98, -32 }, { 182, 85, 52 }, 0 },
+ { { 127, 104, 13 }, { 187, 98, -32 }, { 182, 25, 52 }, 1 },
+ { { 122, 108, 13 }, { 187, 98, -32 }, { 182, 25, 52 }, 1 },
+ { { 120, 104, 14 }, { 187, 96, -34 }, { 107, 145, 42 }, 2 },
+ { { 111, 103, 13 }, { 187, 96, -23 }, { 107, 144, 43 }, 0 },
+ { { 102, 105, 13 }, { 187, 96, -23 }, { 107, 142, 43 }, 0 },
+ { { 97, 107, 13 }, { 187, 96, -23 }, { 107, 139, 44 }, 0 },
+ { { 92, 101, 14 }, { 187, 96, -23 }, { 107, 34, 47 }, 3 },
+ { { 90, 105, 14 }, { 187, 96, -23 }, { 107, 34, 47 }, 0 },
+ { { 88, 104, 14 }, { 187, 96, -23 }, { 107, 34, 47 }, 0 },
+ { { 87, 105, 14 }, { 187, 96, -23 }, { 107, 34, 47 }, 0 },
+ { { 86, 105, 14 }, { 187, 96, -23 }, { 107, 34, 47 }, 0 },
+ { { 86, 105, 14 }, { 187, 96, -23 }, { 107, 34, 47 }, 0 },
+ { { 86, 105, 15 }, { 187, 96, -23 }, { 0, 0, 0 }, 0 },
+ { { 85, 98, 16 }, { 187, 96, -23 }, { 0, 0, 0 }, 0 },
+ { { 92, 96, 1 }, { 187, 96, -23 }, { 0, 0, 0 }, 0 },
+ { { 92, 96, 1 }, { 187, 96, -23 }, { 0, 0, 0 }, 0 },
+ { { 89, 96, 4 }, { 187, 96, -23 }, { 0, 0, 0 }, 0 },
+ { { 86, 96, 3 }, { 187, 96, -23 }, { 0, 0, 0 }, 0 },
+ { { 83, 96, 2 }, { 187, 96, -23 }, { 0, 0, 0 }, 0 },
+ { { 81, 96, 1 }, { 187, 96, -23 }, { 0, 0, 0 }, 0 },
+ { { 78, 96, 4 }, { 187, 96, -23 }, { 0, 0, 0 }, 0 },
+ { { 75, 96, 3 }, { 187, 96, -23 }, { 0, 0, 0 }, 0 },
+ { { 75, 96, 1 }, { 187, 96, -23 }, { 0, 0, 0 }, 0 },
+ { { 75, 96, 1 }, { 187, 96, -23 }, { 0, 0, 0 }, 99 }
+ };
+ writeRecord(_fight1Data, sizeof(_fight1Data), GBVARS_GRAPHICSFIGHT1DATA_INDEX , GBVARS_QUEEN);
+}
+
+static void addGraphics_fight2Data() {
+ BamDataBlock _fight2Data[] = {
+ { { 75, 96, 1 }, { 187, 96, -23 }, { 150, 45, 35 }, 0 },
+ { { 78, 96, 2 }, { 187, 96, -23 }, { 150, 45, 35 }, 0 },
+ { { 81, 96, 3 }, { 189, 96, -18 }, { 150, 45, 35 }, 0 },
+ { { 84, 96, 4 }, { 183, 96, -19 }, { 150, 45, 35 }, 0 },
+ { { 87, 96, 1 }, { 181, 96, -20 }, { 150, 45, 35 }, 0 },
+ { { 90, 96, 2 }, { 177, 96, -21 }, { 150, 45, 35 }, 0 },
+ { { 93, 96, 3 }, { 171, 96, -22 }, { 150, 45, 35 }, 0 },
+ { { 96, 96, 4 }, { 169, 96, -17 }, { 150, 45, 35 }, 0 },
+ { { 99, 96, 1 }, { 165, 96, -18 }, { 150, 45, 35 }, 0 },
+ { { 102, 96, 2 }, { 159, 96, -19 }, { 150, 45, 35 }, 0 },
+ { { 105, 96, 3 }, { 157, 96, -20 }, { 150, 45, 35 }, 0 },
+ { { 108, 96, 4 }, { 153, 96, -21 }, { 150, 45, 35 }, 0 },
+ { { 111, 96, 1 }, { 147, 96, -22 }, { 150, 45, 35 }, 0 },
+ { { 114, 96, 2 }, { 147, 96, -23 }, { 150, 45, 35 }, 0 },
+ { { 117, 96, 3 }, { 147, 96, -23 }, { 150, 45, 35 }, 0 },
+ { { 120, 96, 4 }, { 147, 96, -24 }, { 150, 45, 35 }, 0 },
+ { { 123, 96, 1 }, { 147, 96, -25 }, { 150, 45, 35 }, 0 },
+ { { 125, 96, 2 }, { 147, 96, -25 }, { 150, 45, 35 }, 0 },
+ { { 127, 96, 12 }, { 147, 96, -69 }, { 122, 94, 36 }, 3 },
+ { { 127, 95, 11 }, { 147, 96, -70 }, { 122, 94, 41 }, 0 },
+ { { 127, 96, 12 }, { 147, 96, -71 }, { 122, 100, 36 }, 3 },
+ { { 127, 97, 11 }, { 147, 96, -69 }, { 122, 100, 41 }, 0 },
+ { { 127, 96, 12 }, { 147, 96, -70 }, { 127, 103, 36 }, 3 },
+ { { 127, 95, 11 }, { 147, 96, -71 }, { 127, 103, 41 }, 0 },
+ { { 127, 94, 12 }, { 147, 96, -69 }, { 123, 94, 36 }, 3 },
+ { { 127, 95, 11 }, { 147, 96, -70 }, { 123, 94, 41 }, 0 },
+ { { 127, 96, 12 }, { 147, 96, -71 }, { 120, 99, 36 }, 3 },
+ { { 127, 96, 12 }, { 147, 96, -71 }, { 115, 98, 41 }, 0 },
+ { { 117, 93, 11 }, { 147, 96, -25 }, { 115, 134, 42 }, 0 },
+ { { 110, 92, 11 }, { 147, 96, -25 }, { 114, 133, 42 }, 0 },
+ { { 102, 93, 11 }, { 147, 96, -25 }, { 114, 131, 43 }, 0 },
+ { { 92, 93, 11 }, { 147, 96, -25 }, { 114, 130, 43 }, 0 },
+ { { 82, 94, 11 }, { 147, 96, -25 }, { 114, 128, 44 }, 0 },
+ { { 76, 95, 11 }, { 147, 96, -25 }, { 114, 127, 44 }, 0 },
+ { { 70, 96, 11 }, { 147, 96, -25 }, { 114, 126, 45 }, 0 },
+ { { 75, 96, 5 }, { 147, 96, -25 }, { 114, 125, 46 }, 1 },
+ { { 75, 96, 6 }, { 147, 96, -25 }, { 114, 43, 46 }, 0 },
+ { { 75, 96, 6 }, { 147, 96, -25 }, { 114, 43, 46 }, 0 },
+ { { 75, 96, 5 }, { 147, 96, -25 }, { 114, 43, 46 }, 0 },
+ { { 75, 96, 7 }, { 147, 96, -25 }, { 114, 43, 46 }, 0 },
+ { { 75, 96, 68 }, { 147, 96, -25 }, { 114, 43, 46 }, 0 },
+ { { 75, 96, 68 }, { 147, 96, -25 }, { 89, 104, 36 }, 2 },
+ { { 75, 96, 68 }, { 147, 96, -25 }, { 94, 103, 62 }, 0 },
+ { { 75, 96, 68 }, { 147, 96, -25 }, { 122, 103, 63 }, 0 },
+ { { 75, 96, 68 }, { 147, 96, -25 }, { 141, 103, 64 }, 0 },
+ { { 75, 96, 68 }, { 147, 96, -30 }, { 150, 103, 65 }, 3 },
+ { { 75, 96, 68 }, { 156, 96, -30 }, { 160, 103, 66 }, 0 },
+ { { 75, 96, 7 }, { 164, 96, -30 }, { 169, 103, 67 }, 0 },
+ { { 75, 96, 5 }, { 169, 96, -30 }, { 177, 103, 48 }, 3 },
+ { { 75, 96, 5 }, { 173, 96, -30 }, { 185, 103, 49 }, 0 },
+ { { 75, 96, 6 }, { 178, 96, -30 }, { 198, 103, 50 }, 0 },
+ { { 75, 96, 6 }, { 181, 96, -30 }, { 207, 103, 51 }, 1 },
+ { { 75, 96, 5 }, { 184, 96, -30 }, { 221, 103, 52 }, 0 },
+ { { 75, 96, 5 }, { 186, 96, -30 }, { 224, 53, 53 }, 0 },
+ { { 75, 96, 5 }, { 187, 96, -23 }, { 224, 53, 53 }, 99 }
+ };
+ writeRecord(_fight2Data, sizeof(_fight2Data), GBVARS_GRAPHICSFIGHT2DATA_INDEX , GBVARS_QUEEN);
+}
+
+static void addGraphics_fight3Data() {
+ BamDataBlock _fight3Data[] = {
+ { { 75, 96, 1 }, { 187, 96, -23 }, { 150, 45, 35 }, 0 },
+ { { 77, 96, 2 }, { 187, 96, -22 }, { 150, 45, 35 }, 0 },
+ { { 80, 96, 3 }, { 185, 96, -17 }, { 150, 45, 35 }, 0 },
+ { { 83, 96, 4 }, { 181, 96, -18 }, { 150, 45, 35 }, 0 },
+ { { 86, 96, 1 }, { 175, 96, -19 }, { 150, 45, 35 }, 0 },
+ { { 88, 96, 2 }, { 173, 96, -20 }, { 150, 45, 35 }, 0 },
+ { { 91, 96, 3 }, { 169, 96, -21 }, { 150, 45, 35 }, 0 },
+ { { 94, 96, 4 }, { 163, 96, -22 }, { 150, 45, 35 }, 0 },
+ { { 97, 96, 1 }, { 161, 96, -17 }, { 150, 45, 35 }, 0 },
+ { { 99, 96, 2 }, { 157, 96, -18 }, { 150, 45, 35 }, 0 },
+ { { 102, 96, 3 }, { 151, 96, -19 }, { 150, 45, 35 }, 0 },
+ { { 105, 96, 4 }, { 149, 96, -20 }, { 150, 45, 35 }, 0 },
+ { { 108, 96, 1 }, { 145, 96, -21 }, { 150, 45, 35 }, 0 },
+ { { 110, 96, 2 }, { 145, 96, -25 }, { 150, 45, 35 }, 0 },
+ { { 113, 96, 3 }, { 145, 96, -26 }, { 132, 96, 36 }, 2 },
+ { { 117, 96, 7 }, { 145, 96, -27 }, { 122, 97, 36 }, 0 },
+ { { 117, 96, 7 }, { 145, 96, -28 }, { 117, 97, 37 }, 0 },
+ { { 116, 96, 12 }, { 145, 96, -24 }, { 110, 96, 38 }, 3 },
+ { { 109, 96, 12 }, { 145, 96, -24 }, { 103, 95, 39 }, 0 },
+ { { 105, 96, 12 }, { 145, 96, -24 }, { 95, 90, 40 }, 1 },
+ { { 96, 96, 11 }, { 145, 96, -24 }, { 86, 80, 41 }, 0 },
+ { { 92, 96, 11 }, { 145, 96, -24 }, { 86, 80, 41 }, 0 },
+ { { 93, 96, 5 }, { 145, 96, -24 }, { 86, 38, 41 }, 0 },
+ { { 91, 96, 5 }, { 145, 96, -24 }, { 86, 38, 41 }, 0 },
+ { { 89, 96, 5 }, { 145, 96, -24 }, { 86, 38, 41 }, 0 },
+ { { 88, 96, 5 }, { 145, 96, -24 }, { 86, 38, 41 }, 0 },
+ { { 87, 96, 6 }, { 145, 96, -24 }, { 86, 38, 41 }, 0 },
+ { { 87, 96, 6 }, { 145, 96, -23 }, { 86, 38, 41 }, 0 },
+ { { 87, 96, 6 }, { 145, 96, -23 }, { 86, 38, 41 }, 0 },
+ { { 87, 96, 5 }, { 145, 96, -23 }, { 86, 38, 41 }, 0 },
+ { { 87, 96, 5 }, { 145, 96, -23 }, { 86, 38, 41 }, 0 },
+ { { 87, 96, 6 }, { 145, 96, -23 }, { 86, 38, 41 }, 0 },
+ { { 87, 96, 6 }, { 145, 96, -23 }, { 86, 38, 41 }, 0 },
+ { { 87, 96, 5 }, { 145, 96, -23 }, { 86, 38, 41 }, 0 },
+ { { 87, 96, 5 }, { 145, 96, -23 }, { 86, 38, 41 }, 0 },
+ { { 87, 96, 6 }, { 145, 96, -23 }, { 86, 38, 41 }, 0 },
+ { { 87, 96, 6 }, { 145, 96, -26 }, { 86, 38, 41 }, 0 },
+ { { 87, 96, 6 }, { 145, 96, -27 }, { 132, 97, 36 }, 2 },
+ { { 87, 96, 5 }, { 145, 96, -28 }, { 118, 97, 36 }, 0 },
+ { { 87, 96, 7 }, { 145, 96, -24 }, { 107, 97, 36 }, 0 },
+ { { 87, 96, 8 }, { 145, 96, -24 }, { 101, 97, 36 }, 0 },
+ { { 87, 96, 9 }, { 145, 96, -23 }, { 102, 97, 66 }, 3 },
+ { { 87, 96, 10 }, { 145, 96, -23 }, { 120, 97, 67 }, 0 },
+ { { 87, 96, 10 }, { 145, 96, -30 }, { 139, 97, 67 }, 1 },
+ { { 87, 96, 7 }, { 146, 96, -30 }, { 144, 97, 62 }, 2 },
+ { { 86, 96, 4 }, { 160, 96, -30 }, { 144, 97, 48 }, 1 },
+ { { 83, 96, 3 }, { 170, 96, -31 }, { 154, 93, 49 }, 0 },
+ { { 80, 96, 2 }, { 174, 96, -31 }, { 161, 89, 50 }, 0 },
+ { { 78, 96, 1 }, { 178, 99, -31 }, { 169, 85, 51 }, 0 },
+ { { 75, 96, 4 }, { 183, 104, -31 }, { 175, 79, 52 }, 0 },
+ { { 75, 96, 1 }, { 185, 99, -32 }, { 180, 144, 42 }, 3 },
+ { { 75, 96, 1 }, { 185, 106, -31 }, { 181, 141, 42 }, 0 },
+ { { 75, 96, 5 }, { 185, 104, -31 }, { 181, 138, 43 }, 0 },
+ { { 75, 96, 5 }, { 188, 106, -31 }, { 182, 135, 43 }, 0 },
+ { { 75, 96, 6 }, { 191, 99, -32 }, { 183, 131, 44 }, 3 },
+ { { 75, 96, 6 }, { 191, 99, -32 }, { 183, 127, 45 }, 0 },
+ { { 75, 96, 5 }, { 191, 99, -32 }, { 184, 121, 46 }, 0 },
+ { { 75, 96, 5 }, { 191, 99, -32 }, { 183, 115, 46 }, 0 },
+ { { 75, 96, 6 }, { 191, 99, -32 }, { 183, 41, 47 }, 0 },
+ { { 75, 96, 6 }, { 191, 99, -32 }, { 183, 41, 47 }, 0 },
+ { { 75, 96, 6 }, { 191, 99, -32 }, { 183, 41, 47 }, 0 },
+ { { 75, 96, 5 }, { 191, 99, -32 }, { 183, 41, 47 }, 0 },
+ { { 75, 96, 5 }, { 191, 99, -32 }, { 183, 41, 47 }, 0 },
+ { { 75, 96, 5 }, { 191, 99, -32 }, { 183, 41, 47 }, 0 },
+ { { 75, 96, 5 }, { 191, 99, -32 }, { 183, 41, 47 }, 0 },
+ { { 75, 96, 5 }, { 191, 99, -32 }, { 183, 41, 47 }, 0 },
+ { { 75, 96, 6 }, { 191, 99, -32 }, { 183, 41, 47 }, 0 },
+ { { 75, 96, 6 }, { 191, 99, -32 }, { 183, 41, 47 }, 0 },
+ { { 75, 96, 5 }, { 195, 98, -33 }, { 183, 41, 47 }, 0 },
+ { { 75, 96, 6 }, { 191, 96, -34 }, { 183, 41, 47 }, 0 },
+ { { 75, 96, 6 }, { 193, 96, -25 }, { 183, 41, 47 }, 0 },
+ { { 75, 96, 5 }, { 193, 96, -24 }, { 183, 41, 47 }, 0 },
+ { { 75, 96, 5 }, { 193, 96, -24 }, { 183, 41, 47 }, 0 },
+ { { 75, 96, 5 }, { 193, 96, -24 }, { 183, 41, 47 }, 0 },
+ { { 75, 96, 6 }, { 191, 96, -18 }, { 183, 41, 47 }, 0 },
+ { { 75, 96, 6 }, { 190, 96, -19 }, { 183, 41, 47 }, 0 },
+ { { 75, 96, 6 }, { 187, 96, -20 }, { 183, 41, 47 }, 0 },
+ { { 75, 96, 1 }, { 187, 96, -23 }, { 183, 41, 47 }, 0 },
+ { { 75, 96, 1 }, { 187, 96, -23 }, { 183, 41, 47 }, 99 }
+ };
+ writeRecord(_fight3Data, sizeof(_fight3Data), GBVARS_GRAPHICSFIGHT3DATA_INDEX , GBVARS_QUEEN);
+}
+
+void Queen_addGraphics() {
+ addGraphics_carData();
+ addGraphics_fight1Data();
+ addGraphics_fight2Data();
+ addGraphics_fight3Data();
+}
diff --git a/backends/platform/PalmOS/Src/builder/queen/bq_musicdata.c b/backends/platform/PalmOS/Src/builder/queen/bq_musicdata.c
new file mode 100644
index 0000000000..0c6df08403
--- /dev/null
+++ b/backends/platform/PalmOS/Src/builder/queen/bq_musicdata.c
@@ -0,0 +1,1939 @@
+#include <PalmOS.h>
+#include "b_globals.h"
+
+typedef Int16 int16;
+
+typedef struct {
+ int16 tuneList[5];
+ int16 volume;
+ int16 tempo;
+ int16 reverb;
+ int16 override;
+ int16 ignore;
+} songData;
+
+typedef struct {
+ int16 tuneNum[9];
+ int16 sfx[2];
+ int16 mode;
+ int16 delay;
+} tuneData;
+
+static void addMusicdata_songDemo() {
+ songData _songDemo[] = {
+ /* 1 - Hotel Gangsters */
+ { { 1, 0 }, 128, 128, 128, 1, 0 },
+
+ /* 2 - Hotel General */
+ { { 2, 0 }, 128, 128, 128, 1, 0 },
+
+ /* 3 - Jungle */
+ { { 3, 4, 5, 6, 0 }, 128, 128, 128, 1, 0 },
+
+ /* 4 - Waterfall On */
+ { { 7, 0 }, 128, 128, 128, 0, 0 },
+
+ /* 5 - Vnormal */
+ { { 8, 0 }, 128, 128, 128, 2, 0 },
+
+ /* 6 - Trader Bob */
+ { { 9, 0 }, 120, 128, 128, 1, 0 },
+
+ /* 7 - Jetty Music */
+ { { 10, 0 }, 128, 128, 128, 1, 0 },
+
+ /* 8 - Ferry Music */
+ { { 11, 0 }, 128, 128, 128, 1, 0 },
+
+ /* 9 - Temple Upstairs */
+ { { 12, 0 }, 128, 128, 128, 1, 0 },
+
+ /* 10 - Temple Downstairs */
+ { { 13, 0 }, 128, 128, 128, 1, 0 },
+
+ /* 11 - Temple Maze */
+ { { 14, 0 }, 128, 128, 128, 1, 0 },
+
+ /* 12 - Temple Skull */
+ { { 15, 0 }, 128, 128, 128, 1, 0 },
+
+ /* 13 - Johns Theme (Love Story) */
+ { { 16, 0 }, 128, 128, 128, 1, 0 },
+
+ /* 14 - Vmedium */
+ { { 17, 0 }, 128, 128, 0, 2, 0 },
+
+ /* 15 - Vsoft */
+ { { 18, 0 }, 128, 128, 0, 2, 0 },
+
+ /* 16 - Floda Upstairs */
+ { { 19, 0 }, 128, 128, 0, 1, 0 },
+
+ /* 17 - Floda General */
+ { { 20, 0 }, 128, 128, 128, 1, 0 },
+
+ /* 18 - Klunks Room */
+ { { 21, 0 }, 110, 128, 128, 1, 0 },
+
+ /* 19 - Hotel Lola */
+ { { 22, 0 }, 120, 18128, 128, 1, 0 },
+
+ /* 20 - Hotel Escape 1 */
+ { { 23, 0 }, 128, 18128, 128, 1, 0 },
+
+ /* 21 - Amazon Fortress */
+ { { 24, 0 }, 128, 128, 128, 1, 0 },
+
+ /* 22 - Waterfall Off */
+ { { 25, 0 }, 128, 128, 128, 0, 0 },
+
+ /* 23 - Wave Torch */
+ { { 26, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 24 - Zombies Rez Out */
+ { { 27, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 25 - Open Door (standard) */
+ { { 28, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 26 - Close Door (standard) */
+ { { 29, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 27 - Cloth Unrolls */
+ { { 30, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 28 - Snake Slithers Off */
+ { { 31, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 29 - Hotel Fanfare 2 */
+ { { 32, 0 }, 128, 128, 128, 1, 1 },
+
+ /* 30 - Floda Secret */
+ { { 33, 0 }, 120, 128, 128, 1, 0 },
+
+ /* 31 - Temple Fanfare 1 */
+ { { 34, 0 }, 128, 128, 128, 1, 1 },
+ };
+
+ writeRecord(_songDemo, sizeof(_songDemo), GBVARS_MUSICDATASONGDEMO_INDEX , GBVARS_QUEEN);
+}
+
+static void addMusicdata_song() {
+ songData _song[] = {
+ /* 1 - Hotel Gangsters */
+ { { 1, 0 }, 128, 180, 0, 1, 0 },
+
+ /* 2 - Hotel General */
+ { { 2, 0 }, 128, 180, 0, 1, 0 },
+
+ /* 3 - Jungle */
+ { { 3, 4, 5, 6, 0 }, 128, 0, 0, 1, 0 },
+
+ /* 4 - Waterfall On */
+ { { 7, 0 }, 128, 0, 0, 0, 0 },
+
+ /* 5 - Vnormal */
+ { { 8, 0 }, 128, 0, 0, 2, 0 },
+
+ /* 6 - Trader Bob */
+ { { 9, 0 }, 120, 0, 0, 1, 0 },
+
+ /* 7 - Jetty Music */
+ { { 10, 0 }, 128, 0, 0, 1, 0 },
+
+ /* 8 - Ferry Music */
+ { { 11, 0 }, 128, 0, 0, 1, 0 },
+
+ /* 9 - Temple Upstairs */
+ { { 12, 0 }, 128, 0, 0, 1, 0 },
+
+ /* 10 - Temple Downstairs */
+ { { 13, 0 }, 128, 0, 0, 1, 0 },
+
+ /* 11 - Temple Maze */
+ { { 14, 0 }, 128, 0, 0, 1, 0 },
+
+ /* 12 - Temple Skull */
+ { { 15, 0 }, 128, 0, 0, 1, 0 },
+
+ /* 13 - Johns Theme (Love Story) */
+ { { 16, 0 }, 128, 0, 0, 1, 0 },
+
+ /* 14 - Vmedium */
+ { { 17, 0 }, 120, 0, 0, 2, 0 },
+
+ /* 15 - Vsoft */
+ { { 18, 0 }, 110, 0, 0, 2, 0 },
+
+ /* 16 - Floda Upstairs */
+ { { 19, 0 }, 110, 0, 0, 1, 0 },
+
+ /* 17 - Floda General */
+ { { 20, 0 }, 128, 0, 0, 1, 0 },
+
+ /* 18 - Klunks Room */
+ { { 21, 0 }, 128, 0, 0, 1, 0 },
+
+ /* 19 - Hotel Lola */
+ { { 22, 0 }, 120, 180, 0, 1, 0 },
+
+ /* 20 - Hotel Escape 1 */
+ { { 23, 0 }, 128, 180, 0, 1, 0 },
+
+ /* 21 - Amazon Fortress */
+ { { 24, 0 }, 128, 0, 0, 1, 0 },
+
+ /* 22 - Waterfall Off */
+ { { 25, 0 }, 128, 0, 0, 0, 0 },
+
+ /* 23 - Wave Torch */
+ { { 26, 0 }, 128, 0, 0, 0, 1 },
+
+ /* 24 - Zombies Rez Out */
+ { { 27, 0 }, 128, 0, 0, 0, 1 },
+
+ /* 25 - Open Door (standard) */
+ { { 28, 0 }, 128, 0, 0, 0, 1 },
+
+ /* 26 - Close Door (standard) */
+ { { 29, 0 }, 128, 0, 0, 0, 1 },
+
+ /* 27 - Cloth Unrolls */
+ { { 30, 0 }, 128, 0, 0, 0, 1 },
+
+ /* 28 - Snake Slithers Off */
+ { { 31, 0 }, 128, 0, 0, 0, 1 },
+
+ /* 29 - Hotel Fanfare 2 */
+ { { 32, 0 }, 128, 0, 0, 1, 1 },
+
+ /* 30 - Floda Secret */
+ { { 33, 0 }, 128, 0, 0, 1, 0 },
+
+ /* 31 - Temple Fanfare 1 */
+ { { 34, 0 }, 128, 0, 0, 1, 1 },
+
+ /* 32 - Commander Rocket 1 */
+ { { 35, 0 }, 128, 0, 0, 1, 0 },
+
+ /* 33 - Hotel Escape 2 */
+ { { 36, 0 }, 128, 180, 0, 1, 0 },
+
+ /* 34 - Back of Truck */
+ { { 37, 0 }, 128, 180, 0, 1, 0 },
+
+ /* 35 - Hotel Fanfare 1 */
+ { { 38, 0 }, 128, 0, 0, 1, 1 },
+
+ /* 36 - Truck Fanfare */
+ { { 39, 0 }, 128, 0, 0, 1, 1 },
+
+ /* 37 - Airport */
+ { { 40, 0 }, 128, 0, 0, 1, 0 },
+
+ /* 38 - Plane Leaves */
+ { { 41, 0 }, 128, 0, 0, 1, 1 },
+
+ /* 39 - Arrive Hotel */
+ { { 42, 0 }, 128, 0, 0, 1, 0 },
+
+ /* 40 - Jungle Fanfare */
+ { { 43, 0 }, 128, 0, 0, 1, 1 },
+
+ /* 41 - General Fanfare */
+ { { 44, 0 }, 128, 0, 0, 1, 1 },
+
+ /* 42 - Johns Room */
+ { { 45, 0 }, 128, 0, 0, 1, 0 },
+
+ /* 43 - Floda Lab */
+ { { 46, 0 }, 128, 0, 0, 1, 0 },
+
+ /* 44 - Azura's Theme */
+ { { 47, 0 }, 128, 0, 0, 1, 0 },
+
+ /* 45 - Use Record */
+ { { 48, 0 }, 128, 0, 0, 1, 1 },
+
+ /* 46 - Franks Theme */
+ { { 49, 0 }, 128, 0, 0, 1, 0 },
+
+ /* 47 - Anderson Doubts */
+ { { 50, 0 }, 128, 0, 0, 1, 0 },
+
+ /* 48 - Bud and Lou Theme */
+ { { 51, 0 }, 128, 0, 0, 1, 1 },
+
+ /* 49 - Gorilla Theme */
+ { { 52, 0 }, 128, 0, 0, 1, 1 },
+
+ /* 50 - Missionaries Theme */
+ { { 53, 0 }, 128, 0, 0, 1, 1 },
+
+ /* 51 - Sloth Theme */
+ { { 54, 0 }, 128, 0, 0, 1, 1 },
+
+ /* 52 - Amazon Dungeon */
+ { { 55, 0 }, 128, 0, 0, 1, 0 },
+
+ /* 53 - Throne Room */
+ { { 56, 0 }, 128, 0, 0, 1, 0 },
+
+ /* 54 - Temple Puzzle */
+ { { 57, 0 }, 128, 0, 0, 1, 0 },
+
+ /* 55 - Temple Fountain Room */
+ { { 58, 0 }, 128, 0, 0, 1, 0 },
+
+ /* 56 - Light Switch */
+ { { 59, 0 }, 128, 0, 0, 0, 1 },
+
+ /* 57 - Hydraulic Open */
+ { { 60, 0 }, 128, 0, 0, 0, 1 },
+
+ /* 58 - Hydraulic Close */
+ { { 61, 0 }, 128, 0, 0, 0, 1 },
+
+ /* 59 - Close Door (metal) */
+ { { 62, 0 }, 128, 0, 0, 0, 1 },
+
+ /* 60 - Small Hatch Close */
+ { { 63, 0 }, 128, 0, 0, 0, 1 },
+
+ /* 61 - Scissors Snip */
+ { { 64, 0 }, 128, 0, 0, 0, 1 },
+
+ /* 62 - Pick up Sticky */
+ { { 65, 0 }, 128, 0, 0, 0, 1 },
+
+ /* 63 - Oracle Rezzes In */
+ { { 66, 0 }, 128, 0, 0, 0, 1 },
+
+ /* 64 - Sparkle SFX */
+ { { 67, 0 }, 128, 0, 0, 0, 1 },
+
+ /* 65 - Splorch! */
+ { { 68, 0 }, 128, 0, 0, 0, 1 },
+
+ /* 66 - Pour Liquid */
+ { { 69, 0 }, 128, 0, 0, 0, 1 },
+
+ /* 67 - End Credit Medley */
+ { { 70, 0 }, 128, 0, 0, 1, 0 },
+
+ /* 68 - Dino Ray */
+ { { 71, 0 }, 128, 0, 0, 0, 1 },
+
+ /* 69 - Squish! */
+ { { 72, 0 }, 128, 0, 0, 0, 1 },
+
+ /* 70 - Robot Laser */
+ { { 73, 0 }, 128, 0, 0, 0, 1 },
+
+ /* 71 - Thud wood light */
+ { { 74, 0 }, 128, 0, 0, 0, 1 },
+
+ /* 72 - Thud wood deep */
+ { { 75, 0 }, 128, 0, 0, 0, 1 },
+
+ /* 73 - Thud metallic */
+ { { 76, 0 }, 128, 0, 0, 0, 1 },
+
+ /* 74 - Cut Coconut */
+ { { 77, 0 }, 128, 0, 0, 0, 1 },
+
+ /* 75 - Thud Stone */
+ { { 78, 0 }, 128, 0, 0, 0, 1 },
+
+ /* 76 - Cloth Slide 1 */
+ { { 79, 0 }, 128, 0, 0, 0, 1 },
+
+ /* 77 - Open Chest */
+ { { 80, 0 }, 128, 0, 0, 0, 1 },
+
+ /* 78 - Close Chest */
+ { { 81, 0 }, 128, 0, 0, 0, 1 },
+
+ /* 79 - Open Drawer */
+ { { 82, 0 }, 128, 0, 0, 0, 1 },
+
+ /* 80 - Truck door closes */
+ { { 83, 0 }, 128, 0, 0, 0, 1 },
+
+ /* 81 - Truck Starts */
+ { { 84, 0 }, 128, 0, 0, 0, 1 },
+
+ /* 82 - Truck Drives Off */
+ { { 85, 0 }, 128, 0, 0, 0, 1 },
+
+ /* 83 - Fish Splash */
+ { { 86, 0 }, 128, 0, 0, 0, 1 },
+
+ /* 84 - Close Drawer/Push Ladder */
+ { { 87, 0 }, 128, 0, 0, 0, 1 },
+
+ /* 85 - Agression Enhancer */
+ { { 88, 0 }, 128, 0, 0, 0, 1 },
+
+ /* 86 - Stone Door Grind 1 */
+ { { 89, 0 }, 128, 0, 0, 0, 1 },
+
+ /* 87 - Prequel 1 */
+ { { 90, 0 }, 128, 0, 0, 1, 0 },
+
+ /* 88 - Intro Credits */
+ { { 91, 0 }, 128, 0, 0, 1, 0 },
+
+ /* 89 - Valley 1 */
+ { { 92, 0 }, 128, 0, 0, 1, 0 },
+
+ /* 90 - Valley 3 */
+ { { 93, 0 }, 128, 0, 0, 1, 0 },
+
+ /* 91 - Fight Music */
+ { { 94, 0 }, 128, 0, 0, 1, 0 },
+
+ /* 92 - Confrontation 1 */
+ { { 95, 0 }, 128, 0, 0, 1, 0 },
+
+ /* 93 - Confrontation 2 */
+ { { 96, 0 }, 128, 0, 0, 1, 0 },
+
+ /* 94 - Plane Hatch Open */
+ { { 97, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 95 - Plane Hatch Close */
+ { { 98, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 96 - Tie Vines */
+ { { 99, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 97 - Pterodactyl */
+ { { 100, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 98 - Beef Jerky Splash */
+ { { 101, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 99 - Piranha Burp */
+ { { 102, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 100 - Falling Vine */
+ { { 103, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 101 - Stone Door Grind 2 */
+ { { 104, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 102 - Stone Grind (light) */
+ { { 105, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 103 - Ape Takes Off Mask */
+ { { 106, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 104 - Bark Breaks */
+ { { 107, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 105 - Stone Click */
+ { { 108, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 106 - Sproing! */
+ { { 109, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 107 - Cash Register */
+ { { 110, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 108 - Squeaky Toy */
+ { { 111, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 109 - Falling Chains */
+ { { 112, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 110 - Open Locker Door */
+ { { 113, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 111 - Close Locker Door */
+ { { 114, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 112 - Rub Pencil */
+ { { 115, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 113 - Open Safe */
+ { { 116, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 114 - Close Safe */
+ { { 117, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 115 - Push Chair */
+ { { 118, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 116 - Snake Hiss */
+ { { 119, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 117 - Oracle Rezzes Out */
+ { { 120, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 118 - Wall Crumbles */
+ { { 121, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 119 - Crypt Crumbles */
+ { { 122, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 120 - Joe Sucked Up */
+ { { 123, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 121 - Rocket Pack Zoom */
+ { { 124, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 122 - Piranha Splash */
+ { { 125, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 123 - Snap Branch */
+ { { 126, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 124 - Dino Horn */
+ { { 127, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 125 - Tyre Screech */
+ { { 128, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 126 - Oil Splat */
+ { { 129, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 127 - Punch */
+ { { 130, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 128 - Body Hits Ground */
+ { { 131, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 129 - Chicken */
+ { { 132, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 130 - Open Sarcophagus */
+ { { 133, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 131 - Close Sarcophagus */
+ { { 134, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 132 - Creaking Stick */
+ { { 135, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 133 - Pick Hits Stone */
+ { { 136, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 134 - Stalactite Crumbles */
+ { { 137, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 135 - Tic-Toc */
+ { { 138, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 136 - Stone Grind (heavy) */
+ { { 139, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 137 - Explosion */
+ { { 140, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 138 - Cloth Slide 2 */
+ { { 141, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 139 - Temple Laser */
+ { { 142, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 140 - Dino Transformation */
+ { { 143, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 141 - Experimental Laser */
+ { { 144, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 142 - Stone Grind (medium) */
+ { { 145, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 143 - Weeping God Grind */
+ { { 146, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 144 - Alien Hum */
+ { { 147, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 145 - Alien Puzzle */
+ { { 148, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 146 - Vacuum On */
+ { { 149, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 147 - Vacuum Off */
+ { { 150, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 148 - Elevator Starts */
+ { { 151, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 149 - Mummy Crumbles */
+ { { 152, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 150 - Temple Green Circle */
+ { { 153, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 151 - Rattle Bars */
+ { { 154, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 152 - Door Dissolves */
+ { { 155, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 153 - Altar Slides */
+ { { 156, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 154 - Light Torch */
+ { { 157, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 155 - Stamp Sound */
+ { { 158, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 156 - Plaster Loud */
+ { { 159, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 157 - Sparky Bathtub */
+ { { 160, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 158 - Ape Rezzes Out */
+ { { 161, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 159 - Song 159 */
+ { { 162, 0 }, 128, 128, 128, 1, 0 },
+
+ /* 160 - Song 160 */
+ { { 163, 0 }, 128, 128, 128, 1, 0 },
+
+ /* 161 - Song 161 */
+ { { 164, 0 }, 128, 128, 128, 1, 0 },
+
+ /* 162 - Piranhas Swim */
+ { { 165, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 163 - Prison/Dungeon Door */
+ { { 166, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 164 - Fight Explosion */
+ { { 167, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 165 - Press Button */
+ { { 168, 0 }, 128, 128, 128, 2, 1 },
+
+ /* 166 - Pull Lever */
+ { { 169, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 167 - Wrong Code */
+ { { 170, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 168 - Correct Code */
+ { { 171, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 169 - Sizzle */
+ { { 172, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 170 - Money In Slot */
+ { { 173, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 171 - Lightning Crack */
+ { { 174, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 172 - Machine Gun Fire */
+ { { 175, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 173 - Cage Descends */
+ { { 176, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 174 - Chair Activates */
+ { { 177, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 175 - Robot Powers On */
+ { { 178, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 176 - Grow Big */
+ { { 179, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 177 - Eat Food */
+ { { 180, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 178 - Head Shrink */
+ { { 181, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 179 - Grinding Gears */
+ { { 182, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 180 - Chair Splash */
+ { { 183, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 181 - Deflect Laser */
+ { { 184, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 182 - Zap Frank */
+ { { 185, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 183 - Frank Transforms */
+ { { 186, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 184 - Alarm Clock */
+ { { 187, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 185 - Slide Chute */
+ { { 188, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 186 - Puff */
+ { { 189, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 187 - Bite */
+ { { 190, 0 }, 128, 128, 128, 0, 0 },
+
+ /* 188 - Stone Door Grind 2 */
+ { { 191, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 189 - Prequel 2 */
+ { { 192, 0 }, 128, 128, 128, 1, 0 },
+
+ /* 190 - Prequel 3 */
+ { { 193, 0 }, 128, 128, 128, 1, 0 },
+
+ /* 191 - Prequel 4 */
+ { { 194, 0 }, 128, 128, 128, 1, 0 },
+
+ /* 192 - Stop Music */
+ { { 195, 0 }, 128, 128, 128, 1, 0 },
+
+ /* 193 - Plane Flyby */
+ { { 196, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 194 - Commander Rocket 2 */
+ { { 197, 0 }, 128, 128, 128, 1, 0 },
+
+ /* 195 - Commander Rocket 3 */
+ { { 198, 0 }, 128, 128, 128, 1, 0 },
+
+ /* 196 - Rescue */
+ { { 199, 0 }, 128, 128, 128, 1, 0 },
+
+ /* 197 - Slow Fanfare */
+ { { 200, 0 }, 128, 128, 128, 1, 0 },
+
+ /* 198 - Plane Crash */
+ { { 201, 0 }, 128, 128, 128, 1, 0 },
+
+ /* 199 - Plane Engine 1 */
+ { { 202, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 200 - Plane Engine 2 */
+ { { 203, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 201 - Boat In */
+ { { 204, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 202 - Boat Out */
+ { { 205, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 203 - Final Fanfare! */
+ { { 206, 0 }, 128, 128, 128, 1, 0 },
+
+ /* 204 - Frank Destroyed */
+ { { 207, 0 }, 128, 128, 128, 1, 0 },
+
+ /* 205 - Jaspar Eats */
+ { { 208, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 206 - Compy Scream 1 */
+ { { 209, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 207 - Compy Scream 2 */
+ { { 210, 0 }, 128, 128, 128, 0, 1 },
+
+ /* 208 - Punch Klunk Fanfare */
+ { { 211, 0 }, 128, 128, 128, 1, 0 },
+
+ /* 209 - Talk Frank */
+ { { 212, 0 }, 128, 128, 128, 1, 0 }
+ };
+
+ writeRecord(_song, sizeof(_song), GBVARS_MUSICDATASONG_INDEX , GBVARS_QUEEN);
+}
+
+static void addMusicdata_tuneDemo() {
+ tuneData _tuneDemo[] = {
+ /* 1 - Hotel Gangsters */
+ { { 32, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 2 - Hotel General */
+ { { 26, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 3 - Jungle */
+ { { 15, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 4 - Jungle */
+ { { 17, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 5 - Jungle */
+ { { 18, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 6 - Jungle */
+ { { 7, 8, 9, 10, 11, 12, 13, 14, 0 }, { 0, 0 }, 0, 0 },
+
+ /* 7 - Waterfall On */
+ { { 3, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 8 - Vnormal */
+ { { 1, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 9 - Trader Bob */
+ { { 1, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 10 - Jetty Music */
+ { { 37, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 11 - Ferry Music */
+ { { 38, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 12 - Temple Upstairs */
+ { { 30, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 13 - Temple Downstairs */
+ { { 34, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 14 - Temple Maze */
+ { { 35, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 15 - Temple Skull */
+ { { 36, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 16 - Johns Theme (Love Story) */
+ { { 43, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 17 - Vmedium */
+ { { 28, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 18 - Vsoft */
+ { { 28, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 19 - Floda Upstairs */
+ { { 28, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 20 - Floda General */
+ { { 29, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 21 - Klunks Room */
+ { { 39, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 22 - Hotel Lola */
+ { { 31, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 23 - Hotel Escape 1 */
+ { { 33, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 24 - Amazon Fortress */
+ { { 40, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 25 - Waterfall Off */
+ { { -3, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 26 - Wave Torch */
+ { { 22, 0 }, { 121, 0 }, 2, 0 },
+
+ /* 27 - Zombies Rez Out */
+ { { 25, 0 }, { 20, 0 }, 2, 0 },
+
+ /* 28 - Open Door (standard) */
+ { { 20, 0 }, { 1, 0 }, 2, 0 },
+
+ /* 29 - Close Door (standard) */
+ { { 21, 0 }, { 2, 0 }, 2, 0 },
+
+ /* 30 - Cloth Unrolls */
+ { { 23, 0 }, { 51, 0 }, 2, 0 },
+
+ /* 31 - Snake Slithers Off */
+ { { 24, 0 }, { 122, 0 }, 2, 0 },
+
+ /* 32 - Hotel Fanfare 2 */
+ { { 69, 1003, 0 }, { 0, 0 }, 2, 0 },
+
+ /* 33 - Floda Secret */
+ { { 28, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 34 - Temple Fanfare 1 */
+ { { 60, 162, 0 }, { 0, 0 }, 2, 0 },
+
+ /* 35 - Commander Rocket 1 */
+ { { 46, 0 }, { 0, 0 }, 1, 0 },
+ };
+ writeRecord(_tuneDemo, sizeof(_tuneDemo), GBVARS_MUSICDATATUNEDEMO_INDEX , GBVARS_QUEEN);
+}
+
+static void addMusicdata_tune() {
+ tuneData _tune[] = {
+ /* 1 - Hotel Gangsters */
+ { { 32, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 2 - Hotel General */
+ { { 41, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 3 - Jungle */
+ { { 15, 16, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 4 - Jungle */
+ { { 17, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 5 - Jungle */
+ { { 18, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 6 - Jungle */
+ { { 7, 8, 9, 10, 11, 12, 13, 14, 0 }, { 0, 0 }, 0, -10 },
+
+ /* 7 - Waterfall On */
+ { { 3, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 8 - Vnormal */
+ { { 23, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 9 - Trader Bob */
+ { { 23, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 10 - Jetty Music */
+ { { 37, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 11 - Ferry Music */
+ { { 38, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 12 - Temple Upstairs */
+ { { 30, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 13 - Temple Downstairs */
+ { { 34, 36, 56, 0 }, { 0, 0 }, 0, 0 },
+
+ /* 14 - Temple Maze */
+ { { 87, 35, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 15 - Temple Skull */
+ { { 76, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 16 - Johns Theme (Love Story) */
+ { { 44, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 17 - Vmedium */
+ { { 28, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 18 - Vsoft */
+ { { 28, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 19 - Floda Upstairs */
+ { { 28, 39, 0 }, { 0, 0 }, 0, 0 },
+
+ /* 20 - Floda General */
+ { { 89, 63, 64, 65, 0 }, { 0, 0 }, 0, 0 },
+
+ /* 21 - Klunks Room */
+ { { 43, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 22 - Hotel Lola */
+ { { 31, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 23 - Hotel Escape 1 */
+ { { 52, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 24 - Amazon Fortress */
+ { { 40, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 25 - Waterfall Off */
+ { {-3, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 26 - Wave Torch */
+ { { 0, 0 }, { 121, 0 }, 2, 0 },
+
+ /* 27 - Zombies Rez Out */
+ { { 0, 0 }, { 20, 0 }, 2, 0 },
+
+ /* 28 - Open Door (standard) */
+ { { 0, 0 }, { 1, 0 }, 2, 0 },
+
+ /* 29 - Close Door (standard) */
+ { { 0, 0 }, { 2, 0 }, 2, 0 },
+
+ /* 30 - Cloth Unrolls */
+ { { 0, 0 }, { 51, 0 }, 2, 0 },
+
+ /* 31 - Snake Slithers Off */
+ { { 0, 0 }, { 122, 0 }, 2, 0 },
+
+ /* 32 - Hotel Fanfare 2 */
+ { { 69, 2000, 0 }, { 0, 0 }, 2, 0 },
+
+ /* 33 - Floda Secret */
+ { { 29, 42, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 34 - Temple Fanfare 1 */
+ { { 70, 2000, 0 }, { 0, 0 }, 2, 0 },
+
+ /* 35 - Commander Rocket 1 */
+ { { 45, 0 }, { 0, 0 }, 2, 0 },
+
+ /* 36 - Hotel Escape 2 */
+ { { 52, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 37 - Back of Truck */
+ { { 51, 48, 33, 54, 52, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 38 - Hotel Fanfare 1 */
+ { { 67, 2000, 0 }, { 0, 0 }, 2, 0 },
+
+ /* 39 - Truck Fanfare */
+ { { 67, 177, 0 }, { 0, 0 }, 2, 0 },
+
+ /* 40 - Airport */
+ { { 81, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 41 - Plane Leaves */
+ { { 68, 1198, 0 }, { 0, 0 }, 2, 0 },
+
+ /* 42 - Arrive Hotel */
+ { { 26, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 43 - Jungle Fanfare */
+ { { 68, 2000, 0 }, { 0, 0 }, 2, 0 },
+
+ /* 44 - General Fanfare */
+ { { 57, 2000, 0 }, { 0, 0 }, 2, 0 },
+
+ /* 45 - Johns Room */
+ { { 90, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 46 - Floda Lab */
+ { { 92, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 47 - Azura's Theme */
+ { { 80, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 48 - Use Record */
+ { { 91, 2000, 0 }, { 0, 0 }, 2, 0 },
+
+ /* 49 - Franks Theme */
+ { { 77, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 50 - Anderson Doubts */
+ { { 75, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 51 - Bud and Lou Theme */
+ { { 94, 1003, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 52 - Gorilla Theme */
+ { { 97, 1003, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 53 - Missionaries Theme */
+ { { 98, 1003, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 54 - Sloth Theme */
+ { { 100, 1003, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 55 - Amazon Dungeon */
+ { { 96, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 56 - Throne Room */
+ { { 78, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 57 - Temple Puzzle */
+ { { 88, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 58 - Temple Fountain Room */
+ { { 55, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 59 - Light Switch */
+ { { 0, 0 }, { 4, 0 }, 2, 0 },
+
+ /* 60 - Hydraulic Open */
+ { { 0, 0 }, { 7, 0 }, 2, 0 },
+
+ /* 61 - Hydraulic Close */
+ { { 0, 0 }, { 8, 0 }, 2, 0 },
+
+ /* 62 - Close Door (metal) */
+ { { 0, 0 }, { 9, 0 }, 2, 0 },
+
+ /* 63 - Small Hatch Close */
+ { { 0, 0 }, { 10, 0 }, 2, 0 },
+
+ /* 64 - Scissors Snip */
+ { { 0, 0 }, { 5, 0 }, 2, 0 },
+
+ /* 65 - Pick up Sticky */
+ { { 0, 0 }, { 6, 0 }, 2, 0 },
+
+ /* 66 - Oracle Rezzes In */
+ { { 0, 0 }, { 11, 0 }, 2, 0 },
+
+ /* 67 - Sparkle SFX */
+ { { 0, 0 }, { 12, 0 }, 2, 0 },
+
+ /* 68 - Splorch! */
+ { { 0, 0 }, { 13, 0 }, 2, 0 },
+
+ /* 69 - Pour Liquid */
+ { { 0, 0 }, { 3, 0 }, 2, 0 },
+
+ /* 70 - End Credit Medley */
+ { { 95, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 71 - Dino Ray */
+ { { 0, 0 }, { 14, 0 }, 2, 0 },
+
+ /* 72 - Squish! */
+ { { 0, 0 }, { 15, 0 }, 2, 0 },
+
+ /* 73 - Robot Laser */
+ { { 0, 0 }, { 16, 0 }, 2, 0 },
+
+ /* 74 - Thud wood light */
+ { { 0, 0 }, { 17, 0 }, 2, 0 },
+
+ /* 75 - Thud wood deep */
+ { { 0, 0 }, { 18, 0 }, 2, 0 },
+
+ /* 76 - Thud metallic */
+ { { 0, 0 }, { 19, 0 }, 2, 0 },
+
+ /* 77 - Cut Coconut */
+ { { 0, 0 }, { 22, 0 }, 2, 0 },
+
+ /* 78 - Thud Stone */
+ { { 0, 0 }, { 23, 0 }, 2, 0 },
+
+ /* 79 - Cloth Slide 1 */
+ { { 0, 0 }, { 24, 0 }, 2, 0 },
+
+ /* 80 - Open Chest */
+ { { 0, 0 }, { 25, 0 }, 2, 0 },
+
+ /* 81 - Close Chest */
+ { { 0, 0 }, { 26, 0 }, 2, 0 },
+
+ /* 82 - Open Drawer */
+ { { 0, 0 }, { 27, 0 }, 2, 0 },
+
+ /* 83 - Truck door closes */
+ { { 0, 0 }, { 28, 0 }, 2, 0 },
+
+ /* 84 - Truck Starts */
+ { { 0, 0 }, { 29, 0 }, 2, 0 },
+
+ /* 85 - Truck Drives Off */
+ { { 0, 0 }, { 30, 0 }, 2, 0 },
+
+ /* 86 - Fish Splash */
+ { { 0, 0 }, { 31, 0 }, 2, 0 },
+
+ /* 87 - Close Drawer/Push Ladder */
+ { { 0, 0 }, { 33, 0 }, 2, 0 },
+
+ /* 88 - Agression Enhancer */
+ { { 0, 0 }, { 32, 0 }, 2, 0 },
+
+ /* 89 - Stone Door Grind 1 */
+ { { 0, 0 }, { 78, 0 }, 2, 0 },
+
+ /* 90 - Prequel 1 */
+ { { 20, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 91 - Intro Credits */
+ { { 21, 0 }, { 0, 0 }, 2, 0 },
+
+ /* 92 - Valley 1 */
+ { { 71, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 93 - Valley 3 */
+ { { 73, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 94 - Fight Music */
+ { { 72, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 95 - Confrontation 1 */
+ { { 93, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 96 - Confrontation 2 */
+ { { 74, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 97 - Plane Hatch Open */
+ { { 0, 0 }, { 35, 0 }, 2, 0 },
+
+ /* 98 - Plane Hatch Close */
+ { { 0, 0 }, { 36, 0 }, 2, 0 },
+
+ /* 99 - Tie Vines */
+ { { 0, 0 }, { 37, 0 }, 2, 0 },
+
+ /* 100 - Pterodactyl */
+ { { 0, 0 }, { 38, 0 }, 2, 0 },
+
+ /* 101 - Beef Jerky Splash */
+ { { 0, 0 }, { 39, 0 }, 2, 0 },
+
+ /* 102 - Piranha Burp */
+ { { 0, 0 }, { 40, 0 }, 2, 0 },
+
+ /* 103 - Falling Vine */
+ { { 0, 0 }, { 41, 0 }, 2, 0 },
+
+ /* 104 - Stone Door Grind 2 */
+ { { 0, 0 }, { 79, 0 }, 2, 0 },
+
+ /* 105 - Stone Grind (light) */
+ { { 0, 0 }, { 82, 0 }, 2, 0 },
+
+ /* 106 - Ape Takes Off Mask */
+ { { 0, 0 }, { 44, 0 }, 2, 0 },
+
+ /* 107 - Bark Breaks */
+ { { 0, 0 }, { 45, 0 }, 2, 0 },
+
+ /* 108 - Stone Click */
+ { { 0, 0 }, { 46, 0 }, 2, 0 },
+
+ /* 109 - Sproing! */
+ { { 0, 0 }, { 42, 0 }, 2, 0 },
+
+ /* 110 - Cash Register */
+ { { 0, 0 }, { 48, 0 }, 2, 0 },
+
+ /* 111 - Squeaky Toy */
+ { { 0, 0 }, { 49, 0 }, 2, 0 },
+
+ /* 112 - Falling Chains */
+ { { 0, 0 }, { 50, 0 }, 2, 0 },
+
+ /* 113 - Open Locker Door */
+ { { 0, 0 }, { 52, 0 }, 2, 0 },
+
+ /* 114 - Close Locker Door */
+ { { 0, 0 }, { 53, 0 }, 2, 0 },
+
+ /* 115 - Rub Pencil */
+ { { 0, 0 }, { 54, 0 }, 2, 0 },
+
+ /* 116 - Open Safe */
+ { { 0, 0 }, { 55, 0 }, 2, 0 },
+
+ /* 117 - Close Safe */
+ { { 0, 0 }, { 56, 0 }, 2, 0 },
+
+ /* 118 - Push Chair */
+ { { 0, 0 }, { 57, 0 }, 2, 0 },
+
+ /* 119 - Snake Hiss */
+ { { 0, 0 }, { 58, 0 }, 2, 0 },
+
+ /* 120 - Oracle Rezzes Out */
+ { { 0, 0 }, { 59, 0 }, 2, 0 },
+
+ /* 121 - Wall Crumbles */
+ { { 0, 0 }, { 60, 0 }, 2, 0 },
+
+ /* 122 - Crypt Crumbles */
+ { { 0, 0 }, { 61, 0 }, 2, 0 },
+
+ /* 123 - Joe Sucked Up */
+ { { 0, 0 }, { 63, 0 }, 2, 0 },
+
+ /* 124 - Rocket Pack Zoom */
+ { { 0, 0 }, { 47, 0 }, 2, 0 },
+
+ /* 125 - Piranha Splash */
+ { { 0, 0 }, { 83, 0 }, 2, 0 },
+
+ /* 126 - Snap Branch */
+ { { 0, 0 }, { 66, 0 }, 2, 0 },
+
+ /* 127 - Dino Horn */
+ { { 0, 0 }, { 67, 0 }, 2, 0 },
+
+ /* 128 - Tyre Screech */
+ { { 0, 0 }, { 68, 0 }, 2, 0 },
+
+ /* 129 - Oil Splat */
+ { { 0, 0 }, { 70, 0 }, 2, 0 },
+
+ /* 130 - Punch */
+ { { 0, 0 }, { 71, 0 }, 2, 0 },
+
+ /* 131 - Body Hits Ground */
+ { { 0, 0 }, { 72, 0 }, 2, 0 },
+
+ /* 132 - Chicken */
+ { { 0, 0 }, { 69, 0 }, 2, 0 },
+
+ /* 133 - Open Sarcophagus */
+ { { 0, 0 }, { 21, 0 }, 2, 0 },
+
+ /* 134 - Close Sarcophagus */
+ { { 0, 0 }, { 21, 0 }, 2, 0 },
+
+ /* 135 - Creaking Stick */
+ { { 0, 0 }, { 62, 0 }, 2, 0 },
+
+ /* 136 - Pick Hits Stone */
+ { { 0, 0 }, { 73, 0 }, 2, 0 },
+
+ /* 137 - Stalactite Crumbles */
+ { { 0, 0 }, { 74, 0 }, 2, 0 },
+
+ /* 138 - Tic-Toc */
+ { { 0, 0 }, { 76, 0 }, 2, 0 },
+
+ /* 139 - Stone Grind (heavy) */
+ { { 0, 0 }, { 81, 0 }, 2, 0 },
+
+ /* 140 - Explosion */
+ { { 0, 0 }, { 77, 0 }, 2, 0 },
+
+ /* 141 - Cloth Slide 2 */
+ { { 0, 0 }, { 84, 0 }, 2, 0 },
+
+ /* 142 - Temple Laser */
+ { { 0, 0 }, { 85, 0 }, 2, 0 },
+
+ /* 143 - Dino Transformation */
+ { { 0, 0 }, { 86, 0 }, 2, 0 },
+
+ /* 144 - Experimental Laser */
+ { { 0, 0 }, { 87, 0 }, 2, 0 },
+
+ /* 145 - Stone Grind (medium) */
+ { { 0, 0 }, { 88, 0 }, 2, 0 },
+
+ /* 146 - Weeping God Grind */
+ { { 0, 0 }, { 89, 0 }, 2, 0 },
+
+ /* 147 - Alien Hum */
+ { { 0, 0 }, { 90, 0 }, 2, 0 },
+
+ /* 148 - Alien Puzzle */
+ { { 0, 0 }, { 91, 0 }, 2, 0 },
+
+ /* 149 - Vacuum On */
+ { { 0, 0 }, { 92, 0 }, 2, 0 },
+
+ /* 150 - Vacuum Off */
+ { { 0, 0 }, { 93, 0 }, 2, 0 },
+
+ /* 151 - Elevator Starts */
+ { { 0, 0 }, { 94, 0 }, 2, 0 },
+
+ /* 152 - Mummy Crumbles */
+ { { 0, 0 }, { 95, 0 }, 2, 0 },
+
+ /* 153 - Temple Green Circle */
+ { { 0, 0 }, { 96, 0 }, 2, 0 },
+
+ /* 154 - Rattle Bars */
+ { { 0, 0 }, { 97, 0 }, 2, 0 },
+
+ /* 155 - Door Dissolves */
+ { { 0, 0 }, { 98, 0 }, 2, 0 },
+
+ /* 156 - Altar Slides */
+ { { 0, 0 }, { 99, 0 }, 2, 0 },
+
+ /* 157 - Light Torch */
+ { { 0, 0 }, { 100, 0 }, 2, 0 },
+
+ /* 158 - Stamp Sound */
+ { { 0, 0 }, { 34, 0 }, 2, 0 },
+
+ /* 159 - Plaster Loud */
+ { { 0, 0 }, { 102, 0 }, 2, 0 },
+
+ /* 160 - Sparky Bathtub */
+ { { 0, 0 }, { 103, 0 }, 2, 0 },
+
+ /* 161 - Ape Rezzes Out */
+ { { 0, 0 }, { 104, 0 }, 2, 0 },
+
+ /* 162 - Song 159 */
+ { { 0, 0 }, { 0, 0 }, 2, 0 },
+
+ /* 163 - Song 160 */
+ { { 0, 0 }, { 0, 0 }, 2, 0 },
+
+ /* 164 - Song 161 */
+ { { 0, 0 }, { 0, 0 }, 2, 0 },
+
+ /* 165 - Piranhas Swim */
+ { { 0, 0 }, { 105, 0 }, 2, 0 },
+
+ /* 166 - Prison/Dungeon Door */
+ { { 0, 0 }, { 43, 0 }, 2, 0 },
+
+ /* 167 - Fight Explosion */
+ { { 0, 0 }, { 80, 0 }, 2, 0 },
+
+ /* 168 - Press Button */
+ { { 0, 0 }, { 65, 0 }, 2, 0 },
+
+ /* 169 - Pull Lever */
+ { { 0, 0 }, { 107, 0 }, 2, 0 },
+
+ /* 170 - Wrong Code */
+ { { 0, 0 }, { 108, 0 }, 2, 0 },
+
+ /* 171 - Correct Code */
+ { { 0, 0 }, { 109, 0 }, 2, 0 },
+
+ /* 172 - Sizzle */
+ { { 0, 0 }, { 110, 0 }, 2, 0 },
+
+ /* 173 - Money In Slot */
+ { { 0, 0 }, { 111, 0 }, 2, 0 },
+
+ /* 174 - Lightning Crack */
+ { { 0, 0 }, { 112, 0 }, 2, 0 },
+
+ /* 175 - Machine Gun Fire */
+ { { 0, 0 }, { 113, 0 }, 2, 0 },
+
+ /* 176 - Cage Descends */
+ { { 0, 0 }, { 114, 0 }, 2, 0 },
+
+ /* 177 - Chair Activates */
+ { { 0, 0 }, { 115, 0 }, 2, 0 },
+
+ /* 178 - Robot Powers On */
+ { { 0, 0 }, { 116, 0 }, 2, 0 },
+
+ /* 179 - Grow Big */
+ { { 0, 0 }, { 117, 0 }, 2, 0 },
+
+ /* 180 - Eat Food */
+ { { 0, 0 }, { 118, 0 }, 2, 0 },
+
+ /* 181 - Head Shrink */
+ { { 0, 0 }, { 119, 0 }, 2, 0 },
+
+ /* 182 - Grinding Gears */
+ { { 0, 0 }, { 120, 0 }, 2, 0 },
+
+ /* 183 - Chair Splash */
+ { { 0, 0 }, { 123, 0 }, 2, 0 },
+
+ /* 184 - Deflect Laser */
+ { { 0, 0 }, { 124, 0 }, 2, 0 },
+
+ /* 185 - Zap Frank */
+ { { 0, 0 }, { 125, 0 }, 2, 0 },
+
+ /* 186 - Frank Transforms */
+ { { 0, 0 }, { 126, 0 }, 2, 0 },
+
+ /* 187 - Alarm Clock */
+ { { 0, 0 }, { 127, 0 }, 2, 0 },
+
+ /* 188 - Slide Chute */
+ { { 0, 0 }, { 64, 0 }, 2, 0 },
+
+ /* 189 - Puff */
+ { { 0, 0 }, { 128, 0 }, 2, 0 },
+
+ /* 190 - Bite */
+ { { 0, 0 }, { 129, 0 }, 2, 0 },
+
+ /* 191 - Stone Door Grind 2 */
+ { { 0, 0 }, { 79, 0 }, 2, 0 },
+
+ /* 192 - Prequel 2 */
+ { { 22, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 193 - Prequel 3 */
+ { { 24, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 194 - Prequel 4 */
+ { { 25, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 195 - Stop Music */
+ { { 1, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 196 - Plane Flyby */
+ { { 0, 0 }, { 101, 0 }, 2, 0 },
+
+ /* 197 - Commander Rocket 2 */
+ { { 46, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 198 - Commander Rocket 3 */
+ { { 47, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 199 - Rescue */
+ { { 99, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 200 - Slow Fanfare */
+ { { 0, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 201 - Plane Crash */
+ { { 93, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 202 - Plane Engine 1 */
+ { { 0, 0 }, { 130, 0 }, 2, 0 },
+
+ /* 203 - Plane Engine 2 */
+ { { 0, 0 }, { 131, 0 }, 2, 0 },
+
+ /* 204 - Boat In */
+ { { 0, 0 }, { 132, 0 }, 2, 0 },
+
+ /* 205 - Boat Out */
+ { { 0, 0 }, { 133, 0 }, 2, 0 },
+
+ /* 206 - Final Fanfare! */
+ { { 21, 95, 21, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 207 - Frank Destroyed */
+ { { 25, 1044, 0 }, { 0, 0 }, 1, 0 },
+
+
+ /* 208 - Jaspar Eats */
+ { { 0, 0 }, { 134, 0 }, 2, 0 },
+
+ /* 209 - Compy Scream 1 */
+ { { 0, 0 }, { 135, 0 }, 2, 0 },
+
+ /* 210 - Compy Scream 2 */
+ { { 0, 0 }, { 136, 0 }, 2, 0 },
+
+ /* 211 - Punch Klunk Fanfare */
+ { { 69, 1017, 0 }, { 0, 0 }, 1, 0 },
+
+ /* 212 - Talk Frank */
+ { { 77, 1017, 0 }, { 0, 0 }, 1, 0 }
+ };
+ writeRecord(_tune, sizeof(_tune), GBVARS_MUSICDATATUNE_INDEX , GBVARS_QUEEN);
+}
+
+static void addMusicdata_sfxName() {
+ const char *_sfxName[] = {
+ /* 1 - Door Open (standard) */
+ "116Bssss",
+
+ /* 2 - Door Close (standard) */
+ "105assss",
+
+ /* 3 - Pour Liquid */
+ "133sssss",
+
+ /* 4 - Light Switch */
+ "27ssssss",
+
+ /* 5 - Scissor Snip */
+ "15ssssss",
+
+ /* 6 - Pick up Sticky */
+ "79ssssss",
+
+ /* 7 - Hydraulic Doors Open */
+ "96ssssss",
+
+ /* 8 - Hydraulic Doors Close */
+ "97ssssss",
+
+ /* 9 - Metallic Door Slams */
+ "105sssss",
+
+ /* 10 - Small Hatch Close */
+ "106sssss",
+
+ /* 11 - Oracle Rezzes In */
+ "132sssss",
+
+ /* 12 - Polish Sparkle */
+ "132Cssss",
+
+ /* 13 - Splorch! */
+ "137Bssss",
+
+ /* 14 - Dino Ray Gun */
+ "138sssss",
+
+ /* 15 - Squish! */
+ "137Assss",
+
+ /* 16 - Robot Laser */
+ "61ssssss",
+
+ /* 17 - Thud wood light */
+ "109sssss",
+
+ /* 18 - Thud wood deep */
+ "110sssss",
+
+ /* 19 - Thud metallic */
+ "111sssss",
+
+ /* 20 - Zombies Rez Out */
+ "77ssssss",
+
+ /* 21 - Sarc Door Closes */
+ "58ssssss",
+
+ /* 22 - Thud breadboard fruit/Coconut */
+ "131Assss",
+
+ /* 23 - Thud stone */
+ "75ssssss",
+
+ /* 24 - Cloth Slide 1 */
+ "135sssss",
+
+ /* 25 - Open Chest */
+ "112sssss",
+
+ /* 26 - Close Chest */
+ "121sssss",
+
+ /* 27 - Open Drawer */
+ "120sssss",
+
+ /* 28 - Truck door closes */
+ "122sssss",
+
+ /* 29 - Truck Starts */
+ "123Assss",
+
+ /* 30 - Truck Drives Off */
+ "123Bssss",
+
+ /* 31 - Fish Splash */
+ "18ssssss",
+
+ /* 32 - Agression Enhancer */
+ "138Bssss",
+
+ /* 33 - Close Drawer/Push Ladder */
+ "113sssss",
+
+ /* 34 - *Stamp Sound */
+ "40ssssss",
+
+ /* 35 - plane hatch open */
+ "3sssssss",
+
+ /* 36 - plane hatch close */
+ "4sssssss",
+
+ /* 37 - tie vines */
+ "11ssssss",
+
+ /* 38 - Pterodactyl */
+ "10ssssss",
+
+ /* 39 - Beef Jerky Splash */
+ "6sssssss",
+
+ /* 40 - Piranha Burp */
+ "7sssssss",
+
+ /* 41 - Falling Vine */
+ "13ssssss",
+
+ /* 42 - Sproing! */
+ "29ssssss",
+
+ /* 43 - Prison/Dungeon Door */
+ "33ssssss",
+
+ /* 44 - Ape takes off mask */
+ "24ssssss",
+
+ /* 45 - Bark breaks */
+ "25ssssss",
+
+ /* 46 - Stone Click */
+ "136sssss",
+
+ /* 47 - Rocket Pack Zoom */
+ "1006ssss",
+
+ /* 48 - Cash Register */
+ "36ssssss",
+
+ /* 49 - Squeaky Toy */
+ "37ssssss",
+
+ /* 50 - Falling Chains */
+ "38ssssss",
+
+ /* 51 - Cloth Unravels */
+ "64ssssss",
+
+ /* 52 - Open Locker Door */
+ "48ssssss",
+
+ /* 53 - Close Locker Door */
+ "49ssssss",
+
+ /* 54 - Rub Pencil on Pad */
+ "50ssssss",
+
+ /* 55 - Open Safe */
+ "51ssssss",
+
+ /* 56 - Close Safe */
+ "52ssssss",
+
+ /* 57 - Push Chair */
+ "59ssssss",
+
+ /* 58 - Snake Hiss */
+ "83ssssss",
+
+ /* 59 - Oracle Rezzes Out */
+ "70ssssss",
+
+ /* 60 - Wall Crumbles */
+ "73Asssss",
+
+ /* 61 - Crypt Crumbles */
+ "76ssssss",
+
+ /* 62 - Creaking Stick */
+ "74Asssss",
+
+ /* 63 - Joe Sucked Up */
+ "80ssssss",
+
+ /* 64 - Slide Chute */
+ "114assss",
+
+ /* 65 - Press Button */
+ "1007ssss",
+
+ /* 66 - Snap Branch */
+ "101sssss",
+
+ /* 67 - Dino Horn */
+ "103sssss",
+
+ /* 68 - Tyre Screech */
+ "125sssss",
+
+ /* 69 - Chicken */
+ "126sssss",
+
+ /* 70 - Oil Splat */
+ "127sssss",
+
+ /* 71 - Punch */
+ "128sssss",
+
+ /* 72 - Body Hits Ground */
+ "129sssss",
+
+ /* 73 - Pick Hits Stone */
+ "71ssssss",
+
+ /* 74 - Stalactite Crumbles */
+ "119sssss",
+
+ /* 75 - *Drip */
+ "93ssssss",
+
+ /* 76 - Tic-Toc */
+ "42Bsssss",
+
+ /* 77 - Explosion */
+ "88ssssss",
+
+ /* 78 - Stone Door Grind 1 */
+ "1001ssss",
+
+ /* 79 - Stone Door Grind 2 */
+ "1002ssss",
+
+ /* 80 - *Fight Explosion */
+ "1000ssss",
+
+ /* 81 - Stone Grind (heavy) */
+ "1003ssss",
+
+ /* 82 - Stone Grind (light) */
+ "89ssssss",
+
+ /* 83 - Piranha Splash */
+ "5sssssss",
+
+ /* 84 - Cloth Slide 2 */
+ "1005ssss",
+
+ /* 85 - Temple Laser */
+ "87ssssss",
+
+ /* 86 - Dino Transformation */
+ "55Bsssss",
+
+ /* 87 - Experimental Laser */
+ "55ssssss",
+
+ /* 88 - Stone Grind (medium) */
+ "134sssss",
+
+ /* 89 - Weeping God Grind */
+ "94ssssss",
+
+ /* 90 - Alien Hum */
+ "95ssssss",
+
+ /* 91 - Alien Puzzle */
+ "103Assss",
+
+ /* 92 - Vacuum On */
+ "21ssssss",
+
+ /* 93 - Vacuum Off */
+ "21Csssss",
+
+ /* 94 - Elevator Starts */
+ "44ssssss",
+
+ /* 95 - Mummy Crumbles */
+ "68ssssss",
+
+ /* 96 - Temple Green Circle */
+ "60Bsssss",
+
+ /* 97 - Rattle Bars */
+ "115sssss",
+
+ /* 98 - Door Dissolves */
+ "56ssssss",
+
+ /* 99 - Altar Slides */
+ "85ssssss",
+
+ /* 100 - Light Torch */
+ "81ssssss",
+
+ /* 101 - Plane Flyby */
+ "1027ssss",
+
+ /* 102 - Plaster Loud */
+ "41Bsssss",
+
+ /* 103 - Sparky Bathtub */
+ "73ssssss",
+
+ /* 104 - Ape Rezzes Out */
+ "14ssssss",
+
+ /* 105 - Piranhas Swim */
+ "17ssssss",
+
+ /* 106 - *Gun Shot */
+ "1004ssss",
+
+ /* 107 - Pull Lever */
+ "1008ssss",
+
+ /* 108 - Wrong Code */
+ "1009ssss",
+
+ /* 109 - Correct Code */
+ "1010ssss",
+
+ /* 110 - Sizzle */
+ "1011ssss",
+
+ /* 111 - Money In Slot */
+ "1012ssss",
+
+ /* 112 - Lightning */
+ "1013ssss",
+
+ /* 113 - Machine Gun Fire */
+ "1014ssss",
+
+ /* 114 - Cage Descends */
+ "1015ssss",
+
+ /* 115 - Temple Chair Activates */
+ "1016ssss",
+
+ /* 116 - Robot Powers On */
+ "1017ssss",
+
+ /* 117 - Grow Big */
+ "1018ssss",
+
+ /* 118 - Eat Food */
+ "1019ssss",
+
+ /* 119 - Head Shrink */
+ "1020ssss",
+
+ /* 120 - Grinding Gears */
+ "84ssssss",
+
+ /* 121 - Wave Torch */
+ "1021ssss",
+
+ /* 122 - Snake Slithers Off */
+ "1022ssss",
+
+ /* 123 - Chair Splash */
+ "26ssssss",
+
+ /* 124 - Deflect Laser */
+ "60ssssss",
+
+ /* 125 - Zap Frank */
+ "1023ssss",
+
+ /* 126 - Frank Transforms */
+ "1024ssss",
+
+ /* 127 - Alarm Clock */
+ "1025ssss",
+
+ /* 128 - Puff */
+ "35ssssss",
+
+ /* 129 - Bite */
+ "1026ssss",
+
+ /* 130 - Plane Engine 1 */
+ "1028ssss",
+
+ /* 131 - Plane Engine 2 */
+ "1029ssss",
+
+ /* 132 - Boat In */
+ "1030ssss",
+
+ /* 133 - Boat Out */
+ "1031ssss",
+
+ /* 134 - Jaspar Eats */
+ "1032ssss",
+
+ /* 135 - Compy Scream 1 */
+ "1033ssss",
+
+ /* 136 - Compy Scream 2 */
+ "1034ssss"
+ };
+
+ const char *first = _sfxName[0];
+ const char *last = _sfxName[135];
+
+ UInt32 size = ((last - first) + 10);
+
+ writeRecord((void *)first, size, GBVARS_MUSICDATASFXNAME_INDEX , GBVARS_QUEEN);
+}
+
+static void addMusicdata_jungleList() {
+ int16 _jungleList[] = { 15, 16, 17, 18, 7, 8, 9, 10, 11, 12, 13, 14, 0 };
+
+ writeRecord(_jungleList, sizeof(_jungleList), GBVARS_MUSICDATAJUNGLELIST_INDEX , GBVARS_QUEEN);
+}
+
+void Queen_addMusicdata() {
+
+ addMusicdata_songDemo();
+ addMusicdata_song();
+ addMusicdata_tuneDemo();
+ addMusicdata_tune();
+ addMusicdata_sfxName();
+ addMusicdata_jungleList();
+}
diff --git a/backends/platform/PalmOS/Src/builder/queen/bq_restables.c b/backends/platform/PalmOS/Src/builder/queen/bq_restables.c
new file mode 100644
index 0000000000..29fd7fb370
--- /dev/null
+++ b/backends/platform/PalmOS/Src/builder/queen/bq_restables.c
@@ -0,0 +1,1096 @@
+#include <PalmOS.h>
+#include "b_globals.h"
+
+typedef struct {
+ char filename[13];
+ UInt8 inBundle;
+ UInt32 offset;
+ UInt32 size;
+} ResourceEntry;
+
+static void addRestables_resourceTablePEM10() {
+ ResourceEntry _resourceTablePEM10[] = {
+ { "1000SSSS.SB", 1, 0x00000000, 0x000027fe },
+ { "1001SSSS.SB", 1, 0x000027fe, 0x00007af8 },
+ { "1002SSSS.SB", 1, 0x0000a2f6, 0x000049e2 },
+ { "1003SSSS.SB", 1, 0x0000ecd8, 0x00001d42 },
+ { "1004SSSS.SB", 1, 0x00010a1a, 0x00001a1c },
+ { "1005SSSS.SB", 1, 0x00012436, 0x00001a8a },
+ { "1006SSSS.SB", 1, 0x00013ec0, 0x00009d41 },
+ { "1007SSSS.SB", 1, 0x0001dc01, 0x00001372 },
+ { "1008SSSS.SB", 1, 0x0001ef73, 0x00002e4a },
+ { "1009SSSS.SB", 1, 0x00021dbd, 0x0000220c },
+ { "1010SSSS.SB", 1, 0x00023fc9, 0x00003b1e },
+ { "1011SSSS.SB", 1, 0x00027ae7, 0x00000dd8 },
+ { "1012SSSS.SB", 1, 0x000288bf, 0x0000444c },
+ { "1013SSSS.SB", 1, 0x0002cd0b, 0x00007e66 },
+ { "1014SSSS.SB", 1, 0x00034b71, 0x00006e14 },
+ { "1015SSSS.SB", 1, 0x0003b985, 0x0000760c },
+ { "1016SSSS.SB", 1, 0x00042f91, 0x00004f8b },
+ { "1017SSSS.SB", 1, 0x00047f1c, 0x00004848 },
+ { "1018SSSS.SB", 1, 0x0004c764, 0x00007e94 },
+ { "1019SSSS.SB", 1, 0x000545f8, 0x00003a70 },
+ { "101SSSSS.SB", 1, 0x00058068, 0x0000191a },
+ { "1020SSSS.SB", 1, 0x00059982, 0x00004d90 },
+ { "1021SSSS.SB", 1, 0x0005e712, 0x00003dcc },
+ { "1023SSSS.SB", 1, 0x000624de, 0x00003d7f },
+ { "1024SSSS.SB", 1, 0x0006625d, 0x00004f8a },
+ { "1025SSSS.SB", 1, 0x0006b1e7, 0x00006488 },
+ { "1026SSSS.SB", 1, 0x0007166f, 0x00002022 },
+ { "1027SSSS.SB", 1, 0x00073691, 0x00009e76 },
+ { "1028SSSS.SB", 1, 0x0007d507, 0x0001b37c },
+ { "1029SSSS.SB", 1, 0x00098883, 0x0000ce2c },
+ { "1030SSSS.SB", 1, 0x000a56af, 0x0001e6e4 },
+ { "1031SSSS.SB", 1, 0x000c3d93, 0x00011532 },
+ { "1032SSSS.SB", 1, 0x000d52c5, 0x000034d4 },
+ { "1033SSSS.SB", 1, 0x000d8799, 0x00002de6 },
+ { "1034SSSS.SB", 1, 0x000db57f, 0x000099a1 },
+ { "103ASSSS.SB", 1, 0x000e4f20, 0x00005040 },
+ { "103SSSSS.SB", 1, 0x000e9f60, 0x00006a94 },
+ { "105ASSSS.SB", 1, 0x000f09f4, 0x00001d04 },
+ { "105SSSSS.SB", 1, 0x000f26f8, 0x000024de },
+ { "106SSSSS.SB", 1, 0x000f4bd6, 0x00000ac4 },
+ { "109SSSSS.SB", 1, 0x000f569a, 0x00000d96 },
+ { "10SSSSSS.SB", 1, 0x000f6430, 0x000013f6 },
+ { "110SSSSS.SB", 1, 0x000f7826, 0x00000c96 },
+ { "111SSSSS.SB", 1, 0x000f84bc, 0x00000f72 },
+ { "112SSSSS.SB", 1, 0x000f942e, 0x00000f1a },
+ { "113SSSSS.SB", 1, 0x000fa348, 0x00003f5e },
+ { "114ASSSS.SB", 1, 0x000fe2a6, 0x00001e54 },
+ { "115SSSSS.SB", 1, 0x001000fa, 0x00002580 },
+ { "116BSSSS.SB", 1, 0x0010267a, 0x00002350 },
+ { "119SSSSS.SB", 1, 0x001049ca, 0x00003808 },
+ { "11SSSSSS.SB", 1, 0x001081d2, 0x0000157e },
+ { "120SSSSS.SB", 1, 0x00109750, 0x00002be4 },
+ { "121SSSSS.SB", 1, 0x0010c334, 0x00001340 },
+ { "122SSSSS.SB", 1, 0x0010d674, 0x0000173e },
+ { "123ASSSS.SB", 1, 0x0010edb2, 0x00009e9d },
+ { "123BSSSS.SB", 1, 0x00118c4f, 0x0000f613 },
+ { "125SSSSS.SB", 1, 0x00128262, 0x0000e628 },
+ { "126SSSSS.SB", 1, 0x0013688a, 0x0000372e },
+ { "127SSSSS.SB", 1, 0x00139fb8, 0x0000ff1e },
+ { "128SSSSS.SB", 1, 0x00149ed6, 0x00000e34 },
+ { "129SSSSS.SB", 1, 0x0014ad0a, 0x00000b02 },
+ { "130SSSSS.SB", 1, 0x0014b80c, 0x00000a10 },
+ { "131ASSSS.SB", 1, 0x0014c21c, 0x000022d4 },
+ { "132CSSSS.SB", 1, 0x0014e4f0, 0x000094c3 },
+ { "132SSSSS.SB", 1, 0x001579b3, 0x00006183 },
+ { "133SSSSS.SB", 1, 0x0015db36, 0x00006a13 },
+ { "134SSSSS.SB", 1, 0x00164549, 0x00004ea3 },
+ { "135SSSSS.SB", 1, 0x001693ec, 0x000017c8 },
+ { "136SSSSS.SB", 1, 0x0016abb4, 0x000004a0 },
+ { "137ASSSS.SB", 1, 0x0016b054, 0x00001826 },
+ { "137BSSSS.SB", 1, 0x0016c87a, 0x00001d46 },
+ { "138BSSSS.SB", 1, 0x0016e5c0, 0x000065f9 },
+ { "138SSSSS.SB", 1, 0x00174bb9, 0x000053c3 },
+ { "13SSSSSS.SB", 1, 0x00179f7c, 0x00001f32 },
+ { "14SSSSSS.SB", 1, 0x0017beae, 0x00004921 },
+ { "15SSSSSS.SB", 1, 0x001807cf, 0x000007aa },
+ { "17SSSSSS.SB", 1, 0x00180f79, 0x00005080 },
+ { "18SSSSSS.SB", 1, 0x00185ff9, 0x000015e2 },
+ { "21CSSSSS.SB", 1, 0x001875db, 0x000048ec },
+ { "21SSSSSS.SB", 1, 0x0018bec7, 0x0000bb40 },
+ { "24SSSSSS.SB", 1, 0x00197a07, 0x000023fc },
+ { "25SSSSSS.SB", 1, 0x00199e03, 0x000016d8 },
+ { "26SSSSSS.SB", 1, 0x0019b4db, 0x000049dd },
+ { "27SSSSSS.SB", 1, 0x0019feb8, 0x000010a0 },
+ { "29SSSSSS.SB", 1, 0x001a0f58, 0x00004e50 },
+ { "33SSSSSS.SB", 1, 0x001a5da8, 0x00005218 },
+ { "35SSSSSS.SB", 1, 0x001aafc0, 0x00002c6c },
+ { "36SSSSSS.SB", 1, 0x001adc2c, 0x000031d2 },
+ { "37SSSSSS.SB", 1, 0x001b0dfe, 0x0000197a },
+ { "38SSSSSS.SB", 1, 0x001b2778, 0x00002162 },
+ { "3SSSSSSS.SB", 1, 0x001b48da, 0x00000d04 },
+ { "40SSSSSS.SB", 1, 0x001b55de, 0x00000268 },
+ { "41BSSSSS.SB", 1, 0x001b5846, 0x000005fe },
+ { "42BSSSSS.SB", 1, 0x001b5e44, 0x00000308 },
+ { "44SSSSSS.SB", 1, 0x001b614c, 0x000052c0 },
+ { "48SSSSSS.SB", 1, 0x001bb40c, 0x000010a8 },
+ { "49SSSSSS.SB", 1, 0x001bc4b4, 0x00001dd4 },
+ { "4SSSSSSS.SB", 1, 0x001be288, 0x000009d2 },
+ { "50SSSSSS.SB", 1, 0x001bec5a, 0x00003f8a },
+ { "51SSSSSS.SB", 1, 0x001c2be4, 0x000015da },
+ { "52SSSSSS.SB", 1, 0x001c41be, 0x0000125a },
+ { "55BSSSSS.SB", 1, 0x001c5418, 0x00003d7f },
+ { "55SSSSSS.SB", 1, 0x001c9197, 0x00004508 },
+ { "56SSSSSS.SB", 1, 0x001cd69f, 0x0000520b },
+ { "58SSSSSS.SB", 1, 0x001d28aa, 0x00003399 },
+ { "59SSSSSS.SB", 1, 0x001d5c43, 0x000032b8 },
+ { "5SSSSSSS.SB", 1, 0x001d8efb, 0x00004ae9 },
+ { "60BSSSSS.SB", 1, 0x001dd9e4, 0x000050f2 },
+ { "60SSSSSS.SB", 1, 0x001e2ad6, 0x00003c57 },
+ { "61SSSSSS.SB", 1, 0x001e672d, 0x0000513d },
+ { "64SSSSSS.SB", 1, 0x001eb86a, 0x00005a98 },
+ { "68SSSSSS.SB", 1, 0x001f1302, 0x00003e85 },
+ { "6SSSSSSS.SB", 1, 0x001f5187, 0x00001650 },
+ { "70SSSSSS.SB", 1, 0x001f67d7, 0x00009645 },
+ { "71SSSSSS.SB", 1, 0x001ffe1c, 0x00000fa3 },
+ { "73ASSSSS.SB", 1, 0x00200dbf, 0x00008812 },
+ { "73SSSSSS.SB", 1, 0x002095d1, 0x00006706 },
+ { "74ASSSSS.SB", 1, 0x0020fcd7, 0x000029b2 },
+ { "75SSSSSS.SB", 1, 0x00212689, 0x00000920 },
+ { "76SSSSSS.SB", 1, 0x00212fa9, 0x00004ef8 },
+ { "77SSSSSS.SB", 1, 0x00217ea1, 0x00003358 },
+ { "79SSSSSS.SB", 1, 0x0021b1f9, 0x000016a8 },
+ { "7SSSSSSS.SB", 1, 0x0021c8a1, 0x000010d4 },
+ { "80SSSSSS.SB", 1, 0x0021d975, 0x0000441e },
+ { "81SSSSSS.SB", 1, 0x00221d93, 0x0000517f },
+ { "83SSSSSS.SB", 1, 0x00226f12, 0x000043e3 },
+ { "84SSSSSS.SB", 1, 0x0022b2f5, 0x00003baa },
+ { "85SSSSSS.SB", 1, 0x0022ee9f, 0x00004470 },
+ { "87SSSSSS.SB", 1, 0x0023330f, 0x00005113 },
+ { "88SSSSSS.SB", 1, 0x00238422, 0x00005275 },
+ { "89SSSSSS.SB", 1, 0x0023d697, 0x00001a69 },
+ { "93SSSSSS.SB", 1, 0x0023f100, 0x00000470 },
+ { "94SSSSSS.SB", 1, 0x0023f570, 0x000051e4 },
+ { "95SSSSSS.SB", 1, 0x00244754, 0x0000343b },
+ { "96SSSSSS.SB", 1, 0x00247b8f, 0x00005110 },
+ { "97SSSSSS.SB", 1, 0x0024cc9f, 0x00004972 },
+ { "AMAZON.ACT", 1, 0x00251611, 0x0000a97a },
+ { "AND1.DOG", 1, 0x0025bf8b, 0x000009ca },
+ { "ANDERSON.ACT", 1, 0x0025c955, 0x00007c0a },
+ { "ANDSON2.ACT", 1, 0x0026455f, 0x00007c0a },
+ { "ANDSON_E.ACT", 1, 0x0026c169, 0x00003c42 },
+ { "APE.ACT", 1, 0x0026fdab, 0x000084cd },
+ { "APE.DOG", 1, 0x00278278, 0x000011d4 },
+ { "APE2.DOG", 1, 0x0027944c, 0x000008da },
+ { "APE3.DOG", 1, 0x00279d26, 0x00000788 },
+ { "AQ.RL", 1, 0x0027a4ae, 0x00063f3a },
+ { "AQ8.RL", 1, 0x002de3e8, 0x000167f8 },
+ { "AQB2.MUS", 1, 0x002f4be0, 0x00039972 },
+ { "AQBANK.MUS", 1, 0x0032e552, 0x0004fe89 },
+ { "AQBANK.RL", 1, 0x0037e3db, 0x000059e9 },
+ { "AZURA_E.ACT", 1, 0x00383dc4, 0x0000425a },
+ { "AZURA_H.ACT", 1, 0x0038801e, 0x00008a7a },
+ { "AZURA_H.BBK", 1, 0x00390a98, 0x0001a712 },
+ { "AZURA_H.PCX", 1, 0x003ab1aa, 0x0000accb },
+ { "B1.BBK", 1, 0x003b5e75, 0x000051fb },
+ { "B1.LUM", 1, 0x003bb070, 0x00000018 },
+ { "B1.MSK", 1, 0x003bb088, 0x00001f40 },
+ { "B1.PCX", 1, 0x003bcfc8, 0x000162a8 },
+ { "B2.BBK", 1, 0x003d3270, 0x000034b1 },
+ { "B2.LUM", 1, 0x003d6721, 0x00000018 },
+ { "B2.MSK", 1, 0x003d6739, 0x00001f40 },
+ { "B2.PCX", 1, 0x003d8679, 0x0000a521 },
+ { "BAT.SAM", 1, 0x003e2b9a, 0x00009d9a },
+ { "BEETLE.ACT", 1, 0x003ec934, 0x00001e42 },
+ { "BIGAM.ACT", 1, 0x003ee776, 0x00002d12 },
+ { "BLANK000.SB", 1, 0x003f1488, 0x00000076 },
+ { "BLUEP.CUT", 1, 0x003f14fe, 0x00000148 },
+ { "BOB1.DOG", 1, 0x003f1646, 0x000010bc },
+ { "BOB2.DOG", 1, 0x003f2702, 0x00000e5a },
+ { "BOB3.DOG", 1, 0x003f355c, 0x00000df8 },
+ { "BOB4.DOG", 1, 0x003f4354, 0x00000dea },
+ { "BOB5.DOG", 1, 0x003f513e, 0x00000bf0 },
+ { "BUD.ACT", 1, 0x003f5d2e, 0x00006582 },
+ { "BUD1.DOG", 1, 0x003fc2b0, 0x0000129c },
+ { "BUD2.DOG", 1, 0x003fd54c, 0x00000c0e },
+ { "C1.BBK", 1, 0x003fe15a, 0x000026fd },
+ { "C1.LUM", 1, 0x00400857, 0x00000018 },
+ { "C1.MSK", 1, 0x0040086f, 0x00001f40 },
+ { "C1.PCX", 1, 0x004027af, 0x00004888 },
+ { "C10.BBK", 1, 0x00407037, 0x0003949f },
+ { "C10.PCX", 1, 0x004404d6, 0x0000e6fd },
+ { "C100A.CUT", 1, 0x0044ebd3, 0x000003be },
+ { "C100B.CUT", 1, 0x0044ef91, 0x00000346 },
+ { "C100C.CUT", 1, 0x0044f2d7, 0x0000019a },
+ { "C100D.CUT", 1, 0x0044f471, 0x00000774 },
+ { "C101A.CUT", 1, 0x0044fbe5, 0x0000021a },
+ { "C101B.CUT", 1, 0x0044fdff, 0x000000e6 },
+ { "C101C.CUT", 1, 0x0044fee5, 0x00000200 },
+ { "C101D.CUT", 1, 0x004500e5, 0x00000144 },
+ { "C101E.CUT", 1, 0x00450229, 0x00000144 },
+ { "C102A.CUT", 1, 0x0045036d, 0x0000040e },
+ { "C102B.CUT", 1, 0x0045077b, 0x0000040e },
+ { "C102C.CUT", 1, 0x00450b89, 0x0000047e },
+ { "C102D.CUT", 1, 0x00451007, 0x000003b8 },
+ { "C102E.CUT", 1, 0x004513bf, 0x0000037e },
+ { "C103A.CUT", 1, 0x0045173d, 0x000000b4 },
+ { "C103B.CUT", 1, 0x004517f1, 0x00000104 },
+ { "C103C.CUT", 1, 0x004518f5, 0x00000090 },
+ { "C103D.CUT", 1, 0x00451985, 0x00000070 },
+ { "C103E.CUT", 1, 0x004519f5, 0x000000da },
+ { "C103F.CUT", 1, 0x00451acf, 0x0000084a },
+ { "C103G.CUT", 1, 0x00452319, 0x0000068e },
+ { "C103H.CUT", 1, 0x004529a7, 0x000003be },
+ { "C103I.CUT", 1, 0x00452d65, 0x000001f2 },
+ { "C103J.CUT", 1, 0x00452f57, 0x0000041c },
+ { "C103K.CUT", 1, 0x00453373, 0x0000016a },
+ { "C103L.CUT", 1, 0x004534dd, 0x00000458 },
+ { "C11.BBK", 1, 0x00453935, 0x0000bf94 },
+ { "C11.PCX", 1, 0x0045f8c9, 0x0000c01a },
+ { "C11A.CUT", 1, 0x0046b8e3, 0x00000346 },
+ { "C12A.CUT", 1, 0x0046bc29, 0x000004d0 },
+ { "C13A.CUT", 1, 0x0046c0f9, 0x00000164 },
+ { "C13B.CUT", 1, 0x0046c25d, 0x0000016c },
+ { "C13C.CUT", 1, 0x0046c3c9, 0x000001fa },
+ { "C13D.CUT", 1, 0x0046c5c3, 0x00000174 },
+ { "C13E.CUT", 1, 0x0046c737, 0x000001d0 },
+ { "C13F.CUT", 1, 0x0046c907, 0x000002d6 },
+ { "C13G.CUT", 1, 0x0046cbdd, 0x00000152 },
+ { "C13H.CUT", 1, 0x0046cd2f, 0x00000116 },
+ { "C13I.CUT", 1, 0x0046ce45, 0x00000080 },
+ { "C13J.CUT", 1, 0x0046cec5, 0x00000272 },
+ { "C13K.CUT", 1, 0x0046d137, 0x00000192 },
+ { "C13L.CUT", 1, 0x0046d2c9, 0x000001dc },
+ { "C13M.CUT", 1, 0x0046d4a5, 0x00000468 },
+ { "C13N.CUT", 1, 0x0046d90d, 0x0000015e },
+ { "C14A.CUT", 1, 0x0046da6b, 0x000002fe },
+ { "C14B.CUT", 1, 0x0046dd69, 0x00000126 },
+ { "C14C.CUT", 1, 0x0046de8f, 0x00000150 },
+ { "C14D.CUT", 1, 0x0046dfdf, 0x00000108 },
+ { "C15A.CUT", 1, 0x0046e0e7, 0x00000264 },
+ { "C15B.CUT", 1, 0x0046e34b, 0x00000136 },
+ { "C15C.CUT", 1, 0x0046e481, 0x00000380 },
+ { "C15D.CUT", 1, 0x0046e801, 0x000002d2 },
+ { "C15E.CUT", 1, 0x0046ead3, 0x000000f4 },
+ { "C16A.CUT", 1, 0x0046ebc7, 0x000005d6 },
+ { "C16B.CUT", 1, 0x0046f19d, 0x0000057e },
+ { "C17A.CUT", 1, 0x0046f71b, 0x00000156 },
+ { "C18A.CUT", 1, 0x0046f871, 0x00000a60 },
+ { "C18B.CUT", 1, 0x004702d1, 0x000012b8 },
+ { "C18C.CUT", 1, 0x00471589, 0x00001202 },
+ { "C18D.CUT", 1, 0x0047278b, 0x000009fa },
+ { "C18E.CUT", 1, 0x00473185, 0x000009e4 },
+ { "C19A.CUT", 1, 0x00473b69, 0x00001076 },
+ { "C19B.CUT", 1, 0x00474bdf, 0x0000015c },
+ { "C1A.CUT", 1, 0x00474d3b, 0x0000034e },
+ { "C2.BBK", 1, 0x00475089, 0x00005908 },
+ { "C2.LUM", 1, 0x0047a991, 0x00000018 },
+ { "C2.MSK", 1, 0x0047a9a9, 0x00001f40 },
+ { "C2.PCX", 1, 0x0047c8e9, 0x00007f3a },
+ { "C2.SAM", 1, 0x00484823, 0x000147ac },
+ { "C20A.CUT", 1, 0x00498fcf, 0x00000500 },
+ { "C20B.CUT", 1, 0x004994cf, 0x00000168 },
+ { "C20C.CUT", 1, 0x00499637, 0x00000170 },
+ { "C20D.CUT", 1, 0x004997a7, 0x00000388 },
+ { "C20E.CUT", 1, 0x00499b2f, 0x00000394 },
+ { "C20F.CUT", 1, 0x00499ec3, 0x0000073a },
+ { "C20G.CUT", 1, 0x0049a5fd, 0x0000029c },
+ { "C21A.CUT", 1, 0x0049a899, 0x000000da },
+ { "C21B.CUT", 1, 0x0049a973, 0x000000ee },
+ { "C21C.CUT", 1, 0x0049aa61, 0x0000025e },
+ { "C21D.CUT", 1, 0x0049acbf, 0x000002ec },
+ { "C21E.CUT", 1, 0x0049afab, 0x00000602 },
+ { "C21F.CUT", 1, 0x0049b5ad, 0x000003e2 },
+ { "C21G.CUT", 1, 0x0049b98f, 0x00000136 },
+ { "C21H.CUT", 1, 0x0049bac5, 0x00000172 },
+ { "C21I.CUT", 1, 0x0049bc37, 0x0000024c },
+ { "C21J.CUT", 1, 0x0049be83, 0x00000122 },
+ { "C21K.CUT", 1, 0x0049bfa5, 0x00000584 },
+ { "C21L.CUT", 1, 0x0049c529, 0x00000522 },
+ { "C21M.CUT", 1, 0x0049ca4b, 0x000001ea },
+ { "C21N.CUT", 1, 0x0049cc35, 0x00000610 },
+ { "C21O.CUT", 1, 0x0049d245, 0x000000f4 },
+ { "C21P.CUT", 1, 0x0049d339, 0x00000150 },
+ { "C21Q.CUT", 1, 0x0049d489, 0x000002ec },
+ { "C21R.CUT", 1, 0x0049d775, 0x00000106 },
+ { "C21S.CUT", 1, 0x0049d87b, 0x0000012a },
+ { "C21T.CUT", 1, 0x0049d9a5, 0x0000015e },
+ { "C21U.CUT", 1, 0x0049db03, 0x000000c6 },
+ { "C22A.CUT", 1, 0x0049dbc9, 0x00000156 },
+ { "C22B.CUT", 1, 0x0049dd1f, 0x000000fc },
+ { "C22C.CUT", 1, 0x0049de1b, 0x00000166 },
+ { "C24A.CUT", 1, 0x0049df81, 0x000000ec },
+ { "C24B.CUT", 1, 0x0049e06d, 0x000005ca },
+ { "C25A.CUT", 1, 0x0049e637, 0x000002d0 },
+ { "C25B.CUT", 1, 0x0049e907, 0x000002e4 },
+ { "C25C.CUT", 1, 0x0049ebeb, 0x0000023e },
+ { "C25D.CUT", 1, 0x0049ee29, 0x00000182 },
+ { "C25E.CUT", 1, 0x0049efab, 0x00000126 },
+ { "C25F.CUT", 1, 0x0049f0d1, 0x0000017c },
+ { "C25G.CUT", 1, 0x0049f24d, 0x000001e2 },
+ { "C25H.CUT", 1, 0x0049f42f, 0x00000218 },
+ { "C25I.CUT", 1, 0x0049f647, 0x000001da },
+ { "C26A.CUT", 1, 0x0049f821, 0x0000030e },
+ { "C26B.CUT", 1, 0x0049fb2f, 0x000000be },
+ { "C26C.CUT", 1, 0x0049fbed, 0x000001a4 },
+ { "C2A.CUT", 1, 0x0049fd91, 0x000008d0 },
+ { "C2B.CUT", 1, 0x004a0661, 0x000004b8 },
+ { "C2C.CUT", 1, 0x004a0b19, 0x0000023e },
+ { "C3.BBK", 1, 0x004a0d57, 0x00006875 },
+ { "C3.LUM", 1, 0x004a75cc, 0x00000018 },
+ { "C3.MSK", 1, 0x004a75e4, 0x00001f40 },
+ { "C3.PCX", 1, 0x004a9524, 0x0000c40c },
+ { "C3.SAM", 1, 0x004b5930, 0x00011c72 },
+ { "C30A.CUT", 1, 0x004c75a2, 0x00000254 },
+ { "C30B.CUT", 1, 0x004c77f6, 0x000003c4 },
+ { "C30C.CUT", 1, 0x004c7bba, 0x00000722 },
+ { "C30D.CUT", 1, 0x004c82dc, 0x00000206 },
+ { "C30E.CUT", 1, 0x004c84e2, 0x00000976 },
+ { "C30F.CUT", 1, 0x004c8e58, 0x0000010e },
+ { "C30G.CUT", 1, 0x004c8f66, 0x000001e6 },
+ { "C30H.CUT", 1, 0x004c914c, 0x0000014c },
+ { "C31A.CUT", 1, 0x004c9298, 0x0000020c },
+ { "C31B.CUT", 1, 0x004c94a4, 0x00000596 },
+ { "C31C.CUT", 1, 0x004c9a3a, 0x000000e2 },
+ { "C31D.CUT", 1, 0x004c9b1c, 0x000004e4 },
+ { "C31E.CUT", 1, 0x004ca000, 0x000000ee },
+ { "C31F.CUT", 1, 0x004ca0ee, 0x0000010e },
+ { "C32A.CUT", 1, 0x004ca1fc, 0x000000ac },
+ { "C32B.CUT", 1, 0x004ca2a8, 0x0000010c },
+ { "C32C.CUT", 1, 0x004ca3b4, 0x000000e8 },
+ { "C35A.CUT", 1, 0x004ca49c, 0x0000042a },
+ { "C35B.CUT", 1, 0x004ca8c6, 0x000001c0 },
+ { "C36A.CUT", 1, 0x004caa86, 0x0000078c },
+ { "C39A.CUT", 1, 0x004cb212, 0x00000ed4 },
+ { "C3A.CUT", 1, 0x004cc0e6, 0x00000610 },
+ { "C3B.CUT", 1, 0x004cc6f6, 0x000000a0 },
+ { "C3C.CUT", 1, 0x004cc796, 0x000005d8 },
+ { "C3D.CUT", 1, 0x004ccd6e, 0x00000344 },
+ { "C3E.CUT", 1, 0x004cd0b2, 0x0000013a },
+ { "C3F.CUT", 1, 0x004cd1ec, 0x000000e0 },
+ { "C3G.CUT", 1, 0x004cd2cc, 0x00000102 },
+ { "C3H.CUT", 1, 0x004cd3ce, 0x00000120 },
+ { "C4.BBK", 1, 0x004cd4ee, 0x00009420 },
+ { "C4.LUM", 1, 0x004d690e, 0x00000018 },
+ { "C4.MSK", 1, 0x004d6926, 0x00001f40 },
+ { "C4.PCX", 1, 0x004d8866, 0x00009487 },
+ { "C4.SAM", 1, 0x004e1ced, 0x00002754 },
+ { "C40A.CUT", 1, 0x004e4441, 0x0000094a },
+ { "C40B.CUT", 1, 0x004e4d8b, 0x000002c2 },
+ { "C41A.CUT", 1, 0x004e504d, 0x00000b84 },
+ { "C41B.CUT", 1, 0x004e5bd1, 0x00001ba0 },
+ { "C41C.CUT", 1, 0x004e7771, 0x00000170 },
+ { "C41D.CUT", 1, 0x004e78e1, 0x0000025c },
+ { "C41E.CUT", 1, 0x004e7b3d, 0x000001b8 },
+ { "C41F.CUT", 1, 0x004e7cf5, 0x0000009c },
+ { "C41G.CUT", 1, 0x004e7d91, 0x000000fe },
+ { "C41H.CUT", 1, 0x004e7e8f, 0x000000ba },
+ { "C42A.CUT", 1, 0x004e7f49, 0x000003ce },
+ { "C42B.CUT", 1, 0x004e8317, 0x00000802 },
+ { "C42C.CUT", 1, 0x004e8b19, 0x000001ae },
+ { "C42D.CUT", 1, 0x004e8cc7, 0x0000010e },
+ { "C42E.CUT", 1, 0x004e8dd5, 0x00000106 },
+ { "C42F.CUT", 1, 0x004e8edb, 0x00000166 },
+ { "C44A.CUT", 1, 0x004e9041, 0x000004f8 },
+ { "C44B.CUT", 1, 0x004e9539, 0x0000079e },
+ { "C44C.CUT", 1, 0x004e9cd7, 0x0000030a },
+ { "C45A.CUT", 1, 0x004e9fe1, 0x000000f8 },
+ { "C45B.CUT", 1, 0x004ea0d9, 0x000000f8 },
+ { "C45C.CUT", 1, 0x004ea1d1, 0x000000f8 },
+ { "C45D.CUT", 1, 0x004ea2c9, 0x000000f8 },
+ { "C45E.CUT", 1, 0x004ea3c1, 0x00000186 },
+ { "C46A.CUT", 1, 0x004ea547, 0x000000f8 },
+ { "C46B.CUT", 1, 0x004ea63f, 0x000000f8 },
+ { "C46C.CUT", 1, 0x004ea737, 0x000000f8 },
+ { "C46D.CUT", 1, 0x004ea82f, 0x000000f8 },
+ { "C47A.CUT", 1, 0x004ea927, 0x00000640 },
+ { "C48A.CUT", 1, 0x004eaf67, 0x00000656 },
+ { "C48C.CUT", 1, 0x004eb5bd, 0x00000516 },
+ { "C49B.CUT", 1, 0x004ebad3, 0x00000398 },
+ { "C49C.CUT", 1, 0x004ebe6b, 0x00000132 },
+ { "C49D.CUT", 1, 0x004ebf9d, 0x000004e4 },
+ { "C4A.CUT", 1, 0x004ec481, 0x00000094 },
+ { "C4B.CUT", 1, 0x004ec515, 0x000003f4 },
+ { "C5.BBK", 1, 0x004ec909, 0x00004171 },
+ { "C5.LUM", 1, 0x004f0a7a, 0x00000018 },
+ { "C5.MSK", 1, 0x004f0a92, 0x00001f40 },
+ { "C5.PCX", 1, 0x004f29d2, 0x000099f2 },
+ { "C5.SAM", 1, 0x004fc3c4, 0x00003016 },
+ { "C50A.CUT", 1, 0x004ff3da, 0x000004f2 },
+ { "C50B.CUT", 1, 0x004ff8cc, 0x000001f8 },
+ { "C50C.CUT", 1, 0x004ffac4, 0x0000086e },
+ { "C50D.CUT", 1, 0x00500332, 0x000000e2 },
+ { "C50E.CUT", 1, 0x00500414, 0x00000618 },
+ { "C50F.CUT", 1, 0x00500a2c, 0x000003b8 },
+ { "C50G.CUT", 1, 0x00500de4, 0x000008da },
+ { "C50H.CUT", 1, 0x005016be, 0x000000ba },
+ { "C50I.CUT", 1, 0x00501778, 0x000009d4 },
+ { "C50J.CUT", 1, 0x0050214c, 0x000000f2 },
+ { "C51A.CUT", 1, 0x0050223e, 0x0000080e },
+ { "C51B.CUT", 1, 0x00502a4c, 0x000001d8 },
+ { "C51C.CUT", 1, 0x00502c24, 0x000001d8 },
+ { "C51D.CUT", 1, 0x00502dfc, 0x000000ec },
+ { "C53A.CUT", 1, 0x00502ee8, 0x00000566 },
+ { "C53B.CUT", 1, 0x0050344e, 0x0000018a },
+ { "C54A.CUT", 1, 0x005035d8, 0x0000028c },
+ { "C55A.CUT", 1, 0x00503864, 0x000006c8 },
+ { "C56A.CUT", 1, 0x00503f2c, 0x000003ba },
+ { "C56B.CUT", 1, 0x005042e6, 0x00000678 },
+ { "C58A.CUT", 1, 0x0050495e, 0x000001cc },
+ { "C59A.CUT", 1, 0x00504b2a, 0x0000014a },
+ { "C5A.CUT", 1, 0x00504c74, 0x0000040c },
+ { "C5C.CUT", 1, 0x00505080, 0x0000050c },
+ { "C6.BBK", 1, 0x0050558c, 0x0000711b },
+ { "C6.LUM", 1, 0x0050c6a7, 0x00000018 },
+ { "C6.MSK", 1, 0x0050c6bf, 0x00001f40 },
+ { "C6.PCX", 1, 0x0050e5ff, 0x0000c6c0 },
+ { "C6.SAM", 1, 0x0051acbf, 0x00004a87 },
+ { "C60A.CUT", 1, 0x0051f746, 0x00000170 },
+ { "C61A.CUT", 1, 0x0051f8b6, 0x00000170 },
+ { "C62A.CUT", 1, 0x0051fa26, 0x00000dde },
+ { "C62B.CUT", 1, 0x00520804, 0x00000268 },
+ { "C62C.CUT", 1, 0x00520a6c, 0x00000164 },
+ { "C62D.CUT", 1, 0x00520bd0, 0x000002a2 },
+ { "C63A.CUT", 1, 0x00520e72, 0x000002d0 },
+ { "C63B.CUT", 1, 0x00521142, 0x0000098e },
+ { "C63C.CUT", 1, 0x00521ad0, 0x000005d8 },
+ { "C63D.CUT", 1, 0x005220a8, 0x00000194 },
+ { "C63E.CUT", 1, 0x0052223c, 0x00000336 },
+ { "C63F.CUT", 1, 0x00522572, 0x0000041a },
+ { "C63G.CUT", 1, 0x0052298c, 0x00000170 },
+ { "C63H.CUT", 1, 0x00522afc, 0x0000039a },
+ { "C63I.CUT", 1, 0x00522e96, 0x000003ac },
+ { "C63J.CUT", 1, 0x00523242, 0x000002f0 },
+ { "C63K.CUT", 1, 0x00523532, 0x00000634 },
+ { "C64A.CUT", 1, 0x00523b66, 0x00000128 },
+ { "C66A.CUT", 1, 0x00523c8e, 0x000002e8 },
+ { "C67A.CUT", 1, 0x00523f76, 0x000005b6 },
+ { "C67B.CUT", 1, 0x0052452c, 0x0000054c },
+ { "C69A.CUT", 1, 0x00524a78, 0x00000700 },
+ { "C69B.CUT", 1, 0x00525178, 0x00000670 },
+ { "C69C.CUT", 1, 0x005257e8, 0x00000688 },
+ { "C69D.CUT", 1, 0x00525e70, 0x000006ac },
+ { "C69E.CUT", 1, 0x0052651c, 0x000009cc },
+ { "C69F.CUT", 1, 0x00526ee8, 0x00000aa2 },
+ { "C69G.CUT", 1, 0x0052798a, 0x000019ac },
+ { "C69H.CUT", 1, 0x00529336, 0x0000075a },
+ { "C69I.CUT", 1, 0x00529a90, 0x000003f0 },
+ { "C69J.CUT", 1, 0x00529e80, 0x0000008a },
+ { "C69K.CUT", 1, 0x00529f0a, 0x000005c8 },
+ { "C69L.CUT", 1, 0x0052a4d2, 0x0000062a },
+ { "C69M.CUT", 1, 0x0052aafc, 0x000005ba },
+ { "C69N.CUT", 1, 0x0052b0b6, 0x0000012c },
+ { "C69O.CUT", 1, 0x0052b1e2, 0x000001e4 },
+ { "C69Z.CUT", 1, 0x0052b3c6, 0x000017a4 },
+ { "C6A.CUT", 1, 0x0052cb6a, 0x00000220 },
+ { "C6B.CUT", 1, 0x0052cd8a, 0x000000da },
+ { "C6C.CUT", 1, 0x0052ce64, 0x00000138 },
+ { "C7.BBK", 1, 0x0052cf9c, 0x00013c13 },
+ { "C7.PCX", 1, 0x00540baf, 0x0000a75d },
+ { "C70A.CUT", 1, 0x0054b30c, 0x000002b8 },
+ { "C70B.CUT", 1, 0x0054b5c4, 0x00000384 },
+ { "C70B.SAM", 1, 0x0054b948, 0x00009a4e },
+ { "C70C.CUT", 1, 0x00555396, 0x00000292 },
+ { "C70D.CUT", 1, 0x00555628, 0x00000952 },
+ { "C70E.CUT", 1, 0x00555f7a, 0x0000038c },
+ { "C70F.CUT", 1, 0x00556306, 0x0000034c },
+ { "C70F.SAM", 1, 0x00556652, 0x000076bf },
+ { "C70G.CUT", 1, 0x0055dd11, 0x00000348 },
+ { "C70G.SAM", 1, 0x0055e059, 0x00008d7d },
+ { "C70H.CUT", 1, 0x00566dd6, 0x00000322 },
+ { "C70I.CUT", 1, 0x005670f8, 0x000003d8 },
+ { "C70J.CUT", 1, 0x005674d0, 0x00000184 },
+ { "C70K.CUT", 1, 0x00567654, 0x000002c0 },
+ { "C70L.CUT", 1, 0x00567914, 0x000002c0 },
+ { "C70M.CUT", 1, 0x00567bd4, 0x000002ba },
+ { "C70N.CUT", 1, 0x00567e8e, 0x000002ba },
+ { "C71A.CUT", 1, 0x00568148, 0x00000094 },
+ { "C71B.CUT", 1, 0x005681dc, 0x00000094 },
+ { "C71C.CUT", 1, 0x00568270, 0x000000b2 },
+ { "C72A.CUT", 1, 0x00568322, 0x00000730 },
+ { "C72B.CUT", 1, 0x00568a52, 0x00000632 },
+ { "C72C.CUT", 1, 0x00569084, 0x0000007c },
+ { "C73A.CUT", 1, 0x00569100, 0x0000038a },
+ { "C73B.CUT", 1, 0x0056948a, 0x000002b8 },
+ { "C73C.CUT", 1, 0x00569742, 0x00000192 },
+ { "C73D.CUT", 1, 0x005698d4, 0x000000c8 },
+ { "C73E.CUT", 1, 0x0056999c, 0x00000330 },
+ { "C73F.CUT", 1, 0x00569ccc, 0x00000344 },
+ { "C73G.CUT", 1, 0x0056a010, 0x00000210 },
+ { "C74A.CUT", 1, 0x0056a220, 0x0000075e },
+ { "C74B.CUT", 1, 0x0056a97e, 0x0000018c },
+ { "C74C.CUT", 1, 0x0056ab0a, 0x000001dc },
+ { "C74D.CUT", 1, 0x0056ace6, 0x0000018c },
+ { "C74F.CUT", 1, 0x0056ae72, 0x000000e0 },
+ { "C75B.CUT", 1, 0x0056af52, 0x00000d00 },
+ { "C76A.CUT", 1, 0x0056bc52, 0x00000072 },
+ { "C76B.CUT", 1, 0x0056bcc4, 0x00000f28 },
+ { "C8.BBK", 1, 0x0056cbec, 0x0000b5ce },
+ { "C8.PCX", 1, 0x005781ba, 0x0000c31f },
+ { "C8A.CUT", 1, 0x005844d9, 0x000007e4 },
+ { "C8B.CUT", 1, 0x00584cbd, 0x000002a8 },
+ { "C9.BBK", 1, 0x00584f65, 0x0000f68b },
+ { "C9.PCX", 1, 0x005945f0, 0x0000a787 },
+ { "C97A.CUT", 1, 0x0059ed77, 0x0000017e },
+ { "C97B.CUT", 1, 0x0059eef5, 0x0000013c },
+ { "C99D.CUT", 1, 0x0059f031, 0x00000094 },
+ { "C99E.CUT", 1, 0x0059f0c5, 0x000002e6 },
+ { "C99F.CUT", 1, 0x0059f3ab, 0x000002e6 },
+ { "C9A.CUT", 1, 0x0059f691, 0x000001fa },
+ { "C9B.CUT", 1, 0x0059f88b, 0x000000f8 },
+ { "C9C.CUT", 1, 0x0059f983, 0x00000136 },
+ { "C9D.CUT", 1, 0x0059fab9, 0x000000a0 },
+ { "CDCLO.CUT", 1, 0x0059fb59, 0x000001f6 },
+ { "CDINT.CUT", 1, 0x0059fd4f, 0x000017fe },
+ { "CDINT061.SB", 1, 0x005a154d, 0x0000334c },
+ { "CDINT063.SB", 1, 0x005a4899, 0x0000798b },
+ { "CDINT072.SB", 1, 0x005ac224, 0x00005f03 },
+ { "CDINT081.SB", 1, 0x005b2127, 0x000062b3 },
+ { "CDINT091.SB", 1, 0x005b83da, 0x00008a0e },
+ { "CDINT102.SB", 1, 0x005c0de8, 0x0000673a },
+ { "CDINT111.SB", 1, 0x005c7522, 0x00008453 },
+ { "CDINT141.SB", 1, 0x005cf975, 0x000031be },
+ { "CDINT151.SB", 1, 0x005d2b33, 0x00002a7c },
+ { "CDINT191.SB", 1, 0x005d55af, 0x00001fc8 },
+ { "CDINT201.SB", 1, 0x005d7577, 0x00002cd8 },
+ { "CDINT212.SB", 1, 0x005da24f, 0x00004b03 },
+ { "CDINT231.SB", 1, 0x005ded52, 0x00008dc0 },
+ { "CDINT241.SB", 1, 0x005e7b12, 0x000032cf },
+ { "CDINT281.SB", 1, 0x005eade1, 0x000053a6 },
+ { "CDINT291.SB", 1, 0x005f0187, 0x00002138 },
+ { "CDINT301.SB", 1, 0x005f22bf, 0x00003dae },
+ { "CDINT321.SB", 1, 0x005f606d, 0x00007e92 },
+ { "CDINT351.SB", 1, 0x005fdeff, 0x00002000 },
+ { "CDINT361.SB", 1, 0x005ffeff, 0x00005a8b },
+ { "CDINT381.SB", 1, 0x0060598a, 0x00003882 },
+ { "CDINT442.SB", 1, 0x0060920c, 0x0000471b },
+ { "CDINT451.SB", 1, 0x0060d927, 0x00005929 },
+ { "CDINT452.SB", 1, 0x00613250, 0x00007915 },
+ { "CDINT461.SB", 1, 0x0061ab65, 0x00001c6a },
+ { "CDINT463.SB", 1, 0x0061c7cf, 0x000030ae },
+ { "CDINT464.SB", 1, 0x0061f87d, 0x0000c980 },
+ { "CDINT471.SB", 1, 0x0062c1fd, 0x00003593 },
+ { "CDINT481.SB", 1, 0x0062f790, 0x00004e60 },
+ { "CDINT492.SB", 1, 0x006345f0, 0x00004594 },
+ { "CDRES.CUT", 1, 0x00638b84, 0x000001f6 },
+ { "CHANGE.SAM", 1, 0x00638d7a, 0x00005ef2 },
+ { "CHEF.ACT", 1, 0x0063ec6c, 0x00005362 },
+ { "CHEF.DOG", 1, 0x00643fce, 0x00000af0 },
+ { "CHIEF1.DOG", 1, 0x00644abe, 0x000009ca },
+ { "CHIEF2.DOG", 1, 0x00645488, 0x0000121e },
+ { "CHIEF3.DOG", 1, 0x006466a6, 0x00000be4 },
+ { "CHIEF4.DOG", 1, 0x0064728a, 0x000002c4 },
+ { "CHORN.CUT", 1, 0x0064754e, 0x0000034a },
+ { "CINTR.CUT", 1, 0x00647898, 0x00001768 },
+ { "CLOGO.CUT", 1, 0x00649000, 0x000000aa },
+ { "CMASK.CUT", 1, 0x006490aa, 0x00000386 },
+ { "COCON.CUT", 1, 0x00649430, 0x000003d8 },
+ { "COCONUT.SAM", 1, 0x00649808, 0x0000a047 },
+ { "COMIC.CUT", 1, 0x0065384f, 0x0000094e },
+ { "COMPY.ACT", 1, 0x0065419d, 0x00005533 },
+ { "CONTROL.BBK", 1, 0x006596d0, 0x00000e0e },
+ { "COPY.BBK", 1, 0x0065a4de, 0x00000002 },
+ { "COPY.CUT", 1, 0x0065a4e0, 0x00000086 },
+ { "COPY.LBM", 1, 0x0065a566, 0x000053ca },
+ { "COPY.PCX", 1, 0x0065f930, 0x0000646f },
+ { "CRAP.PCX", 1, 0x00665d9f, 0x0000724c },
+ { "CRED.CUT", 1, 0x0066cfeb, 0x000003ae },
+ { "CREDIT1.CRD", 1, 0x0066d399, 0x00000604 },
+ { "CREDIT2.CRD", 1, 0x0066d99d, 0x000010d3 },
+ { "CROWBAR.SAM", 1, 0x0066ea70, 0x00009aca },
+ { "CUDRS.CUT", 1, 0x0067853a, 0x000001f6 },
+ { "D1.BBK", 1, 0x00678730, 0x000061b7 },
+ { "D1.LUM", 1, 0x0067e8e7, 0x00000018 },
+ { "D1.MSK", 1, 0x0067e8ff, 0x00001f40 },
+ { "D1.PCX", 1, 0x0068083f, 0x0000a331 },
+ { "D1C.SAM", 1, 0x0068ab70, 0x0000ddd7 },
+ { "D2.BBK", 1, 0x00698947, 0x00004630 },
+ { "D2.LUM", 1, 0x0069cf77, 0x00000018 },
+ { "D2.MSK", 1, 0x0069cf8f, 0x00001f40 },
+ { "D2.PCX", 1, 0x0069eecf, 0x00008dc3 },
+ { "D3.BBK", 1, 0x006a7c92, 0x00004b34 },
+ { "D3.LUM", 1, 0x006ac7c6, 0x00000018 },
+ { "D3.MSK", 1, 0x006ac7de, 0x00001f40 },
+ { "D3.PCX", 1, 0x006ae71e, 0x0000a662 },
+ { "D3.SAM", 1, 0x006b8d80, 0x0000c55a },
+ { "D4.BBK", 1, 0x006c52da, 0x00013e0d },
+ { "D4.LUM", 1, 0x006d90e7, 0x00000018 },
+ { "D4.MSK", 1, 0x006d90ff, 0x00001f40 },
+ { "D4.PCX", 1, 0x006db03f, 0x0000a69b },
+ { "D5.BBK", 1, 0x006e56da, 0x000088a1 },
+ { "D5.PCX", 1, 0x006edf7b, 0x00007bc5 },
+ { "D5.SAM", 1, 0x006f5b40, 0x00002ee7 },
+ { "D5B.SAM", 1, 0x006f8a27, 0x0001128e },
+ { "D6.BBK", 1, 0x00709cb5, 0x0000a480 },
+ { "D6.LUM", 1, 0x00714135, 0x00000018 },
+ { "D6.MSK", 1, 0x0071414d, 0x00001f40 },
+ { "D6.PCX", 1, 0x0071608d, 0x000099a6 },
+ { "D9.BBK", 1, 0x0071fa33, 0x00008461 },
+ { "D9.PCX", 1, 0x00727e94, 0x0000b551 },
+ { "DATA", 1, 0x007333e5, 0x00001434 },
+ { "DEATH.ACT", 1, 0x00734819, 0x0000d83a },
+ { "DEATH1.DOG", 1, 0x00742053, 0x000017ca },
+ { "DEATH2.DOG", 1, 0x0074381d, 0x0000081e },
+ { "DEINO.ACT", 1, 0x0074403b, 0x0000e199 },
+ { "DFRANK.ACT", 1, 0x007521d4, 0x000052e2 },
+ { "DISK1.SAM", 1, 0x007574b6, 0x000033da },
+ { "DOG.ACT", 1, 0x0075a890, 0x00002a62 },
+ { "DOG.DOG", 1, 0x0075d2f2, 0x0000023a },
+ { "E1.BBK", 1, 0x0075d52c, 0x0001765b },
+ { "E1.PCX", 1, 0x00774b87, 0x0000dcc7 },
+ { "E2.BBK", 1, 0x0078284e, 0x0000cefc },
+ { "E2.PCX", 1, 0x0078f74a, 0x0000f5f2 },
+ { "E3.BBK", 1, 0x0079ed3c, 0x00011042 },
+ { "E3.PCX", 1, 0x007afd7e, 0x0000a4d0 },
+ { "EQDATA.LHA", 1, 0x007ba24e, 0x00031a7a },
+ { "F1.BBK", 1, 0x007ebcc8, 0x00004716 },
+ { "F1.LUM", 1, 0x007f03de, 0x00000018 },
+ { "F1.MSK", 1, 0x007f03f6, 0x00001f40 },
+ { "F1.PCX", 1, 0x007f2336, 0x0000991d },
+ { "F1.SAM", 1, 0x007fbc53, 0x0000fd04 },
+ { "F1B.PCX", 1, 0x0080b957, 0x00005739 },
+ { "F2.BBK", 1, 0x00811090, 0x00006a18 },
+ { "F2.LUM", 1, 0x00817aa8, 0x00000018 },
+ { "F2.MSK", 1, 0x00817ac0, 0x00001f40 },
+ { "F2.PCX", 1, 0x00819a00, 0x00009f28 },
+ { "F2B.PCX", 1, 0x00823928, 0x00004abb },
+ { "F3.BBK", 1, 0x008283e3, 0x00002c59 },
+ { "F3.LUM", 1, 0x0082b03c, 0x00000018 },
+ { "F3.MSK", 1, 0x0082b054, 0x00001f40 },
+ { "F3.PCX", 1, 0x0082cf94, 0x0000aa0c },
+ { "F3.SAM", 1, 0x008379a0, 0x0000a940 },
+ { "F4.BBK", 1, 0x008422e0, 0x0000b561 },
+ { "F4.LUM", 1, 0x0084d841, 0x00000018 },
+ { "F4.MSK", 1, 0x0084d859, 0x00001f40 },
+ { "F4.PCX", 1, 0x0084f799, 0x00014df0 },
+ { "F4B.PCX", 1, 0x00864589, 0x000117d8 },
+ { "F4S.PCX", 1, 0x00875d61, 0x0000833e },
+ { "FALL.SAM", 1, 0x0087e09f, 0x0000cbda },
+ { "FAYE.ACT", 1, 0x0088ac79, 0x00013fda },
+ { "FAYE2.DOG", 1, 0x0089ec53, 0x0000098e },
+ { "FAYE3.DOG", 1, 0x0089f5e1, 0x000005d8 },
+ { "FAYE4.DOG", 1, 0x0089fbb9, 0x00000c40 },
+ { "FAYE5.CUT", 1, 0x008a07f9, 0x0000007a },
+ { "FAYE5.DOG", 1, 0x008a0873, 0x000009ce },
+ { "FAYE6.DOG", 1, 0x008a1241, 0x00000466 },
+ { "FAYE_E.ACT", 1, 0x008a16a7, 0x00002d4a },
+ { "FAYE_H.ACT", 1, 0x008a43f1, 0x0000807a },
+ { "FAYE_H.BBK", 1, 0x008ac46b, 0x0000e9fb },
+ { "FAYE_H.PCX", 1, 0x008bae66, 0x000096b5 },
+ { "FRANK.ACT", 1, 0x008c451b, 0x00008342 },
+ { "FRANK.DOG", 1, 0x008cc85d, 0x00000e48 },
+ { "FRANK_H.ACT", 1, 0x008cd6a5, 0x0000ad60 },
+ { "FRANK_H.BBK", 1, 0x008d8405, 0x00016369 },
+ { "FRANK_H.PCX", 1, 0x008ee76e, 0x00008dd6 },
+ { "GET_GEM.SAM", 1, 0x008f7544, 0x000099d2 },
+ { "GET_HORN.BBK", 1, 0x00900f16, 0x000045d8 },
+ { "GET_HORN.SAM", 1, 0x009054ee, 0x00005dde },
+ { "GM.CUT", 1, 0x0090b2cc, 0x0000009c },
+ { "GOONS.ACT", 1, 0x0090b368, 0x0000728a },
+ { "GUARDS.ACT", 1, 0x009125f2, 0x0000504a },
+ { "HENRY.ACT", 1, 0x0091763c, 0x0000b102 },
+ { "HENRY.DOG", 1, 0x0092273e, 0x00001280 },
+ { "HENRY2.DOG", 1, 0x009239be, 0x00000b24 },
+ { "HORN.SAM", 1, 0x009244e2, 0x000067b2 },
+ { "HUGH.ACT", 1, 0x0092ac94, 0x0000e8da },
+ { "I1.SAM", 1, 0x0093956e, 0x0000cbf2 },
+ { "IAN.ACT", 1, 0x00946160, 0x0000a542 },
+ { "IAN1.DOG", 1, 0x009506a2, 0x00000518 },
+ { "IAN2.DOG", 1, 0x00950bba, 0x00000a9a },
+ { "J1.BBK", 1, 0x00951654, 0x000025fc },
+ { "J1.LUM", 1, 0x00953c50, 0x00000018 },
+ { "J1.MSK", 1, 0x00953c68, 0x00001f40 },
+ { "J1.PCX", 1, 0x00955ba8, 0x00008d84 },
+ { "J1.SAM", 1, 0x0095e92c, 0x00008442 },
+ { "J2.BBK", 1, 0x00966d6e, 0x00000e97 },
+ { "J2.LUM", 1, 0x00967c05, 0x00000018 },
+ { "J2.MSK", 1, 0x00967c1d, 0x00001f40 },
+ { "J2.PCX", 1, 0x00969b5d, 0x0000c33c },
+ { "J2.SAM", 1, 0x00975e99, 0x0000a1e3 },
+ { "J3.BBK", 1, 0x0098007c, 0x00003289 },
+ { "J3.LUM", 1, 0x00983305, 0x00000018 },
+ { "J3.MSK", 1, 0x0098331d, 0x00001f40 },
+ { "J3.PCX", 1, 0x0098525d, 0x000094b4 },
+ { "J4.BBK", 1, 0x0098e711, 0x00006e28 },
+ { "J4.LUM", 1, 0x00995539, 0x00000018 },
+ { "J4.MSK", 1, 0x00995551, 0x00001f40 },
+ { "J4.PCX", 1, 0x00997491, 0x00008e90 },
+ { "J5.BBK", 1, 0x009a0321, 0x00004521 },
+ { "J5.LUM", 1, 0x009a4842, 0x00000018 },
+ { "J5.MSK", 1, 0x009a485a, 0x00001f40 },
+ { "J5.PCX", 1, 0x009a679a, 0x00009b37 },
+ { "J5.SAM", 1, 0x009b02d1, 0x000042f2 },
+ { "J6.BBK", 1, 0x009b45c3, 0x000043d7 },
+ { "J6.LUM", 1, 0x009b899a, 0x00000018 },
+ { "J6.MSK", 1, 0x009b89b2, 0x00001f40 },
+ { "J6.PCX", 1, 0x009ba8f2, 0x0000a5c5 },
+ { "J7.BBK", 1, 0x009c4eb7, 0x00003234 },
+ { "J7.LUM", 1, 0x009c80eb, 0x00000018 },
+ { "J7.MSK", 1, 0x009c8103, 0x00001f40 },
+ { "J7.PCX", 1, 0x009ca043, 0x0000cd63 },
+ { "J7.SAM", 1, 0x009d6da6, 0x000083aa },
+ { "J8.BBK", 1, 0x009df150, 0x0000320d },
+ { "J8.LUM", 1, 0x009e235d, 0x00000018 },
+ { "J8.MSK", 1, 0x009e2375, 0x00001f40 },
+ { "J8.PCX", 1, 0x009e42b5, 0x0000c0e2 },
+ { "J8.SAM", 1, 0x009f0397, 0x0000024e },
+ { "JASPAR.ACT", 1, 0x009f05e5, 0x00004fb2 },
+ { "JIM1.DOG", 1, 0x009f5597, 0x00001276 },
+ { "JIM2.DOG", 1, 0x009f680d, 0x00001282 },
+ { "JIM3.DOG", 1, 0x009f7a8f, 0x00000df6 },
+ { "JIMTAM.ACT", 1, 0x009f8885, 0x0000a08a },
+ { "JOE.BBK", 1, 0x00a0290f, 0x00014b8a },
+ { "JOE1.BBK", 1, 0x00a17499, 0x00012a5a },
+ { "JOED_A.BBK", 1, 0x00a29ef3, 0x00009b8a },
+ { "JOED_B.BBK", 1, 0x00a33a7d, 0x0000a50a },
+ { "JOEU_A.BBK", 1, 0x00a3df87, 0x00009b8a },
+ { "JOEU_B.BBK", 1, 0x00a47b11, 0x0000a50a },
+ { "JOE_A.BBK", 1, 0x00a5201b, 0x00009b8a },
+ { "JOE_B.BBK", 1, 0x00a5bba5, 0x0000dc5a },
+ { "JOE_E.ACT", 1, 0x00a697ff, 0x0000388a },
+ { "JOE_H.ACT", 1, 0x00a6d089, 0x0000dace },
+ { "JOHN.ACT", 1, 0x00a7ab57, 0x00006312 },
+ { "JOHN1.DOG", 1, 0x00a80e69, 0x0000067c },
+ { "JOURNAL.BBK", 1, 0x00a814e5, 0x0000a318 },
+ { "JOURNAL.PCX", 1, 0x00a8b7fd, 0x00009c70 },
+ { "KISS1.SAM", 1, 0x00a9546d, 0x0000f722 },
+ { "KLUNK.ACT", 1, 0x00aa4b8f, 0x00007c30 },
+ { "KLUNK1.DOG", 1, 0x00aac7bf, 0x00000e6a },
+ { "KLUNK2.DOG", 1, 0x00aad629, 0x00000ed0 },
+ { "KLUNK2.SAM", 1, 0x00aae4f9, 0x0001737c },
+ { "L1.BBK", 1, 0x00ac5875, 0x00000002 },
+ { "L1.PCX", 1, 0x00ac5877, 0x000043f7 },
+ { "L2.BBK", 1, 0x00ac9c6e, 0x00000002 },
+ { "L2.PCX", 1, 0x00ac9c70, 0x0000ba60 },
+ { "LARIS.ACT", 1, 0x00ad56d0, 0x0000355a },
+ { "LARIS.DOG", 1, 0x00ad8c2a, 0x00000f32 },
+ { "LARIS3.DOG", 1, 0x00ad9b5c, 0x0000079a },
+ { "LITTLEP.ACT", 1, 0x00ada2f6, 0x000002e2 },
+ { "LOLA.ACT", 1, 0x00ada5d8, 0x0001342d },
+ { "LOLA1.DOG", 1, 0x00aeda05, 0x00000ad6 },
+ { "LOU.ACT", 1, 0x00aee4db, 0x00005552 },
+ { "LOU1.DOG", 1, 0x00af3a2d, 0x000010ac },
+ { "LOU2.DOG", 1, 0x00af4ad9, 0x00000bae },
+ { "M1.BBK", 1, 0x00af5687, 0x00006d5c },
+ { "M1.PCX", 1, 0x00afc3e3, 0x000193ce },
+ { "M2.BBK", 1, 0x00b157b1, 0x00001a4a },
+ { "M2.PCX", 1, 0x00b171fb, 0x0000a9d3 },
+ { "M2.SAM", 1, 0x00b21bce, 0x0001433c },
+ { "MAN1.DOG", 1, 0x00b35f0a, 0x0000101e },
+ { "MAN2.DOG", 1, 0x00b36f28, 0x000007a4 },
+ { "MASK.SAM", 1, 0x00b376cc, 0x000081ea },
+ { "N1.BBK", 1, 0x00b3f8b6, 0x00002d74 },
+ { "N1.LUM", 1, 0x00b4262a, 0x00000018 },
+ { "N1.MSK", 1, 0x00b42642, 0x00001f40 },
+ { "N1.PCX", 1, 0x00b44582, 0x0000cbe7 },
+ { "N10.BBK", 1, 0x00b51169, 0x00000002 },
+ { "N10.PCX", 1, 0x00b5116b, 0x0000a28d },
+ { "N10.SAM", 1, 0x00b5b3f8, 0x000147f8 },
+ { "N11.BBK", 1, 0x00b6fbf0, 0x00000d48 },
+ { "N11.PCX", 1, 0x00b70938, 0x00008e85 },
+ { "N12.BBK", 1, 0x00b797bd, 0x000049aa },
+ { "N12.LUM", 1, 0x00b7e167, 0x00000018 },
+ { "N12.MSK", 1, 0x00b7e17f, 0x00001f40 },
+ { "N12.PCX", 1, 0x00b800bf, 0x000074ea },
+ { "N13.BBK", 1, 0x00b875a9, 0x000046b7 },
+ { "N13.LUM", 1, 0x00b8bc60, 0x00000018 },
+ { "N13.MSK", 1, 0x00b8bc78, 0x00001f40 },
+ { "N13.PCX", 1, 0x00b8dbb8, 0x00008640 },
+ { "N13.SAM", 1, 0x00b961f8, 0x00025a26 },
+ { "N13B.SAM", 1, 0x00bbbc1e, 0x0000250a },
+ { "N14.BBK", 1, 0x00bbe128, 0x000073ec },
+ { "N14.PCX", 1, 0x00bc5514, 0x0000b3f3 },
+ { "N14.SAM", 1, 0x00bd0907, 0x0002550a },
+ { "N14B.PCX", 1, 0x00bf5e11, 0x0000b933 },
+ { "N15.BBK", 1, 0x00c01744, 0x00000002 },
+ { "N15.PCX", 1, 0x00c01746, 0x0000ae43 },
+ { "N16.BBK", 1, 0x00c0c589, 0x000014c0 },
+ { "N16.LUM", 1, 0x00c0da49, 0x00000018 },
+ { "N16.MSK", 1, 0x00c0da61, 0x00001f40 },
+ { "N16.PCX", 1, 0x00c0f9a1, 0x0000e038 },
+ { "N2.BBK", 1, 0x00c1d9d9, 0x00007377 },
+ { "N2.LUM", 1, 0x00c24d50, 0x00000018 },
+ { "N2.MSK", 1, 0x00c24d68, 0x00001f40 },
+ { "N2.PCX", 1, 0x00c26ca8, 0x00007d65 },
+ { "N3.BBK", 1, 0x00c2ea0d, 0x00004fe2 },
+ { "N3.LUM", 1, 0x00c339ef, 0x00000018 },
+ { "N3.MSK", 1, 0x00c33a07, 0x00001f40 },
+ { "N3.PCX", 1, 0x00c35947, 0x0000a6de },
+ { "N4.BBK", 1, 0x00c40025, 0x0000acc0 },
+ { "N4.LUM", 1, 0x00c4ace5, 0x00000018 },
+ { "N4.MSK", 1, 0x00c4acfd, 0x00001f40 },
+ { "N4.PCX", 1, 0x00c4cc3d, 0x00006e0b },
+ { "N5.BBK", 1, 0x00c53a48, 0x0000202a },
+ { "N5.LUM", 1, 0x00c55a72, 0x00000018 },
+ { "N5.MSK", 1, 0x00c55a8a, 0x00001f40 },
+ { "N5.PCX", 1, 0x00c579ca, 0x000092f0 },
+ { "N6.BBK", 1, 0x00c60cba, 0x00001d97 },
+ { "N6.LUM", 1, 0x00c62a51, 0x00000018 },
+ { "N6.MSK", 1, 0x00c62a69, 0x00001f40 },
+ { "N6.PCX", 1, 0x00c649a9, 0x000086e2 },
+ { "N7.BBK", 1, 0x00c6d08b, 0x000025f8 },
+ { "N7.LUM", 1, 0x00c6f683, 0x00000018 },
+ { "N7.MSK", 1, 0x00c6f69b, 0x00001f40 },
+ { "N7.PCX", 1, 0x00c715db, 0x00008e79 },
+ { "N8.BBK", 1, 0x00c7a454, 0x00007bb7 },
+ { "N8.LUM", 1, 0x00c8200b, 0x00000018 },
+ { "N8.MSK", 1, 0x00c82023, 0x00001f40 },
+ { "N8.PCX", 1, 0x00c83f63, 0x0000be5f },
+ { "N9.BBK", 1, 0x00c8fdc2, 0x0000c9bf },
+ { "N9.LUM", 1, 0x00c9c781, 0x00000018 },
+ { "N9.MSK", 1, 0x00c9c799, 0x00001f40 },
+ { "N9.PCX", 1, 0x00c9e6d9, 0x0000aa4b },
+ { "N9.SAM", 1, 0x00ca9124, 0x0000e902 },
+ { "NAOMI.DOG", 1, 0x00cb7a26, 0x000013b6 },
+ { "NAOMI2.DOG", 1, 0x00cb8ddc, 0x00000a40 },
+ { "OBJECTS.BBK", 1, 0x00cb981c, 0x00019322 },
+ { "ORACLE.ACT", 1, 0x00cd2b3e, 0x00004042 },
+ { "ORACLE1.DOG", 1, 0x00cd6b80, 0x00001088 },
+ { "ORACLE2.DOG", 1, 0x00cd7c08, 0x000003c0 },
+ { "ORACLE3.DOG", 1, 0x00cd7fc8, 0x00000806 },
+ { "PANEL.PCX", 1, 0x00cd87ce, 0x00002279 },
+ { "PRIN1.CUT", 1, 0x00cdaa47, 0x0000007a },
+ { "PRIN1.DOG", 1, 0x00cdaac1, 0x00000aea },
+ { "PRIN2.DOG", 1, 0x00cdb5ab, 0x0000055a },
+ { "PRIN4.DOG", 1, 0x00cdbb05, 0x00000720 },
+ { "PRINCESS.ACT", 1, 0x00cdc225, 0x0000d732 },
+ { "PRISON.ACT", 1, 0x00ce9957, 0x00006f22 },
+ { "PUNCH.SAM", 1, 0x00cf0879, 0x00007e9a },
+ { "PUSH.SAM", 1, 0x00cf8713, 0x00009308 },
+ { "PYGMY.ACT", 1, 0x00d01a1b, 0x00010a63 },
+ { "QUEEN.JAS", 1, 0x00d1247e, 0x0001371a },
+ { "QUEEN2.JAS", 1, 0x00d25b98, 0x00008c00 },
+ { "R1.BBK", 1, 0x00d2e798, 0x00001a4a },
+ { "R1.PCX", 1, 0x00d301e2, 0x000065c0 },
+ { "R2.BBK", 1, 0x00d367a2, 0x00001a4a },
+ { "R2.PCX", 1, 0x00d381ec, 0x00005f32 },
+ { "R3.BBK", 1, 0x00d3e11e, 0x00001a4a },
+ { "R3.PCX", 1, 0x00d3fb68, 0x000061a1 },
+ { "R4.BBK", 1, 0x00d45d09, 0x00001a4a },
+ { "R4.PCX", 1, 0x00d47753, 0x00009ec3 },
+ { "RASH.SAM", 1, 0x00d51616, 0x0000431a },
+ { "RENEGADE.BBK", 1, 0x00d55930, 0x0000117a },
+ { "RENEGADE.PCX", 1, 0x00d56aaa, 0x0000296d },
+ { "RITA.ACT", 1, 0x00d59417, 0x000020ea },
+ { "RITA_H.ACT", 1, 0x00d5b501, 0x00015cdb },
+ { "ROCKET.SAM", 1, 0x00d711dc, 0x00027e20 },
+ { "SEC.ACT", 1, 0x00d98ffc, 0x00006e6a },
+ { "SEC1.DOG", 1, 0x00d9fe66, 0x00001672 },
+ { "SEC2.DOG", 1, 0x00da14d8, 0x00000944 },
+ { "SHEET.SAM", 1, 0x00da1e1c, 0x0000ad00 },
+ { "SHIELD.SAM", 1, 0x00dacb1c, 0x00002afb },
+ { "SHOWER.ACT", 1, 0x00daf617, 0x0000762a },
+ { "SHOWERAM.DOG", 1, 0x00db6c41, 0x000005fc },
+ { "SKULL.ACT", 1, 0x00db723d, 0x00001973 },
+ { "SPARKY.ACT", 1, 0x00db8bb0, 0x0000f912 },
+ { "SPARKY1.DOG", 1, 0x00dc84c2, 0x00000986 },
+ { "SPARKY2.DOG", 1, 0x00dc8e48, 0x00000402 },
+ { "SPARKY3.DOG", 1, 0x00dc924a, 0x0000126e },
+ { "SPARKY4.DOG", 1, 0x00dca4b8, 0x0000043a },
+ { "SPARKY5.DOG", 1, 0x00dca8f2, 0x0000091c },
+ { "SPARKY6.DOG", 1, 0x00dcb20e, 0x000007b6 },
+ { "SPARKY7.DOG", 1, 0x00dcb9c4, 0x0000095e },
+ { "SPARKY8.DOG", 1, 0x00dcc322, 0x0000072a },
+ { "SPARKY_H.ACT", 1, 0x00dcca4c, 0x0000280a },
+ { "T1.BBK", 1, 0x00dcf256, 0x0000f492 },
+ { "T1.LUM", 1, 0x00dde6e8, 0x00000018 },
+ { "T1.MSK", 1, 0x00dde700, 0x00001f40 },
+ { "T1.PCX", 1, 0x00de0640, 0x0000aa3d },
+ { "T1.SAM", 1, 0x00deb07d, 0x0000711a },
+ { "T10.BBK", 1, 0x00df2197, 0x0000a957 },
+ { "T10.LUM", 1, 0x00dfcaee, 0x00000018 },
+ { "T10.MSK", 1, 0x00dfcb06, 0x00001f40 },
+ { "T10.PCX", 1, 0x00dfea46, 0x0001198a },
+ { "T10.SAM", 1, 0x00e103d0, 0x0000bc49 },
+ { "T11.BBK", 1, 0x00e1c019, 0x00001e84 },
+ { "T11.LUM", 1, 0x00e1de9d, 0x00000018 },
+ { "T11.MSK", 1, 0x00e1deb5, 0x00001f40 },
+ { "T11.PCX", 1, 0x00e1fdf5, 0x00008e7e },
+ { "T12.BBK", 1, 0x00e28c73, 0x000059b5 },
+ { "T12.LUM", 1, 0x00e2e628, 0x00000018 },
+ { "T12.MSK", 1, 0x00e2e640, 0x00001f40 },
+ { "T12.PCX", 1, 0x00e30580, 0x00007b3c },
+ { "T12.SAM", 1, 0x00e380bc, 0x0000fe4b },
+ { "T13.BBK", 1, 0x00e47f07, 0x000043b4 },
+ { "T13.LUM", 1, 0x00e4c2bb, 0x00000018 },
+ { "T13.MSK", 1, 0x00e4c2d3, 0x00001f40 },
+ { "T13.PCX", 1, 0x00e4e213, 0x00007591 },
+ { "T14.BBK", 1, 0x00e557a4, 0x0000468b },
+ { "T14.LUM", 1, 0x00e59e2f, 0x00000018 },
+ { "T14.MSK", 1, 0x00e59e47, 0x00001f40 },
+ { "T14.PCX", 1, 0x00e5bd87, 0x00007df5 },
+ { "T14.SAM", 1, 0x00e63b7c, 0x00016db3 },
+ { "T15.BBK", 1, 0x00e7a92f, 0x000096e6 },
+ { "T15.LUM", 1, 0x00e84015, 0x00000018 },
+ { "T15.MSK", 1, 0x00e8402d, 0x00001f40 },
+ { "T15.PCX", 1, 0x00e85f6d, 0x00008b28 },
+ { "T15.SAM", 1, 0x00e8ea95, 0x0000a7d0 },
+ { "T15B.SAM", 1, 0x00e99265, 0x000164d7 },
+ { "T16.BBK", 1, 0x00eaf73c, 0x000027ff },
+ { "T16.LUM", 1, 0x00eb1f3b, 0x00000018 },
+ { "T16.MSK", 1, 0x00eb1f53, 0x00001f40 },
+ { "T16.PCX", 1, 0x00eb3e93, 0x00009110 },
+ { "T17.BBK", 1, 0x00ebcfa3, 0x000056df },
+ { "T17.LUM", 1, 0x00ec2682, 0x00000018 },
+ { "T17.MSK", 1, 0x00ec269a, 0x00001f40 },
+ { "T17.PCX", 1, 0x00ec45da, 0x00007db6 },
+ { "T18.BBK", 1, 0x00ecc390, 0x00006174 },
+ { "T18.LUM", 1, 0x00ed2504, 0x00000018 },
+ { "T18.MSK", 1, 0x00ed251c, 0x00001f40 },
+ { "T18.PCX", 1, 0x00ed445c, 0x000087d6 },
+ { "T19.BBK", 1, 0x00edcc32, 0x0000aec8 },
+ { "T19.LUM", 1, 0x00ee7afa, 0x00000018 },
+ { "T19.MSK", 1, 0x00ee7b12, 0x00001f40 },
+ { "T19.PCX", 1, 0x00ee9a52, 0x0000768e },
+ { "T19.SAM", 1, 0x00ef10e0, 0x000167ea },
+ { "T1B.SAM", 1, 0x00f078ca, 0x0002fa9f },
+ { "T2.BBK", 1, 0x00f37369, 0x00004dea },
+ { "T2.LUM", 1, 0x00f3c153, 0x00000018 },
+ { "T2.MSK", 1, 0x00f3c16b, 0x00001f40 },
+ { "T2.PCX", 1, 0x00f3e0ab, 0x00011404 },
+ { "T2.SAM", 1, 0x00f4f4af, 0x0000aa32 },
+ { "T20.BBK", 1, 0x00f59ee1, 0x0000611c },
+ { "T20.LUM", 1, 0x00f5fffd, 0x00000018 },
+ { "T20.MSK", 1, 0x00f60015, 0x00001f40 },
+ { "T20.PCX", 1, 0x00f61f55, 0x0000852a },
+ { "T20.SAM", 1, 0x00f6a47f, 0x00007f9c },
+ { "T20B.SAM", 1, 0x00f7241b, 0x0000a2bc },
+ { "T21.BBK", 1, 0x00f7c6d7, 0x00000002 },
+ { "T21.PCX", 1, 0x00f7c6d9, 0x0000b7b0 },
+ { "T22.BBK", 1, 0x00f87e89, 0x00000002 },
+ { "T22.PCX", 1, 0x00f87e8b, 0x0000a982 },
+ { "T23.BBK", 1, 0x00f9280d, 0x00005bca },
+ { "T23.LUM", 1, 0x00f983d7, 0x00000018 },
+ { "T23.MSK", 1, 0x00f983ef, 0x00001f40 },
+ { "T23.PCX", 1, 0x00f9a32f, 0x00008200 },
+ { "T24.BBK", 1, 0x00fa252f, 0x0000aaf1 },
+ { "T24.LUM", 1, 0x00fad020, 0x00000018 },
+ { "T24.MSK", 1, 0x00fad038, 0x00001f40 },
+ { "T24.PCX", 1, 0x00faef78, 0x00006f7e },
+ { "T25.BBK", 1, 0x00fb5ef6, 0x0000a631 },
+ { "T25.LUM", 1, 0x00fc0527, 0x00000018 },
+ { "T25.MSK", 1, 0x00fc053f, 0x00001f40 },
+ { "T25.PCX", 1, 0x00fc247f, 0x00008881 },
+ { "T25.SAM", 1, 0x00fcad00, 0x000091ac },
+ { "T26.BBK", 1, 0x00fd3eac, 0x00014578 },
+ { "T26.LUM", 1, 0x00fe8424, 0x00000018 },
+ { "T26.MSK", 1, 0x00fe843c, 0x00001f40 },
+ { "T26.PCX", 1, 0x00fea37c, 0x00012570 },
+ { "T26A.SAM", 1, 0x00ffc8ec, 0x000126a6 },
+ { "T27.BBK", 1, 0x0100ef92, 0x0000a73e },
+ { "T27.LUM", 1, 0x010196d0, 0x00000018 },
+ { "T27.MSK", 1, 0x010196e8, 0x00001f40 },
+ { "T27.PCX", 1, 0x0101b628, 0x000085fa },
+ { "T28.BBK", 1, 0x01023c22, 0x00000002 },
+ { "T28.PCX", 1, 0x01023c24, 0x000017d2 },
+ { "T2B.SAM", 1, 0x010253f6, 0x00021df6 },
+ { "T3.BBK", 1, 0x010471ec, 0x00004b24 },
+ { "T3.LUM", 1, 0x0104bd10, 0x00000018 },
+ { "T3.MSK", 1, 0x0104bd28, 0x00001f40 },
+ { "T3.PCX", 1, 0x0104dc68, 0x0000724c },
+ { "T3.SAM", 1, 0x01054eb4, 0x00006042 },
+ { "T4.BBK", 1, 0x0105aef6, 0x00002dca },
+ { "T4.MSK", 1, 0x0105dcc0, 0x00001f40 },
+ { "T4.PCX", 1, 0x0105fc00, 0x00007566 },
+ { "T5.BBK", 1, 0x01067166, 0x00001ac0 },
+ { "T5.LUM", 1, 0x01068c26, 0x00000018 },
+ { "T5.MSK", 1, 0x01068c3e, 0x00001f40 },
+ { "T5.PCX", 1, 0x0106ab7e, 0x00009509 },
+ { "T5.SAM", 1, 0x01074087, 0x000049aa },
+ { "T5B.SAM", 1, 0x01078a31, 0x00022018 },
+ { "T5C.SAM", 1, 0x0109aa49, 0x00011612 },
+ { "T6.BBK", 1, 0x010ac05b, 0x00007db0 },
+ { "T6.LUM", 1, 0x010b3e0b, 0x00000018 },
+ { "T6.MSK", 1, 0x010b3e23, 0x00001f40 },
+ { "T6.PCX", 1, 0x010b5d63, 0x000096b4 },
+ { "T6.SAM", 1, 0x010bf417, 0x0000f04d },
+ { "T6A.SAM", 1, 0x010ce464, 0x000199ee },
+ { "T6B.PCX", 1, 0x010e7e52, 0x0000ad10 },
+ { "T6B.SAM", 1, 0x010f2b62, 0x00010cba },
+ { "T6C.SAM", 1, 0x0110381c, 0x00015041 },
+ { "T7.BBK", 1, 0x0111885d, 0x0000c781 },
+ { "T7.PCX", 1, 0x01124fde, 0x00006da0 },
+ { "T7.SAM", 1, 0x0112bd7e, 0x000172ea },
+ { "T8.BBK", 1, 0x01143068, 0x00002762 },
+ { "T8.LUM", 1, 0x011457ca, 0x00000018 },
+ { "T8.MSK", 1, 0x011457e2, 0x00001f40 },
+ { "T8.PCX", 1, 0x01147722, 0x0000831b },
+ { "T8.SAM", 1, 0x0114fa3d, 0x00012c01 },
+ { "T9.BBK", 1, 0x0116263e, 0x000029f3 },
+ { "T9.LUM", 1, 0x01165031, 0x00000018 },
+ { "T9.MSK", 1, 0x01165049, 0x00001f40 },
+ { "T9.PCX", 1, 0x01166f89, 0x0000735b },
+ { "T9.SAM", 1, 0x0116e2e4, 0x0000d9e6 },
+ { "TABLET.BBK", 1, 0x0117bcca, 0x00013902 },
+ { "TABLET.PCX", 1, 0x0118f5cc, 0x0000af16 },
+ { "TALLPYG.DOG", 1, 0x0119a4e2, 0x0000034a },
+ { "TAM1.DOG", 1, 0x0119a82c, 0x00001e8a },
+ { "TAM2.DOG", 1, 0x0119c6b6, 0x0000076c },
+ { "TAM3.DOG", 1, 0x0119ce22, 0x000007c2 },
+ { "TAM4.DOG", 1, 0x0119d5e4, 0x0000083c },
+ { "TEMPLE.ACT", 1, 0x0119de20, 0x00005052 },
+ { "TMPD.ACT", 1, 0x011a2e72, 0x0000b00c },
+ { "TRADER.ACT", 1, 0x011ade7e, 0x0001424a },
+ { "V1.BBK", 1, 0x011c20c8, 0x00006724 },
+ { "V1.PCX", 1, 0x011c87ec, 0x000091ea },
+ { "V1.SAM", 1, 0x011d19d6, 0x000061e5 },
+ { "V10.BBK", 1, 0x011d7bbb, 0x000094e8 },
+ { "V10.PCX", 1, 0x011e10a3, 0x0000946c },
+ { "V11.BBK", 1, 0x011ea50f, 0x0000e122 },
+ { "V11.PCX", 1, 0x011f8631, 0x0000946c },
+ { "V2.BBK", 1, 0x01201a9d, 0x00007dfb },
+ { "V2.LUM", 1, 0x01209898, 0x00000018 },
+ { "V2.MSK", 1, 0x012098b0, 0x00001f40 },
+ { "V2.PCX", 1, 0x0120b7f0, 0x0000876c },
+ { "V3.BBK", 1, 0x01213f5c, 0x0000d716 },
+ { "V3.LUM", 1, 0x01221672, 0x00000018 },
+ { "V3.MSK", 1, 0x0122168a, 0x00001f40 },
+ { "V3.PCX", 1, 0x012235ca, 0x00005efa },
+ { "V4.BBK", 1, 0x012294c4, 0x0000571a },
+ { "V4.PCX", 1, 0x0122ebde, 0x00010cd4 },
+ { "V5.BBK", 1, 0x0123f8b2, 0x0001c43f },
+ { "V5.MSK", 1, 0x0125bcf1, 0x00001f40 },
+ { "V5.PCX", 1, 0x0125dc31, 0x00009148 },
+ { "V5.SAM", 1, 0x01266d79, 0x0003953d },
+ { "V5B.SAM", 1, 0x012a02b6, 0x0000ce6f },
+ { "V5C.SAM", 1, 0x012ad125, 0x0000f142 },
+ { "V5D.SAM", 1, 0x012bc267, 0x00000f50 },
+ { "V5E.SAM", 1, 0x012bd1b7, 0x00009352 },
+ { "V5X.SAM", 1, 0x012c6509, 0x0001d7c2 },
+ { "V6.BBK", 1, 0x012e3ccb, 0x0000d716 },
+ { "V6.LUM", 1, 0x012f13e1, 0x00000018 },
+ { "V6.MSK", 1, 0x012f13f9, 0x00001f40 },
+ { "V6.PCX", 1, 0x012f3339, 0x000074ce },
+ { "V7.BBK", 1, 0x012fa807, 0x000177cd },
+ { "V7.PCX", 1, 0x01311fd4, 0x0000a3b4 },
+ { "V8.BBK", 1, 0x0131c388, 0x00006724 },
+ { "V8.PCX", 1, 0x01322aac, 0x0000a8d0 },
+ { "VACUUM.SAM", 1, 0x0132d37c, 0x00009516 },
+ { "WATER.ACT", 1, 0x01336892, 0x00001c02 },
+ { "WEDGE.ACT", 1, 0x01338494, 0x0000390e },
+ { "WEDGE.DOG", 1, 0x0133bda2, 0x000002c4 },
+ { "WEENIE.SAM", 1, 0x0133c066, 0x0000b4d2 },
+ { "WITCH1.DOG", 1, 0x01347538, 0x000012e4 },
+ { "WITCH2.DOG", 1, 0x0134881c, 0x0000088e },
+ { "WITCH3.DOG", 1, 0x013490aa, 0x00000df8 },
+ { "WITCH4.DOG", 1, 0x01349ea2, 0x000002b2 },
+ { "X1.BBK", 1, 0x0134a154, 0x00010e5d },
+ { "X1.PCX", 1, 0x0135afb1, 0x0000cc4b },
+ { "X10.BBK", 1, 0x01367bfc, 0x00009907 },
+ { "X10.PCX", 1, 0x01371503, 0x0000a1b3 },
+ { "X10_JOE.ACT", 1, 0x0137b6b6, 0x0000943a },
+ { "X10_RITA.ACT", 1, 0x01384af0, 0x000076d9 },
+ { "X11.BBK", 1, 0x0138c1c9, 0x00016966 },
+ { "X11.PCX", 1, 0x013a2b2f, 0x0000c160 },
+ { "X11_JOE.ACT", 1, 0x013aec8f, 0x0000872e },
+ { "X11_RITA.ACT", 1, 0x013b73bd, 0x0000a6f2 },
+ { "X2.BBK", 1, 0x013c1aaf, 0x0000df2b },
+ { "X2.PCX", 1, 0x013cf9da, 0x00013ed5 },
+ { "X2_JOE.ACT", 1, 0x013e38af, 0x00008042 },
+ { "X2_RITA.ACT", 1, 0x013eb8f1, 0x0000df02 },
+ { "X3.BBK", 1, 0x013f97f3, 0x00000002 },
+ { "X3.PCX", 1, 0x013f97f5, 0x0000d165 },
+ { "X3_RITA.ACT", 1, 0x0140695a, 0x0000a0fa },
+ { "X4.BBK", 1, 0x01410a54, 0x00004b53 },
+ { "X4.PCX", 1, 0x014155a7, 0x0000b51b },
+ { "X4A.SAM", 1, 0x01420ac2, 0x0001b456 },
+ { "X4B.SAM", 1, 0x0143bf18, 0x0002a1b4 },
+ { "X4_JOE.ACT", 1, 0x014660cc, 0x000088a5 },
+ { "X4_RITA.ACT", 1, 0x0146e971, 0x0000398a },
+ { "X5.BBK", 1, 0x014722fb, 0x000075a0 },
+ { "X5.PCX", 1, 0x0147989b, 0x0000adeb },
+ { "X5_SPARK.ACT", 1, 0x01484686, 0x00006e5a },
+ { "X6.BBK", 1, 0x0148b4e0, 0x0001889e },
+ { "X6.PCX", 1, 0x014a3d7e, 0x0000be75 },
+ { "X6_HUGH.ACT", 1, 0x014afbf3, 0x0000c25a },
+ { "X7.BBK", 1, 0x014bbe4d, 0x00002ada },
+ { "X7.PCX", 1, 0x014be927, 0x00009456 },
+ { "X7A.SAM", 1, 0x014c7d7d, 0x0001b7cb },
+ { "X7B.SAM", 1, 0x014e3548, 0x0003b107 },
+ { "X8.BBK", 1, 0x0151e64f, 0x00032a14 },
+ { "X8.PCX", 1, 0x01551063, 0x00013d4f },
+ { "X9.BBK", 1, 0x01564db2, 0x00028337 },
+ { "X9.PCX", 1, 0x0158d0e9, 0x0000a31c },
+ { "ZOMBIE.ACT", 1, 0x01597405, 0x000078ea },
+ { "ZOMBIE1.DOG", 1, 0x0159ecef, 0x00000f6a },
+ { "ZOMBIE2.DOG", 1, 0x0159fc59, 0x00000c40 }
+};
+
+ writeRecord(_resourceTablePEM10, sizeof(_resourceTablePEM10), GBVARS_RESOURCETABLEPM10_INDEX , GBVARS_QUEEN);
+}
+
+void Queen_addRestables() {
+ addRestables_resourceTablePEM10();
+} \ No newline at end of file
diff --git a/backends/platform/PalmOS/Src/builder/queen/bq_talk.c b/backends/platform/PalmOS/Src/builder/queen/bq_talk.c
new file mode 100644
index 0000000000..4798a3bbe0
--- /dev/null
+++ b/backends/platform/PalmOS/Src/builder/queen/bq_talk.c
@@ -0,0 +1,518 @@
+#include <PalmOS.h>
+#include "b_globals.h"
+
+typedef struct {
+ const char name[11]; // Nstr
+ signed char state,faceDirection; // S,F
+ signed char body,bf,rf,af;
+ const char animation[80]; // SANIMstr
+ signed char ff;
+} SpeechParameters;
+
+UInt8 *ptr;
+
+static UInt32 resize(void *p, UInt32 more) {
+ UInt32 old = MemPtrSize(p);
+ UInt8 *np = MemPtrNew(old + more);
+ MemMove(np, ptr, old);
+ MemPtrFree(ptr);
+ ptr = np;
+
+ return old;
+}
+
+#define DO_AddFunc(XX) \
+ static UInt32 addTalk_speechParameters_part##XX() { \
+ SpeechParameters _speechParameters_part[] = {
+
+#define DO_EndFunc \
+ }; \
+ UInt32 size = sizeof(_speechParameters_part); \
+ UInt32 old = resize(ptr, size); \
+ MemMove(ptr + old, _speechParameters_part, size); \
+ return MemPtrSize(ptr); \
+ }
+
+DO_AddFunc(1)
+ { "JOE",0,1,1,10,2,3,"",0},
+ { "JOE",0,3,3,28,2,3,"",0},
+ { "JOE",0,4,5,38,1,0,"",0},
+
+ { "JOE",1,1,1,45,-1,0,"",0},
+ { "JOE",1,3,3,28,2,3,"",0},
+ { "JOE",1,4,5,38,1,0,"",0},
+
+ { "JOE",2,1,1,46,-1,0,"",0},
+ { "JOE",2,3,3,28,2,3,"",0},
+ { "JOE",2,4,5,38,1,0,"",0},
+
+ { "JOE",3,1,1,47,-1,0,"",0},
+ { "JOE",3,3,3,28,2,3,"",0},
+ { "JOE",3,4,5,38,1,0,"",0},
+
+ { "JOE",4,1,1,50,-1,0,"",0},
+ { "JOE",4,3,3,28,2,3,"",0},
+ { "JOE",4,4,5,38,1,0,"",0},
+
+ { "JOE",5,1,2,0,0,0,"",0},
+ { "JOE",5,3,4,0,0,0,"",0},
+ { "JOE",5,4,6,0,0,0,"",0},
+
+ { "JOE",6,1,1,48,0,1,"",0},
+ { "JOE",6,3,3,28,2,3,"",0},
+ { "JOE",6,4,5,38,1,0,"",0},
+
+ { "JOE",7,1,1,51,0,1,"",0},
+ { "JOE",7,3,3,28,2,3,"",0},
+ { "JOE",7,4,5,38,1,0,"",0},
+
+ { "JOE",8,1,1,26,0,0,"",0},
+ { "JOE",8,3,3,28,2,3,"",0},
+ { "JOE",8,4,5,38,1,0,"",0},
+
+ { "JOE",9,1,1,29,0,0,"",0},
+ { "JOE",9,3,3,28,0,0,"",0},
+ { "JOE",9,4,5,38,0,0,"",0},
+
+ { "JOE",10,1,1,12,0,0,"T046,010,010,010,012,012,012,012,012,012,012,012,012,012,012,012,012,012,010,000",0},
+ { "JOE",10,3,3,18,0,0,"",0},
+ { "JOE",10,4,5,44,0,0,"",0},
+
+ { "JOE",11,1,1,53,-1,0,"",0},
+ { "JOE",11,3,3,28,2,3,"",0},
+ { "JOE",11,4,5,38,1,0,"",0},
+
+ { "JOE",12,1,1,10,2,3,"",0},
+ { "JOE",12,3,3,28,2,0,"",0},
+ { "JOE",12,4,5,38,1,0,"",0},
+
+ { "JOE",13,1,1,10,2,3,"T012,013,019,019,019,019,019,019,019,019,019,019,013,010,000",0},
+ { "JOE",13,3,3,28,2,3,"",0},
+ { "JOE",13,4,5,38,1,0,"",0},
+
+ { "JOE",14,1,1,16,2,3,"",16},
+ { "JOE",14,3,3,28,2,3,"",0},
+ { "JOE",14,4,5,38,1,0,"",0},
+
+ { "JOE",15,1,1,58,-1,0,"",0},
+ { "JOE",15,3,3,28,2,3,"",0},
+ { "JOE",15,4,5,38,1,0,"",0},
+
+ { "JOE",16,1,1,59,-1,0,"",0},
+ { "JOE",16,3,3,28,2,3,"",0},
+ { "JOE",16,4,5,38,1,0,"",0},
+
+ { "JOE",17,1,1,56,-1,0,"",0},
+ { "JOE",17,3,3,28,2,3,"",0},
+ { "JOE",17,4,5,38,1,0,"",0},
+
+ { "JOE",18,1,56,16,2,3,"T056,057,057,057,056,056,000",0},
+ { "JOE",18,3,3,28,2,3,"",0},
+ { "JOE",18,4,5,38,1,0,"",0},
+
+ { "JOE",19,1,54,16,2,3,"T054,055,057,056,000",0},
+ { "JOE",19,3,3,28,2,3,"",0},
+ { "JOE",19,4,5,38,1,0,"",0},
+
+ { "JOE",20,1,56,16,2,3,"T056,057,055,054,001,000",0},
+ { "JOE",20,3,3,28,2,3,"",0},
+ { "JOE",20,4,5,38,1,0,"",0},
+ { "JOE",21,1,1,60,-1,0,"",0},
+ { "JOE",21,3,3,28,2,3,"",0},
+ { "JOE",21,4,61,38,1,0,"",0},
+
+ { "JOE",22,1,1,16,2,3,"T063,060,000",0},
+ { "JOE",22,3,3,28,2,3,"",0},
+ { "JOE",22,4,5,38,1,0,"",0},
+
+ { "JOE",23,1,1,16,2,3,"T060,063,001,000",0},
+ { "JOE",23,3,3,28,2,3,"",0},
+ { "JOE",23,4,5,38,1,0,"",0},
+
+ { "JOE",24,1,1,47,-2,0,"",0},
+ { "JOE",24,3,3,28,2,3,"",0},
+ { "JOE",24,4,5,38,1,0,"",0},
+
+ { "RICO",0,0,1,7,1,3,"",7},
+ { "RICO",1,0,1,5,-1,0,"",7},
+ { "RICO",2,0,1,9,0,3,"",7},
+ { "RICO",3,0,1,4,-1,0,"",7},
+
+ { "EDDY",0,0,14,18,1,3,"",18},
+ { "EDDY",1,0,14,0,0,0,"T016,017,017,016,016,017,017,016,016,017,017,000",18},
+
+ { "MIKE",0,0,1,2,2,3,"",2},
+
+ { "LOLA",0,0,30,33,2,3,"",33},
+ { "LOLA",1,0,9,10,2,3,"",33},
+ { "LOLA",2,0,30,33,2,3,"",33},
+ { "LOLA",3,0,32,33,2,3,"",33},
+ { "LOLA",4,0,8,0,0,0,"",33},
+ { "LOLA",5,0,31,0,0,0,"",0},
+ { "LOLA",6,0,31,0,0,0,"047,048,049,050,000",33},
+DO_EndFunc
+DO_AddFunc(2)
+ { "LOLA_SHOWER",0,0,7,10,2,3,"",10},
+ { "LOLA_SHOWER",1,0,9,10,2,3,"",10},
+ { "LOLA_SHOWER",2,0,30,33,2,3,"",10},
+ { "LOLA_SHOWER",3,0,32,33,2,3,"",10},
+ { "LOLA_SHOWER",4,0,8,0,0,0,"",0},
+ { "LOLA_SHOWER",5,0,61,0,0,0,"",0},
+ { "LOLA_SHOWER",6,0,64,10,2,3,"",0},
+ { "LOLA_SHOWER",7,0,31,0,0,0,"062,063,064,000",0},
+
+ { "SECRETARY",0,0,1,12,2,3,"",12},
+ { "SECRETARY",1,0,1,12,2,0,"",12},
+ { "SECRETARY",2,0,1,12,2,0,"",12},
+
+ { "SPARKY",0,0,21,23,2,3,"",23},
+ { "SPARKY",1,0,21,22,0,0,"",0},
+ { "SPARKY",2,0,21,22,0,0,"021,042,043,000",0},
+ { "SPARKY",3,0,21,22,0,0,"043,042,021,000",0},
+ { "SPARKY",4,0,43,43,1,0,"",0},
+ { "SPARKY",14,0,21,29,5,0,"",29},
+
+ { "SPARKY-F",0,0,45,23,5,0,"",23},
+ { "SPARKY-F",1,0,45,47,0,0,"",0},
+ { "SPARKY-F",2,0,45,23,5,0,"045,046,046,045,000",23},
+ { "SPARKY-F",14,0,45,29,5,0,"",29},
+
+ { "FAYE",0,0,19,35,2,3,"",35},
+ { "FAYE",1,0,19,41,2,3,"",35},
+ { "FAYE",2,0,19,28,-1,0,"",35},
+ { "FAYE",3,0,19,20,0,0,"",0},
+ { "FAYE",4,0,19,27,-1,0,"",35},
+ { "FAYE",5,0,19,29,-1,0,"",35},
+ { "FAYE",6,0,59,35,2,3,"",35},
+ { "FAYE",7,0,19,30,-1,0,"",35},
+ { "FAYE",8,0,19,31,-1,0,"",35},
+
+ { "BOB",0,0,27,34,2,3,"",34},
+ { "BOB",1,0,27,28,-1,0,"",34},
+ { "BOB",2,0,30,0,0,0,"",0},
+ { "BOB",3,0,31,0,0,0,"",0},
+ { "BOB",4,0,27,61,-1,0,"",34},
+ { "BOB",5,0,27,42,1,0,"",42},
+
+ { "PYGMY",0,0,20,21,2,6,"",0},
+ { "PYGMY",1,0,20,21,2,6,"020,068,068,068,068,068,068,068,068,020,000",0},
+ { "PYGMY",2,0,20,21,2,6,"T028,029,030,031,031,031,031,030,029,028,035,000",0},
+ { "PYGMY",3,0,20,21,2,6,"T035,036,037,038,037,038,037,038,036,035,000",0},
+ { "PYGMY",4,0,20,21,2,6,"T032,033,032,033,032,033,035,000",0},
+ { "PYGMY",5,0,20,21,2,6,"T023,022,021,022,023,024,025,026,027,026,025,024,023,000",0},
+ { "PYGMY",6,0,20,21,2,6,"T034,034,034,035,000",0},
+
+ { "WITCH",0,0,39,40,2,6,"",40},
+ { "WITCH",1,0,39,40,2,6,"073,074,000",40},
+ { "WITCH",2,0,39,40,2,6,"074,073,000",40},
+ { "WITCH",3,0,39,40,2,6,"T047,048,049,050,051,000",40},
+ { "WITCH",4,0,39,40,2,6,"T052,053,054,055,056,057,058,057,056,056,056,055,054,053,052,000",40},
+ { "WITCH",5,0,39,40,2,6,"069,070,071,072,073,074,000",40},
+ { "WITCH",6,0,39,40,2,6,"074,073,072,071,070,069,070,000",40},
+ { "WITCH",7,0,39,51,-1,0,"",40},
+ { "WITCH",8,0,39,40,2,6,"T051,050,049,048,047,000",40},
+
+ { "CHIEF",0,0,1,7,1,7,"",3},
+ { "CHIEF",1,0,1,2,2,6,"062,063,064,065,066,000",0},
+ { "CHIEF",2,0,1,2,2,6,"066,065,064,063,062,000",0},
+ { "CHIEF",3,0,1,17,-1,0,"",3},
+ { "CHIEF",4,0,1,18,-1,0,"",3},
+ { "CHIEF",5,0,1,19,-1,0,"",3},
+
+ { "NAOMI",0,0,1,2,2,3,"",2},
+ { "NAOMI",1,0,1,2,2,6,"048,049,050,051,052,053,054,055,000",0},
+ { "NAOMI",2,0,1,2,2,6,"055,054,053,052,051,050,049,048,000",0},
+ { "NAOMI",3,0,1,13,-1,0,"",2},
+ { "NAOMI",4,0,1,14,-1,0,"",2},
+ { "NAOMI",5,0,1,10,-1,0,"",2},
+ { "NAOMI",6,0,1,12,-1,0,"",2},
+ { "NAOMI",7,0,1,12,-1,0,"T008,008,008,002,000",2},
+
+ { "WEDGEWOOD",0,0,8,1,2,0,"",8},
+ { "WEDGEWOOD",1,0,1,1,3,0,"",1},
+
+ { "BUD",0,0,1,2,3,2,"",2},
+ { "BUD",1,0,1,2,4,2,"T017,018,000",2},
+ { "BUD",2,0,1,21,-1,0,"",2},
+ { "BUD",3,0,1,14,-1,0,"",2},
+ { "BUD",4,0,1,15,-1,0,"",2},
+ { "BUD",5,0,1,20,-1,0,"",2},
+ { "BUD",6,0,1,16,-1,0,"",2},
+ { "BUD",7,0,1,19,-1,0,"",2},
+ { "BUD",8,0,1,17,-1,0,"",2},
+ { "BUD",9,0,1,14,-1,0,"T014,008,008,003,003,008,008,003,003,010,010,012,012,000",2},
+
+ { "LOU",0,0,1,2,2,3,"",2},
+ { "LOU",1,0,1,2,4,2,"013,014,015,016,017,018,000",2},
+ { "LOU",2,0,1,2,4,2,"018,017,016,015,014,013,000",2},
+
+ { "JIMMY",0,0,16,17,2,3,"",17},
+ { "JIMMY",1,0,16,25,-1,0,"",17},
+ { "JIMMY",2,0,16,26,-1,0,"",17},
+ { "JIMMY",3,0,16,27,-1,0,"",17},
+ { "JIMMY",4,0,16,28,-1,0,"",17},
+ { "JIMMY",5,0,16,29,-1,0,"",17},
+
+ { "TAMMY",0,0,1,2,2,3,"",2},
+ { "TAMMY",1,0,1,2,2,3,"T008,008,009,009,008,008,009,009,008,008,009,009,002,000",2},
+ { "TAMMY",2,0,1,2,2,3,"T002,010,010,010,002,000",2},
+ { "TAMMY",3,0,1,2,2,3,"T011,011,011,011,011,002,000",2},
+ { "TAMMY",4,0,1,2,2,3,"T013,014,015,013,014,015,013,009,001,000",2},
+
+ { "SKULL",0,0,9,9,4,0,"",0},
+ { "SKULL",1,0,1,9,4,0,"001,002,003,004,005,006,007,008,009,000",0},
+ { "SKULL",2,0,1,9,4,0,"009,008,007,006,005,004,003,002,001,000",0},
+DO_EndFunc
+DO_AddFunc(3)
+ { "APE",0,0,1,6,7,0,"",6},
+ { "APE",1,0,1,6,7,0,"002,001,000",6},
+ { "APE",2,0,1,6,7,0,"002,003,001,000",6},
+ { "APE",3,0,1,6,7,0,"004,005,004,005,004,001,000",6},
+ { "APE",4,0,1,6,7,0,"001,003,005,004,005,004,001,000",6},
+
+ { "APE1",0,0,15,16,7,0,"",16},
+ { "APE2",0,0,14,6,7,0,"",6},
+
+ { "SHOWERAM",0,0,1,2,3,0,"",2},
+ { "SHOWERAM",1,0,1,2,3,0,"026,027,028,029,001,000",2},
+ { "SHOWERAM",2,0,1,2,3,0,"001,029,028,027,026,000",2},
+
+ { "PRINCESS1",0,0,19,23,2,3,"",23},
+ { "PRINCESS1",1,0,19,41,-1,0,"",23},
+ { "PRINCESS1",2,0,19,42,-1,0,"",23},
+ { "PRINCESS1",3,0,19,45,-1,0,"",23},
+ { "PRINCESS1",4,0,19,40,-1,0,"",23},
+ { "PRINCESS1",5,0,19,45,2,3,"T40,043,044,045,000",45},
+ { "PRINCESS1",6,0,19,45,-1,0,"T041,038,000",38},
+ { "PRINCESS1",7,0,22,0,0,0,"",0},
+ { "PRINCESS1",8,0,19,45,2,3,"T045,044,043,040,039,000",39},
+
+ { "PRINCESS2",0,0,46,23,2,3,"",23},
+ { "PRINCESS2",1,0,46,29,2,3,"",29},
+ { "PRINCESS2",2,0,46,29,2,3,"T029,036,035,000",35},
+
+ { "GUARDS",0,0,7,7,0,0,"",7},
+
+ { "AMGUARD",0,0,19,22,2,3,"",22},
+
+ { "MAN1",0,0,2,3,2,3,"",3},
+ { "MAN2",0,0,9,10,1,2,"",10},
+
+ { "DOG",0,0,6,6,1,0,"",0},
+ { "DOG",1,0,6,6,1,0,"010,009,008,000",0},
+ { "DOG",2,0,6,6,1,0,"008,009,010,000",0},
+
+ { "CHEF",0,0,5,6,2,3,"",6},
+
+ { "HENRY",0,0,7,9,2,3,"",9},
+ { "HENRY",1,0,7,21,-1,0,"",9},
+ { "HENRY",2,0,7,19,-1,0,"",9},
+ { "HENRY",3,0,7,20,-1,0,"",9},
+ { "HENRY",4,0,8,9,2,3,"",9},
+ { "HENRY",5,0,23,9,-1,0,"",9},
+ { "HENRY",6,0,7,9,2,3,"T019,015,017,017,017,017,017,017,017,015,009,000",9},
+ { "HENRY",7,0,7,9,2,3,"T018,010,000",10},
+ { "HENRY",8,0,7,9,2,3,"T018,016,000",16},
+ { "HENRY",9,0,7,9,2,3,"T018,011,000",11},
+ { "HENRY",10,0,29,33,1,1,"",33},
+ { "HENRY",11,0,7,30,2,0,"",9},
+ { "HENRY",12,0,7,9,2,3,"025,026,000",26},
+ { "HENRY",13,0,7,9,2,3,"027,028,027,028,000",28},
+ { "HENRY",14,0,7,9,2,3,"026,025,007,000",9},
+
+ { "JOHAN",0,0,1,15,2,3,"",15},
+ { "JOHAN",1,0,1,0,0,0,"T006,007,008,000",15},
+ { "JOHAN",2,0,1,15,2,3,"T002,003,004,005,004,005,004,005,004,005,004,005,004,003,002,000",15},
+ { "JOHAN",3,0,1,8,-1,0,"",15},
+ { "JOHAN",4,0,1,0,0,0,"T008,007,006,001,000",15},
+
+ { "KLUNK",0,0,1,2,2,3,"",2},
+ { "KLUNK",1,0,1,2,2,3,"019,020,021,022,001,000",2},
+ { "KLUNK",2,0,1,2,2,3,"001,022,021,020,019,016,517,000",2},
+ { "KLUNK",3,0,1,2,2,3,"T010,011,010,011,010,011,009,000",2},
+
+ { "FRANK",0,0,13,14,2,3,"",14},
+ { "FRANK",1,0,13,20,0,1,"",14},
+ { "FRANK",2,0,13,14,2,3,"025,026,027,027,027,026,026,026,027,027,026,026,027,025,013,000",14},
+ { "FRANK",3,0,28,14,2,3,"",14},
+
+ { "DEATH",0,0,1,2,2,3,"",2},
+ { "DEATH",1,0,1,2,2,3,"013,014,015,016,017,001,000",0},
+ { "DEATH",2,0,1,2,2,3,"001,017,016,015,014,013,000",0},
+ { "DEATH",3,0,1,2,2,3,"T018,019,020,021,021,022,022,020,021,022,020,021,022,023,024,524,000",2},
+ { "DEATH",4,0,1,2,2,3,"T025,026,027,028,028,028,028,028,028,028,028,028,029,035,000",2},
+ { "DEATH",5,0,1,2,2,3,"T030,031,032,033,033,033,033,033,033,033,033,033,034,035,000",2},
+ { "DEATH",6,0,1,2,2,3,"T023,022,020,019,018,001,000",2},
+
+ { "JASPAR",0,0,1,1,22,0,"026,027,028,029,028,029,028,029,030,023,000",0},
+ { "JASPAR",1,0,1,1,22,0,"023,026,000",0},
+
+ { "ORACLE",0,0,1,5,3,0,"",0},
+
+ { "ZOMBIE",0,0,1,5,2,3,"",5},
+ { "ZOMBIE",1,0,1,12,-1,0,"",5},
+ { "ZOMBIE",2,0,1,13,-1,0,"",5},
+ { "ZOMBIE",3,0,1,1,5,5,"",5},
+
+ { "ZOMBIE2",0,0,14,14,0,0,"",0},
+ { "ZOMBIE3",0,0,18,18,0,0,"",0},
+
+ { "ANDERSON",0,0,7,8,2,3,"",8},
+ { "ANDERSON",1,0,7,8,1,0,"",8},
+ { "ANDERSON",2,0,7,16,-1,0,"",8},
+ { "ANDERSON",3,0,7,18,-1,0,"",8},
+ { "ANDERSON",4,0,7,19,-1,0,"",8},
+ { "ANDERSON",5,0,7,20,-1,0,"",8},
+ { "ANDERSON",6,0,7,21,1,0,"",8},
+
+ { "COMPY",0,0,12,12,-1,0,"",0},
+ { "COMPY",1,0,10,10,10,0,"010,011,012,012,013,014,014,000",0},
+ { "COMPY",2,0,10,10,10,0,"014,013,012,000",0},
+
+ { "DEINO",0,0,13,13,-1,0,"",0},
+ { "DEINO",1,0,9,9,9,0,"009,010,000",0},
+
+ { "TMPD",0,0,19,22,2,3,"",22},
+
+ { "IAN",0,0,7,9,2,3,"",9},
+ { "IAN",1,0,8,25,3,0,"",25},
+ { "IAN",2,0,7,21,-1,0,"",9},
+ { "IAN",3,0,7,22,1,0,"",9},
+ { "IAN",4,0,7,22,-1,0,"",9},
+ { "IAN",5,0,7,24,-1,0,"",9},
+ { "IAN",6,0,7,9,2,3,"034,034,034,035,035,036,036,035,035,036,035,036,035,000",9},
+ { "IAN",7,0,7,31,-1,0,"",9},
+DO_EndFunc
+DO_AddFunc(4)
+ { "FAYE-H",0,0,1,1,4,1,"",1},
+ { "FAYE-H",1,0,1,1,4,1,"007,000",7},
+ { "FAYE-H",2,0,1,1,4,1,"009,010,011,009,001,000",1},
+ { "FAYE-H",3,0,1,1,4,1,"E012,013,000",1},
+ { "FAYE-H",4,0,1,1,4,1,"E015,000",1},
+ { "FAYE-H",5,0,1,1,4,1,"E014,000",1},
+
+ { "AZURA-H",0,0,1,1,4,1,"",1},
+ { "AZURA-H",1,0,1,1,4,1,"007,000",7},
+ { "AZURA-H",2,0,1,1,4,1,"009,010,011,009,001,000",1},
+ { "AZURA-H",3,0,1,1,4,1,"E012,013,000",1},
+ { "AZURA-H",4,0,1,1,4,1,"E015,000",1},
+ { "AZURA-H",5,0,1,1,4,1,"E014,000",1},
+
+ { "FRANK-H",0,0,1,1,4,1,"",1},
+ { "FRANK-H",1,0,1,1,4,1,"E009,000",1},
+ { "FRANK-H",2,0,1,1,4,1,"E007,000",1},
+ { "FRANK-H",3,0,1,1,4,1,"010,011,012,013,014,015,010,000",1},
+
+ { "JOE-E",0,0,1,2,4,1,"",2},
+ { "JOE-E",6,0,1,2,4,1,"008,009,008,002,000",2},
+
+ { "AZURA-E",0,0,1,1,5,1,"",1},
+ { "AZURA-E",1,0,1,1,5,1,"009,010,009,008,000",1},
+
+ { "FAYE-E",0,0,1,4,4,1,"",1},
+ { "FAYE-E",1,0,1,4,4,1,"002,003,002,001,000",1},
+
+ { "ANDSON-E",0,0,1,3,4,1,"",1},
+ { "ANDSON-E",1,0,1,3,4,1,"002,001,000",1},
+
+ { "JOE-H",0,0,1,1,4,4,"",1},
+ { "JOE-H",1,0,1,1,2,3,"012,013,014,000",14},
+ { "JOE-H",2,0,1,1,2,3,"010,011,000",11},
+ { "JOE-H",3,0,1,1,2,3,"014,013,012,001,000",1},
+ { "JOE-H",4,0,1,13,1,0,"",13},
+
+ { "RITA-H",0,0,7,1,2,3,"",1},
+ { "RITA-H",1,0,7,0,0,0,"009,010,011,012,013,000",13},
+ { "RITA-H",2,0,7,0,0,0,"014,015,016,000",16},
+ { "RITA-H",3,0,7,0,0,0,"013,012,011,010,000",10},
+ { "RITA-H",4,0,7,0,0,0,"009,007,008,007,009,000",9},
+ { "RITA-H",5,0,7,0,0,0,"016,015,014,000",14},
+
+ { "RITA",0,0,1,4,2,3,"",4},
+ { "RITA",1,0,2,4,2,3,"",4},
+
+ { "SPARKY-H",0,0,1,1,2,3,"",1},
+
+ { "HUGH",0,0,1,1,2,3,"",1},
+ { "HUGH",1,0,7,7,2,3,"",7},
+
+ { "X2_JOE",0,0,1,1,2,3,"",1},
+ { "X2_JOE",1,0,1,1,2,3,"001,007,008,008,007,001,000",1},
+
+ { "X2_RITA",0,0,1,1,2,3,"",1},
+ { "X2_RITA",1,0,1,1,2,3,"001,007,008,008,007,001,000",1},
+
+ { "X3_RITA",0,0,1,1,4,1,"",1},
+ { "X3_RITA",1,0,1,1,4,1,"007,000",7},
+ { "X3_RITA",2,0,1,1,4,1,"009,010,011,009,001,000",1},
+ { "X3_RITA",3,0,1,1,4,1,"E012,013,000",1},
+ { "X3_RITA",4,0,1,1,4,1,"E015,000",1},
+ { "X3_RITA",5,0,1,1,4,1,"E014,000",1},
+
+ { "X4_JOE",0,0,1,1,3,4,"",1},
+ { "X4_JOE",1,0,1,13,2,3,"",13},
+ { "X4_JOE",2,0,1,1,3,4,"009,010,011,012,013,000",13},
+ { "X4_JOE",3,0,1,1,3,4,"012,011,010,009,000",9},
+ { "X4_JOE",4,0,1,1,3,4,"001,019,000",19},
+
+ { "X4_RITA",0,0,1,1,0,1,"",1},
+ { "X4_RITA",1,0,1,7,0,1,"",7},
+ { "X4_RITA",2,0,1,1,3,4,"004,005,006,006,006,006,007,000",7},
+ { "X4_RITA",3,0,1,1,3,4,"005,004,001,000",1},
+ { "X4_RITA",4,0,1,1,3,4,"001,003,000",3},
+
+ { "X5_SPARKY",0,0,1,1,2,3,"",1},
+ { "X5_SPARKY",1,0,1,1,2,3,"001,010,011,011,001,000",1},
+ { "X5_SPARKY",2,0,1,1,2,3,"001,007,008,009,000",9},
+
+ { "X6_HUGH",0,0,1,1,2,3,"",1},
+ { "X6_HUGH",1,0,1,1,2,3,"007,007,007,007,,001,000",1},
+ { "X6_HUGH",2,0,1,1,2,3,"008,008,008,008,008,009,009,008,008,008,009,008,000",8},
+
+ { "X10_JOE",0,0,1,2,2,3,"",2},
+ { "X10_JOE",1,0,1,8,2,3,"",8},
+ { "X10_JOE",2,0,1,2,2,3,"014,014,014,015,015,014,014,015,015,000",2},
+
+ { "X10_RITA",0,0,1,2,2,3,"",2},
+
+ { "X11_JOE",0,0,1,2,0,1,"",2},
+
+ { "X11_RITA",0,0,1,2,0,1,"",2},
+ { "X11_RITA",1,0,1,2,1,0,"003,004,000",4},
+
+ { "JOHN", 0, 0, 1, 2, 2, 3, "", 1 },
+ { "JOHN", 1, 0, 1, 15, -1, 0, "", 1 },
+ { "JOHN", 2, 0, 1, 16, -1, 0, "", 1 },
+ { "JOHN", 3, 0, 1, 17, -1, 0, "", 1 },
+
+ { "STEVE", 0, 0, 8, 2, 2, 3, "", 2 },
+ { "STEVE", 1, 0, 8, 16, -1, 0, "", 2 },
+ { "STEVE", 2, 0, 9, 18, -1, 0, "T016,017,017,016,008,000", 2 },
+ { "STEVE", 3, 0, 8, 18, -1, 0, "", 2 },
+
+ { "TONY", 0, 0, 1, 2, 2, 3, "", 1 },
+ { "TONY", 1, 0, 1, 12, -1, 0, "", 1 },
+
+ { "*",0,0,0,0,0,0,"",0}
+DO_EndFunc
+
+static void addTalk_speechParameters() {
+ UInt32 remove, size;
+
+ remove = 10;
+ ptr = MemPtrNew(remove);
+
+ size = addTalk_speechParameters_part1();
+ size = addTalk_speechParameters_part2();
+ size = addTalk_speechParameters_part3();
+ size = addTalk_speechParameters_part4();
+
+ size = MemPtrSize(ptr) - remove;
+
+ writeRecord(ptr + remove, size, GBVARS_SPEECHPARAMETERS_INDEX , GBVARS_QUEEN);
+ MemPtrFree(ptr);
+}
+
+void Queen_addTalk() {
+ addTalk_speechParameters();
+} \ No newline at end of file
diff --git a/backends/platform/PalmOS/Src/builder/scumm/bl_akos.c b/backends/platform/PalmOS/Src/builder/scumm/bl_akos.c
new file mode 100644
index 0000000000..e5f7c2721f
--- /dev/null
+++ b/backends/platform/PalmOS/Src/builder/scumm/bl_akos.c
@@ -0,0 +1,117 @@
+#include <PalmOS.h>
+#include "b_globals.h"
+
+static void addAkos_bigScaleTable() {
+byte bigCostumeScaleTable[768] = {
+ 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0,
+ 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0,
+ 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8,
+ 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8,
+ 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4,
+ 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4,
+ 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC,
+ 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC,
+ 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2,
+ 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2,
+ 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA,
+ 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA,
+ 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6,
+ 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6,
+ 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE,
+ 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE,
+ 0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1,
+ 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1,
+ 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9,
+ 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9,
+ 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5,
+ 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5,
+ 0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED,
+ 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD,
+ 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3,
+ 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3,
+ 0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB,
+ 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB,
+ 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7,
+ 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7,
+ 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF,
+ 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFE,
+
+ 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0,
+ 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0,
+ 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8,
+ 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8,
+ 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4,
+ 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4,
+ 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC,
+ 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC,
+ 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2,
+ 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2,
+ 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA,
+ 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA,
+ 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6,
+ 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6,
+ 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE,
+ 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE,
+ 0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1,
+ 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1,
+ 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9,
+ 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9,
+ 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5,
+ 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5,
+ 0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED,
+ 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD,
+ 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3,
+ 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3,
+ 0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB,
+ 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB,
+ 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7,
+ 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7,
+ 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF,
+ 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFE,
+
+ 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0,
+ 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0,
+ 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8,
+ 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8,
+ 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4,
+ 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4,
+ 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC,
+ 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC,
+ 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2,
+ 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2,
+ 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA,
+ 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA,
+ 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6,
+ 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6,
+ 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE,
+ 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE,
+ 0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1,
+ 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1,
+ 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9,
+ 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9,
+ 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5,
+ 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5,
+ 0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED,
+ 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD,
+ 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3,
+ 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3,
+ 0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB,
+ 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB,
+ 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7,
+ 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7,
+ 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF,
+ 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF,
+};
+ writeRecord(bigCostumeScaleTable, sizeof(bigCostumeScaleTable), GBVARS_BIGSCALETABLE_INDEX , GBVARS_SCUMM);
+}
+
+
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+
+void addAkos() {
+ addAkos_bigScaleTable();
+
+} \ No newline at end of file
diff --git a/backends/platform/PalmOS/Src/builder/scumm/bl_charset.c b/backends/platform/PalmOS/Src/builder/scumm/bl_charset.c
new file mode 100644
index 0000000000..1fe8d561af
--- /dev/null
+++ b/backends/platform/PalmOS/Src/builder/scumm/bl_charset.c
@@ -0,0 +1,689 @@
+#include <PalmOS.h>
+#include "b_globals.h"
+
+static void addCharset_germanCharsetDataV2() {
+ byte germanCharsetDataV2[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x03, 0x06, 0x0c, 0x18, 0x3e, 0x03, 0x00,
+ 0x80, 0xc0, 0x60, 0x30, 0x18, 0x7c, 0xc0, 0x00,
+ 0x00, 0x03, 0x3e, 0x18, 0x0c, 0x06, 0x03, 0x01,
+ 0x00, 0xc0, 0x7c, 0x18, 0x30, 0x60, 0xc0, 0x80,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x07, 0x07, 0x0f, 0x1f, 0x7f,
+ 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0,
+ 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07,
+ 0x00, 0x00, 0x00, 0x01, 0x03, 0x06, 0x0c, 0x18,
+ 0x00, 0x00, 0x00, 0x80, 0xc0, 0x60, 0x30, 0x18,
+ 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00,
+ 0x18, 0x0c, 0x06, 0x03, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0xf8, 0xf8, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x07, 0x0c, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0xc0, 0xe0, 0x30, 0x18, 0x18,
+ 0x18, 0x18, 0x30, 0xe0, 0xc0, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x0c, 0x07, 0x03, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xff, 0xff, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0xff, 0xff, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x18, 0x3c, 0x66, 0xc3, 0xc3, 0x66, 0x3c, 0x18,
+ 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x3c, 0x18,
+ 0x18, 0x66, 0xc3, 0xdb, 0xdb, 0xc3, 0x66, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x00,
+ 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x66, 0x66, 0xff, 0x66, 0xff, 0x66, 0x66, 0x00,
+ 0x18, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x18, 0x00,
+ 0x62, 0x66, 0x0c, 0x18, 0x30, 0x66, 0x46, 0x00,
+ 0x3c, 0x66, 0x3c, 0x38, 0x67, 0x66, 0x3f, 0x00,
+ 0x30, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0c, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00,
+ 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00,
+ 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00,
+ 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30,
+ 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00,
+ 0x00, 0x03, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00,
+ 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00,
+ 0x18, 0x18, 0x38, 0x18, 0x18, 0x18, 0x7e, 0x00,
+ 0x3c, 0x66, 0x06, 0x0c, 0x30, 0x60, 0x7e, 0x00,
+ 0x3c, 0x66, 0x06, 0x1c, 0x06, 0x66, 0x3c, 0x00,
+ 0x06, 0x0e, 0x1e, 0x66, 0x7f, 0x06, 0x06, 0x00,
+ 0x7e, 0x60, 0x7c, 0x06, 0x06, 0x66, 0x3c, 0x00,
+ 0x3c, 0x66, 0x60, 0x7c, 0x66, 0x66, 0x3c, 0x00,
+ 0x7e, 0x66, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x00,
+ 0x3c, 0x66, 0x66, 0x3c, 0x66, 0x66, 0x3c, 0x00,
+ 0x3c, 0x66, 0x66, 0x3e, 0x06, 0x66, 0x3c, 0x00,
+ 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30,
+ 0x0e, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0e, 0x00,
+ 0x7c, 0x82, 0xba, 0xa2, 0xa2, 0xba, 0x82, 0x7c,
+ 0x70, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x70, 0x00,
+ 0x3c, 0x66, 0x06, 0x0c, 0x18, 0x00, 0x18, 0x00,
+ 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x18, 0x3c, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x00,
+ 0x7c, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x7c, 0x00,
+ 0x3c, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3c, 0x00,
+ 0x78, 0x6c, 0x66, 0x66, 0x66, 0x6c, 0x78, 0x00,
+ 0x7e, 0x60, 0x60, 0x78, 0x60, 0x60, 0x7e, 0x00,
+ 0x7e, 0x60, 0x60, 0x78, 0x60, 0x60, 0x60, 0x00,
+ 0x3c, 0x66, 0x60, 0x6e, 0x66, 0x66, 0x3c, 0x00,
+ 0x66, 0x66, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x00,
+ 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00,
+ 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x6c, 0x38, 0x00,
+ 0x66, 0x6c, 0x78, 0x70, 0x78, 0x6c, 0x66, 0x00,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x00,
+ 0x63, 0x77, 0x7f, 0x6b, 0x63, 0x63, 0x63, 0x00,
+ 0x66, 0x76, 0x7e, 0x7e, 0x6e, 0x66, 0x66, 0x00,
+ 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00,
+ 0x7c, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x00,
+ 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x0e, 0x00,
+ 0x7c, 0x66, 0x66, 0x7c, 0x78, 0x6c, 0x66, 0x00,
+ 0x3c, 0x66, 0x60, 0x3c, 0x06, 0x66, 0x3c, 0x00,
+ 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00,
+ 0x63, 0x63, 0x63, 0x6b, 0x7f, 0x77, 0x63, 0x00,
+ 0x66, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x66, 0x00,
+ 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x00,
+ 0x7e, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x7e, 0x00,
+ 0x66, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x00,
+ 0x66, 0x00, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00,
+ 0x66, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0xdb, 0x00,
+ 0x00, 0x10, 0x30, 0x7f, 0x7f, 0x30, 0x10, 0x00,
+ 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00,
+ 0x00, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x7c, 0x00,
+ 0x00, 0x00, 0x3c, 0x60, 0x60, 0x60, 0x3c, 0x00,
+ 0x00, 0x06, 0x06, 0x3e, 0x66, 0x66, 0x3e, 0x00,
+ 0x00, 0x00, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00,
+ 0x00, 0x0e, 0x18, 0x3e, 0x18, 0x18, 0x18, 0x00,
+ 0x00, 0x00, 0x3e, 0x66, 0x66, 0x3e, 0x06, 0x7c,
+ 0x00, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x00,
+ 0x00, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00,
+ 0x00, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x3c,
+ 0x00, 0x60, 0x60, 0x6c, 0x78, 0x6c, 0x66, 0x00,
+ 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00,
+ 0x00, 0x00, 0x66, 0x7f, 0x7f, 0x6b, 0x63, 0x00,
+ 0x00, 0x00, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x00,
+ 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x00,
+ 0x00, 0x00, 0x7c, 0x66, 0x66, 0x7c, 0x60, 0x60,
+ 0x00, 0x00, 0x3e, 0x66, 0x66, 0x3e, 0x06, 0x06,
+ 0x00, 0x00, 0x7c, 0x66, 0x60, 0x60, 0x60, 0x00,
+ 0x00, 0x00, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x00,
+ 0x00, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x0e, 0x00,
+ 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x00,
+ 0x00, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00,
+ 0x00, 0x00, 0x63, 0x6b, 0x7f, 0x3e, 0x36, 0x00,
+ 0x00, 0x00, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x00,
+ 0x00, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x0c, 0x78,
+ 0x00, 0x00, 0x7e, 0x0c, 0x18, 0x30, 0x7e, 0x00,
+ 0x66, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x00,
+ 0x66, 0x18, 0x3c, 0x66, 0x7e, 0x66, 0x66, 0x00,
+ 0x42, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00,
+ 0x1c, 0x36, 0x36, 0x7c, 0x66, 0x66, 0x7c, 0x40,
+ 0x08, 0x0c, 0x0e, 0xff, 0xff, 0x0e, 0x0c, 0x08,
+ };
+
+ writeRecord(germanCharsetDataV2, sizeof(germanCharsetDataV2), GBVARS_GERMANCHARSETDATAV2_INDEX , GBVARS_SCUMM);
+}
+
+static void addCharset_frenchCharsetDataV2() {
+ byte frenchCharsetDataV2[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x03, 0x06, 0x0c, 0x18, 0x3e, 0x03, 0x00,
+ 0x80, 0xc0, 0x60, 0x30, 0x18, 0x7c, 0xc0, 0x00,
+ 0x00, 0x03, 0x3e, 0x18, 0x0c, 0x06, 0x03, 0x01,
+ 0x00, 0xc0, 0x7c, 0x18, 0x30, 0x60, 0xc0, 0x80,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x07, 0x07, 0x0f, 0x1f, 0x7f,
+ 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0,
+ 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07,
+ 0x00, 0x00, 0x00, 0x01, 0x03, 0x06, 0x0c, 0x18,
+ 0x00, 0x00, 0x00, 0x80, 0xc0, 0x60, 0x30, 0x18,
+ 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00,
+ 0x18, 0x0c, 0x06, 0x03, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0xf8, 0xf8, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x07, 0x0c, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0xc0, 0xe0, 0x30, 0x18, 0x18,
+ 0x18, 0x18, 0x30, 0xe0, 0xc0, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x0c, 0x07, 0x03, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xff, 0xff, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0xff, 0xff, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x18, 0x3c, 0x66, 0xc3, 0xc3, 0x66, 0x3c, 0x18,
+ 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x3c, 0x18,
+ 0x18, 0x66, 0xc3, 0xdb, 0xdb, 0xc3, 0x66, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x00,
+ 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x66, 0x66, 0xff, 0x66, 0xff, 0x66, 0x66, 0x00,
+ 0x18, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x18, 0x00,
+ 0x62, 0x66, 0x0c, 0x18, 0x30, 0x66, 0x46, 0x00,
+ 0x3c, 0x66, 0x3c, 0x38, 0x67, 0x66, 0x3f, 0x00,
+ 0x30, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0c, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00,
+ 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00,
+ 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00,
+ 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30,
+ 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00,
+ 0x00, 0x03, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00,
+ 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00,
+ 0x18, 0x18, 0x38, 0x18, 0x18, 0x18, 0x7e, 0x00,
+ 0x3c, 0x66, 0x06, 0x0c, 0x30, 0x60, 0x7e, 0x00,
+ 0x3c, 0x66, 0x06, 0x1c, 0x06, 0x66, 0x3c, 0x00,
+ 0x06, 0x0e, 0x1e, 0x66, 0x7f, 0x06, 0x06, 0x00,
+ 0x7e, 0x60, 0x7c, 0x06, 0x06, 0x66, 0x3c, 0x00,
+ 0x3c, 0x66, 0x60, 0x7c, 0x66, 0x66, 0x3c, 0x00,
+ 0x7e, 0x66, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x00,
+ 0x3c, 0x66, 0x66, 0x3c, 0x66, 0x66, 0x3c, 0x00,
+ 0x3c, 0x66, 0x66, 0x3e, 0x06, 0x66, 0x3c, 0x00,
+ 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30,
+ 0x10, 0x08, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00,
+ 0x18, 0x24, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00,
+ 0x00, 0x00, 0x3c, 0x60, 0x60, 0x3c, 0x18, 0x38,
+ 0x3c, 0x66, 0x06, 0x0c, 0x18, 0x00, 0x18, 0x00,
+ 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x18, 0x3c, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x00,
+ 0x7c, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x7c, 0x00,
+ 0x3c, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3c, 0x00,
+ 0x78, 0x6c, 0x66, 0x66, 0x66, 0x6c, 0x78, 0x00,
+ 0x7e, 0x60, 0x60, 0x78, 0x60, 0x60, 0x7e, 0x00,
+ 0x7e, 0x60, 0x60, 0x78, 0x60, 0x60, 0x60, 0x00,
+ 0x3c, 0x66, 0x60, 0x6e, 0x66, 0x66, 0x3c, 0x00,
+ 0x66, 0x66, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x00,
+ 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00,
+ 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x6c, 0x38, 0x00,
+ 0x66, 0x6c, 0x78, 0x70, 0x78, 0x6c, 0x66, 0x00,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x00,
+ 0x63, 0x77, 0x7f, 0x6b, 0x63, 0x63, 0x63, 0x00,
+ 0x66, 0x76, 0x7e, 0x7e, 0x6e, 0x66, 0x66, 0x00,
+ 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00,
+ 0x7c, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x00,
+ 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x0e, 0x00,
+ 0x7c, 0x66, 0x66, 0x7c, 0x78, 0x6c, 0x66, 0x00,
+ 0x3c, 0x66, 0x60, 0x3c, 0x06, 0x66, 0x3c, 0x00,
+ 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00,
+ 0x63, 0x63, 0x63, 0x6b, 0x7f, 0x77, 0x63, 0x00,
+ 0x66, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x66, 0x00,
+ 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x00,
+ 0x7e, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x7e, 0x00,
+ 0x08, 0x10, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00,
+ 0x10, 0x08, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00,
+ 0x18, 0x24, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0xdb, 0x00,
+ 0x00, 0x6c, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00,
+ 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00,
+ 0x00, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x7c, 0x00,
+ 0x00, 0x00, 0x3c, 0x60, 0x60, 0x60, 0x3c, 0x00,
+ 0x00, 0x06, 0x06, 0x3e, 0x66, 0x66, 0x3e, 0x00,
+ 0x00, 0x00, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00,
+ 0x00, 0x0e, 0x18, 0x3e, 0x18, 0x18, 0x18, 0x00,
+ 0x00, 0x00, 0x3e, 0x66, 0x66, 0x3e, 0x06, 0x7c,
+ 0x00, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x00,
+ 0x00, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00,
+ 0x00, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x3c,
+ 0x00, 0x60, 0x60, 0x6c, 0x78, 0x6c, 0x66, 0x00,
+ 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00,
+ 0x00, 0x00, 0x66, 0x7f, 0x7f, 0x6b, 0x63, 0x00,
+ 0x00, 0x00, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x00,
+ 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x00,
+ 0x00, 0x00, 0x7c, 0x66, 0x66, 0x7c, 0x60, 0x60,
+ 0x00, 0x00, 0x3e, 0x66, 0x66, 0x3e, 0x06, 0x06,
+ 0x00, 0x00, 0x7c, 0x66, 0x60, 0x60, 0x60, 0x00,
+ 0x00, 0x00, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x00,
+ 0x00, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x0e, 0x00,
+ 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x00,
+ 0x00, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00,
+ 0x00, 0x00, 0x63, 0x6b, 0x7f, 0x3e, 0x36, 0x00,
+ 0x00, 0x00, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x00,
+ 0x00, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x0c, 0x78,
+ 0x00, 0x00, 0x7e, 0x0c, 0x18, 0x30, 0x7e, 0x00,
+ 0x18, 0x24, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00,
+ 0x18, 0x24, 0x00, 0x3c, 0x66, 0x66, 0x3c, 0x00,
+ 0x10, 0x08, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x00,
+ 0x18, 0x24, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x00,
+ 0x08, 0x0c, 0x0e, 0xff, 0xff, 0x0e, 0x0c, 0x08,
+ };
+
+ writeRecord(frenchCharsetDataV2, sizeof(frenchCharsetDataV2), GBVARS_FRENCHCHARSETDATAV2_INDEX , GBVARS_SCUMM);
+}
+
+static void addCharset_englishCharsetDataV2() {
+ byte englishCharsetDataV2[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x03, 0x06, 0x0C, 0x18, 0x3E, 0x03, 0x00,
+ 0x80, 0xC0, 0x60, 0x30, 0x18, 0x7C, 0xC0, 0x00,
+ 0x00, 0x03, 0x3E, 0x18, 0x0C, 0x06, 0x03, 0x01,
+ 0x00, 0xC0, 0x7C, 0x18, 0x30, 0x60, 0xC0, 0x80,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x07, 0x07, 0x0F, 0x1F, 0x7F,
+ 0xE0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0xE0,
+ 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07,
+ 0x00, 0x00, 0x00, 0x01, 0x03, 0x06, 0x0C, 0x18,
+ 0x00, 0x00, 0x00, 0x80, 0xC0, 0x60, 0x30, 0x18,
+ 0x18, 0x30, 0x60, 0xC0, 0x80, 0x00, 0x00, 0x00,
+ 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0xF8, 0xF8, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0xF8, 0xF8, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x1F, 0x1F, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x07, 0x0C, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0xC0, 0xE0, 0x30, 0x18, 0x18,
+ 0x18, 0x18, 0x30, 0xE0, 0xC0, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x0C, 0x07, 0x03, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x1F, 0x1F, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0xF8, 0xF8, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0xFF, 0xFF, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0xFF, 0xFF, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
+ 0x18, 0x3C, 0x66, 0xC3, 0xC3, 0x66, 0x3C, 0x18,
+ 0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x3C, 0x18,
+ 0x18, 0x66, 0xC3, 0xDB, 0xDB, 0xC3, 0x66, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x00,
+ 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x66, 0x66, 0xFF, 0x66, 0xFF, 0x66, 0x66, 0x00,
+ 0x18, 0x3E, 0x58, 0x3C, 0x1A, 0x7C, 0x18, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x49, 0x00,
+ 0x3C, 0x66, 0x3C, 0x38, 0x67, 0x66, 0x3F, 0x00,
+ 0x06, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0C, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0C, 0x00,
+ 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x18, 0x30, 0x00,
+ 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00,
+ 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30,
+ 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00,
+ 0x00, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x00,
+ 0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00,
+ 0x18, 0x18, 0x38, 0x18, 0x18, 0x18, 0x7E, 0x00,
+ 0x3C, 0x66, 0x06, 0x0C, 0x30, 0x60, 0x7E, 0x00,
+ 0x3C, 0x66, 0x06, 0x1C, 0x06, 0x66, 0x3C, 0x00,
+ 0x06, 0x0E, 0x1E, 0x66, 0x7F, 0x06, 0x06, 0x00,
+ 0x7E, 0x60, 0x7C, 0x06, 0x06, 0x66, 0x3C, 0x00,
+ 0x3C, 0x66, 0x60, 0x7C, 0x66, 0x66, 0x3C, 0x00,
+ 0x7E, 0x66, 0x0C, 0x18, 0x18, 0x18, 0x18, 0x00,
+ 0x3C, 0x66, 0x66, 0x3C, 0x66, 0x66, 0x3C, 0x00,
+ 0x3C, 0x66, 0x66, 0x3E, 0x06, 0x66, 0x3C, 0x00,
+ 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30,
+ 0x0E, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0E, 0x00,
+ 0x7C, 0x82, 0xBA, 0xA2, 0xBA, 0x82, 0x7C, 0x00,
+ 0x70, 0x18, 0x0C, 0x06, 0x0C, 0x18, 0x70, 0x00,
+ 0x3C, 0x66, 0x06, 0x0C, 0x18, 0x00, 0x18, 0x00,
+ 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
+ 0x18, 0x3C, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00,
+ 0x7C, 0x66, 0x66, 0x7C, 0x66, 0x66, 0x7C, 0x00,
+ 0x3C, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3C, 0x00,
+ 0x78, 0x6C, 0x66, 0x66, 0x66, 0x6C, 0x78, 0x00,
+ 0x7E, 0x60, 0x60, 0x78, 0x60, 0x60, 0x7E, 0x00,
+ 0x7E, 0x60, 0x60, 0x78, 0x60, 0x60, 0x60, 0x00,
+ 0x3C, 0x66, 0x60, 0x6E, 0x66, 0x66, 0x3C, 0x00,
+ 0x66, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00,
+ 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00,
+ 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x6C, 0x38, 0x00,
+ 0x66, 0x6C, 0x78, 0x70, 0x78, 0x6C, 0x66, 0x00,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7E, 0x00,
+ 0x63, 0x77, 0x7F, 0x6B, 0x63, 0x63, 0x63, 0x00,
+ 0x66, 0x76, 0x7E, 0x7E, 0x6E, 0x66, 0x66, 0x00,
+ 0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00,
+ 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x60, 0x00,
+ 0x3C, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x0E, 0x00,
+ 0x7C, 0x66, 0x66, 0x7C, 0x78, 0x6C, 0x66, 0x00,
+ 0x3C, 0x66, 0x60, 0x3C, 0x06, 0x66, 0x3C, 0x00,
+ 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00,
+ 0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00,
+ 0x66, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x66, 0x00,
+ 0x66, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18, 0x00,
+ 0x7E, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x7E, 0x00,
+ 0x3C, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3C, 0x00,
+ 0x0C, 0x12, 0x30, 0x7C, 0x30, 0x62, 0xFC, 0x00,
+ 0x3C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x3C, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xDB, 0xDB, 0x00,
+ 0x00, 0x10, 0x30, 0x7F, 0x7F, 0x30, 0x10, 0x00,
+ 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00,
+ 0x00, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x7C, 0x00,
+ 0x00, 0x00, 0x3C, 0x60, 0x60, 0x60, 0x3C, 0x00,
+ 0x00, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3E, 0x00,
+ 0x00, 0x00, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00,
+ 0x00, 0x0E, 0x18, 0x3E, 0x18, 0x18, 0x18, 0x00,
+ 0x00, 0x00, 0x3E, 0x66, 0x66, 0x3E, 0x06, 0x7C,
+ 0x00, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x66, 0x00,
+ 0x00, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3C, 0x00,
+ 0x00, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x3C,
+ 0x00, 0x60, 0x60, 0x6C, 0x78, 0x6C, 0x66, 0x00,
+ 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00,
+ 0x00, 0x00, 0x66, 0x7F, 0x7F, 0x6B, 0x63, 0x00,
+ 0x00, 0x00, 0x7C, 0x66, 0x66, 0x66, 0x66, 0x00,
+ 0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00,
+ 0x00, 0x00, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60,
+ 0x00, 0x00, 0x3E, 0x66, 0x66, 0x3E, 0x06, 0x06,
+ 0x00, 0x00, 0x7C, 0x66, 0x60, 0x60, 0x60, 0x00,
+ 0x00, 0x00, 0x3E, 0x60, 0x3C, 0x06, 0x7C, 0x00,
+ 0x00, 0x18, 0x7E, 0x18, 0x18, 0x18, 0x0E, 0x00,
+ 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00,
+ 0x00, 0x00, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00,
+ 0x00, 0x00, 0x63, 0x6B, 0x7F, 0x3E, 0x36, 0x00,
+ 0x00, 0x00, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x00,
+ 0x00, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x0C, 0x78,
+ 0x00, 0x00, 0x7E, 0x0C, 0x18, 0x30, 0x7E, 0x00,
+ 0x01, 0x03, 0x06, 0x6C, 0x78, 0x70, 0x60, 0x00,
+ 0x18, 0x3C, 0x7E, 0xFF, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0xFF, 0x7E, 0x3C, 0x18,
+ 0x10, 0x30, 0x70, 0xFF, 0xFF, 0x70, 0x30, 0x10,
+ 0x08, 0x0C, 0x0E, 0xFF, 0xFF, 0x0E, 0x0C, 0x08,
+ };
+
+ writeRecord(englishCharsetDataV2, sizeof(englishCharsetDataV2), GBVARS_ENGLISHCHARSETDATAV2_INDEX , GBVARS_SCUMM);
+}
+
+static void addCharset_italianCharsetDataV2() {
+ byte italianCharsetDataV2[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x03, 0x06, 0x0c, 0x18, 0x3e, 0x03, 0x00,
+ 0x80, 0xc0, 0x60, 0x30, 0x18, 0x7c, 0xc0, 0x00,
+ 0x00, 0x03, 0x3e, 0x18, 0x0c, 0x06, 0x03, 0x01,
+ 0x00, 0xc0, 0x7c, 0x18, 0x30, 0x60, 0xc0, 0x80,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x07, 0x07, 0x0f, 0x1f, 0x7f,
+ 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0,
+ 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07,
+ 0x00, 0x00, 0x00, 0x01, 0x03, 0x06, 0x0c, 0x18,
+ 0x00, 0x00, 0x00, 0x80, 0xc0, 0x60, 0x30, 0x18,
+ 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00,
+ 0x18, 0x0c, 0x06, 0x03, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0xf8, 0xf8, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x07, 0x0c, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0xc0, 0xe0, 0x30, 0x18, 0x18,
+ 0x18, 0x18, 0x30, 0xe0, 0xc0, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x0c, 0x07, 0x03, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xff, 0xff, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0xff, 0xff, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x18, 0x3c, 0x66, 0xc3, 0xc3, 0x66, 0x3c, 0x18,
+ 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x3c, 0x18,
+ 0x18, 0x66, 0xc3, 0xdb, 0xdb, 0xc3, 0x66, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x00,
+ 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x66, 0x66, 0xff, 0x66, 0xff, 0x66, 0x66, 0x00,
+ 0x18, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x18, 0x00,
+ 0x62, 0x66, 0x0c, 0x18, 0x30, 0x66, 0x46, 0x00,
+ 0x3c, 0x66, 0x3c, 0x38, 0x67, 0x66, 0x3f, 0x00,
+ 0x30, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0c, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00,
+ 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00,
+ 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00,
+ 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30,
+ 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00,
+ 0x00, 0x03, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00,
+ 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00,
+ 0x18, 0x18, 0x38, 0x18, 0x18, 0x18, 0x7e, 0x00,
+ 0x3c, 0x66, 0x06, 0x0c, 0x30, 0x60, 0x7e, 0x00,
+ 0x3c, 0x66, 0x06, 0x1c, 0x06, 0x66, 0x3c, 0x00,
+ 0x06, 0x0e, 0x1e, 0x66, 0x7f, 0x06, 0x06, 0x00,
+ 0x7e, 0x60, 0x7c, 0x06, 0x06, 0x66, 0x3c, 0x00,
+ 0x3c, 0x66, 0x60, 0x7c, 0x66, 0x66, 0x3c, 0x00,
+ 0x7e, 0x66, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x00,
+ 0x3c, 0x66, 0x66, 0x3c, 0x66, 0x66, 0x3c, 0x00,
+ 0x3c, 0x66, 0x66, 0x3e, 0x06, 0x66, 0x3c, 0x00,
+ 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30,
+ 0x10, 0x08, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00,
+ 0x18, 0x24, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00,
+ 0x00, 0x00, 0x3c, 0x60, 0x60, 0x3c, 0x18, 0x38,
+ 0x3c, 0x66, 0x06, 0x0c, 0x18, 0x00, 0x18, 0x00,
+ 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x18, 0x3c, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x00,
+ 0x7c, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x7c, 0x00,
+ 0x3c, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3c, 0x00,
+ 0x78, 0x6c, 0x66, 0x66, 0x66, 0x6c, 0x78, 0x00,
+ 0x7e, 0x60, 0x60, 0x78, 0x60, 0x60, 0x7e, 0x00,
+ 0x7e, 0x60, 0x60, 0x78, 0x60, 0x60, 0x60, 0x00,
+ 0x3c, 0x66, 0x60, 0x6e, 0x66, 0x66, 0x3c, 0x00,
+ 0x66, 0x66, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x00,
+ 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00,
+ 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x6c, 0x38, 0x00,
+ 0x66, 0x6c, 0x78, 0x70, 0x78, 0x6c, 0x66, 0x00,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x00,
+ 0x63, 0x77, 0x7f, 0x6b, 0x63, 0x63, 0x63, 0x00,
+ 0x66, 0x76, 0x7e, 0x7e, 0x6e, 0x66, 0x66, 0x00,
+ 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00,
+ 0x7c, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x00,
+ 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x0e, 0x00,
+ 0x7c, 0x66, 0x66, 0x7c, 0x78, 0x6c, 0x66, 0x00,
+ 0x3c, 0x66, 0x60, 0x3c, 0x06, 0x66, 0x3c, 0x00,
+ 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00,
+ 0x63, 0x63, 0x63, 0x6b, 0x7f, 0x77, 0x63, 0x00,
+ 0x66, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x66, 0x00,
+ 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x00,
+ 0x7e, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x7e, 0x00,
+ 0x08, 0x10, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00,
+ 0x10, 0x08, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00,
+ 0x18, 0x24, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0xdb, 0x00,
+ 0x00, 0x6c, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00,
+ 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00,
+ 0x00, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x7c, 0x00,
+ 0x00, 0x00, 0x3c, 0x60, 0x60, 0x60, 0x3c, 0x00,
+ 0x00, 0x06, 0x06, 0x3e, 0x66, 0x66, 0x3e, 0x00,
+ 0x00, 0x00, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00,
+ 0x00, 0x0e, 0x18, 0x3e, 0x18, 0x18, 0x18, 0x00,
+ 0x00, 0x00, 0x3e, 0x66, 0x66, 0x3e, 0x06, 0x7c,
+ 0x00, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x00,
+ 0x00, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00,
+ 0x00, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x3c,
+ 0x00, 0x60, 0x60, 0x6c, 0x78, 0x6c, 0x66, 0x00,
+ 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00,
+ 0x00, 0x00, 0x66, 0x7f, 0x7f, 0x6b, 0x63, 0x00,
+ 0x00, 0x00, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x00,
+ 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x00,
+ 0x00, 0x00, 0x7c, 0x66, 0x66, 0x7c, 0x60, 0x60,
+ 0x00, 0x00, 0x3e, 0x66, 0x66, 0x3e, 0x06, 0x06,
+ 0x00, 0x00, 0x7c, 0x66, 0x60, 0x60, 0x60, 0x00,
+ 0x00, 0x00, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x00,
+ 0x00, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x0e, 0x00,
+ 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x00,
+ 0x00, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00,
+ 0x00, 0x00, 0x63, 0x6b, 0x7f, 0x3e, 0x36, 0x00,
+ 0x00, 0x00, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x00,
+ 0x00, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x0c, 0x78,
+ 0x00, 0x00, 0x7e, 0x0c, 0x18, 0x30, 0x7e, 0x00,
+ 0x18, 0x24, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00,
+ 0x18, 0x24, 0x00, 0x3c, 0x66, 0x66, 0x3c, 0x00,
+ 0x10, 0x08, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x00,
+ 0x18, 0x24, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x00,
+ 0x08, 0x0c, 0x0e, 0xff, 0xff, 0x0e, 0x0c, 0x08,
+ };
+
+ writeRecord(italianCharsetDataV2, sizeof(italianCharsetDataV2), GBVARS_ITALIANCHARSETDATAV2_INDEX , GBVARS_SCUMM);
+}
+
+static void addCharset_spanishCharsetDataV2() {
+ byte spanishCharsetDataV2[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x03, 0x06, 0x0c, 0x18, 0x3e, 0x03, 0x00,
+ 0x80, 0xc0, 0x60, 0x30, 0x18, 0x7c, 0xc0, 0x00,
+ 0x00, 0x03, 0x3e, 0x18, 0x0c, 0x06, 0x03, 0x01,
+ 0x00, 0xc0, 0x7c, 0x18, 0x30, 0x60, 0xc0, 0x80,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x07, 0x07, 0x0f, 0x1f, 0x7f,
+ 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0,
+ 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07,
+ 0x00, 0x00, 0x00, 0x01, 0x03, 0x06, 0x0c, 0x18,
+ 0x00, 0x00, 0x00, 0x80, 0xc0, 0x60, 0x30, 0x18,
+ 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00,
+ 0x18, 0x0c, 0x06, 0x03, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0xf8, 0xf8, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x07, 0x0c, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0xc0, 0xe0, 0x30, 0x18, 0x18,
+ 0x18, 0x18, 0x30, 0xe0, 0xc0, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x0c, 0x07, 0x03, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xff, 0xff, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0xff, 0xff, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x18, 0x3c, 0x66, 0xc3, 0xc3, 0x66, 0x3c, 0x18,
+ 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x3c, 0x18,
+ 0x18, 0x66, 0xc3, 0xdb, 0xdb, 0xc3, 0x66, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x00,
+ 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x66, 0x66, 0xff, 0x66, 0xff, 0x66, 0x66, 0x00,
+ 0x18, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x18, 0x00,
+ 0x62, 0x66, 0x0c, 0x18, 0x30, 0x66, 0x46, 0x00,
+ 0x3c, 0x66, 0x3c, 0x38, 0x67, 0x66, 0x3f, 0x00,
+ 0x30, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0c, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00,
+ 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00,
+ 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00,
+ 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30,
+ 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00,
+ 0x00, 0x03, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00,
+ 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00,
+ 0x18, 0x18, 0x38, 0x18, 0x18, 0x18, 0x7e, 0x00,
+ 0x3c, 0x66, 0x06, 0x0c, 0x30, 0x60, 0x7e, 0x00,
+ 0x3c, 0x66, 0x06, 0x1c, 0x06, 0x66, 0x3c, 0x00,
+ 0x06, 0x0e, 0x1e, 0x66, 0x7f, 0x06, 0x06, 0x00,
+ 0x7e, 0x60, 0x7c, 0x06, 0x06, 0x66, 0x3c, 0x00,
+ 0x3c, 0x66, 0x60, 0x7c, 0x66, 0x66, 0x3c, 0x00,
+ 0x7e, 0x66, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x00,
+ 0x3c, 0x66, 0x66, 0x3c, 0x66, 0x66, 0x3c, 0x00,
+ 0x3c, 0x66, 0x66, 0x3e, 0x06, 0x66, 0x3c, 0x00,
+ 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30,
+ 0x10, 0x08, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00,
+ 0x18, 0x24, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00,
+ 0x00, 0x00, 0x3c, 0x60, 0x60, 0x3c, 0x18, 0x38,
+ 0x3c, 0x66, 0x06, 0x0c, 0x18, 0x00, 0x18, 0x00,
+ 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x18, 0x3c, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x00,
+ 0x7c, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x7c, 0x00,
+ 0x3c, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3c, 0x00,
+ 0x78, 0x6c, 0x66, 0x66, 0x66, 0x6c, 0x78, 0x00,
+ 0x7e, 0x60, 0x60, 0x78, 0x60, 0x60, 0x7e, 0x00,
+ 0x7e, 0x60, 0x60, 0x78, 0x60, 0x60, 0x60, 0x00,
+ 0x3c, 0x66, 0x60, 0x6e, 0x66, 0x66, 0x3c, 0x00,
+ 0x66, 0x66, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x00,
+ 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00,
+ 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x6c, 0x38, 0x00,
+ 0x66, 0x6c, 0x78, 0x70, 0x78, 0x6c, 0x66, 0x00,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x00,
+ 0x63, 0x77, 0x7f, 0x6b, 0x63, 0x63, 0x63, 0x00,
+ 0x66, 0x76, 0x7e, 0x7e, 0x6e, 0x66, 0x66, 0x00,
+ 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00,
+ 0x7c, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x00,
+ 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x0e, 0x00,
+ 0x7c, 0x66, 0x66, 0x7c, 0x78, 0x6c, 0x66, 0x00,
+ 0x3c, 0x66, 0x60, 0x3c, 0x06, 0x66, 0x3c, 0x00,
+ 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00,
+ 0x63, 0x63, 0x63, 0x6b, 0x7f, 0x77, 0x63, 0x00,
+ 0x66, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x66, 0x00,
+ 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x00,
+ 0x7e, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x7e, 0x00,
+ 0x08, 0x10, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00,
+ 0x10, 0x08, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00,
+ 0x18, 0x24, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0xdb, 0x00,
+ 0x00, 0x6c, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00,
+ 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00,
+ 0x00, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x7c, 0x00,
+ 0x00, 0x00, 0x3c, 0x60, 0x60, 0x60, 0x3c, 0x00,
+ 0x00, 0x06, 0x06, 0x3e, 0x66, 0x66, 0x3e, 0x00,
+ 0x00, 0x00, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00,
+ 0x00, 0x0e, 0x18, 0x3e, 0x18, 0x18, 0x18, 0x00,
+ 0x00, 0x00, 0x3e, 0x66, 0x66, 0x3e, 0x06, 0x7c,
+ 0x00, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x00,
+ 0x00, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00,
+ 0x00, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x3c,
+ 0x00, 0x60, 0x60, 0x6c, 0x78, 0x6c, 0x66, 0x00,
+ 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00,
+ 0x00, 0x00, 0x66, 0x7f, 0x7f, 0x6b, 0x63, 0x00,
+ 0x00, 0x00, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x00,
+ 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x00,
+ 0x00, 0x00, 0x7c, 0x66, 0x66, 0x7c, 0x60, 0x60,
+ 0x00, 0x00, 0x3e, 0x66, 0x66, 0x3e, 0x06, 0x06,
+ 0x00, 0x00, 0x7c, 0x66, 0x60, 0x60, 0x60, 0x00,
+ 0x00, 0x00, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x00,
+ 0x00, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x0e, 0x00,
+ 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x00,
+ 0x00, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00,
+ 0x00, 0x00, 0x63, 0x6b, 0x7f, 0x3e, 0x36, 0x00,
+ 0x00, 0x00, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x00,
+ 0x00, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x0c, 0x78,
+ 0x00, 0x00, 0x7e, 0x0c, 0x18, 0x30, 0x7e, 0x00,
+ 0x18, 0x24, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00,
+ 0x18, 0x24, 0x00, 0x3c, 0x66, 0x66, 0x3c, 0x00,
+ 0x10, 0x08, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x00,
+ 0x18, 0x24, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x00,
+ 0x08, 0x0c, 0x0e, 0xff, 0xff, 0x0e, 0x0c, 0x08,
+ };
+
+ writeRecord(spanishCharsetDataV2, sizeof(spanishCharsetDataV2), GBVARS_SPANISHCHARSETDATAV2_INDEX , GBVARS_SCUMM);
+}
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+
+void addCharset() {
+ addCharset_germanCharsetDataV2();
+ addCharset_frenchCharsetDataV2();
+ addCharset_englishCharsetDataV2();
+ addCharset_italianCharsetDataV2();
+ addCharset_spanishCharsetDataV2();
+}
diff --git a/backends/platform/PalmOS/Src/builder/scumm/bl_costume.c b/backends/platform/PalmOS/Src/builder/scumm/bl_costume.c
new file mode 100644
index 0000000000..ec4c2bee87
--- /dev/null
+++ b/backends/platform/PalmOS/Src/builder/scumm/bl_costume.c
@@ -0,0 +1,44 @@
+#include <PalmOS.h>
+#include "b_globals.h"
+
+
+static void addCostume_smallCostumeScaleTable() {
+ byte smallCostumeScaleTable[256] = {
+ 0xFF, 0xFD, 0x7D, 0xBD, 0x3D, 0xDD, 0x5D, 0x9D,
+ 0x1D, 0xED, 0x6D, 0xAD, 0x2D, 0xCD, 0x4D, 0x8D,
+ 0x0D, 0xF5, 0x75, 0xB5, 0x35, 0xD5, 0x55, 0x95,
+ 0x15, 0xE5, 0x65, 0xA5, 0x25, 0xC5, 0x45, 0x85,
+ 0x05, 0xF9, 0x79, 0xB9, 0x39, 0xD9, 0x59, 0x99,
+ 0x19, 0xE9, 0x69, 0xA9, 0x29, 0xC9, 0x49, 0x89,
+ 0x09, 0xF1, 0x71, 0xB1, 0x31, 0xD1, 0x51, 0x91,
+ 0x11, 0xE1, 0x61, 0xA1, 0x21, 0xC1, 0x41, 0x81,
+ 0x01, 0xFB, 0x7B, 0xBB, 0x3B, 0xDB, 0x5B, 0x9B,
+ 0x1B, 0xEB, 0x6B, 0xAB, 0x2B, 0xCB, 0x4B, 0x8B,
+ 0x0B, 0xF3, 0x73, 0xB3, 0x33, 0xD3, 0x53, 0x93,
+ 0x13, 0xE3, 0x63, 0xA3, 0x23, 0xC3, 0x43, 0x83,
+ 0x03, 0xF7, 0x77, 0xB7, 0x37, 0xD7, 0x57, 0x97,
+ 0x17, 0xE7, 0x67, 0xA7, 0x27, 0xC7, 0x47, 0x87,
+ 0x07, 0xEF, 0x6F, 0xAF, 0x2F, 0xCF, 0x4F, 0x8F,
+ 0x0F, 0xDF, 0x5F, 0x9F, 0x1F, 0xBF, 0x3F, 0x7F,
+ 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0,
+ 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0,
+ 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8,
+ 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8,
+ 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4,
+ 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4,
+ 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC,
+ 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC,
+ 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2,
+ 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2,
+ 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA,
+ 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA,
+ 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6,
+ 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6,
+ 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE,
+ 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE
+};
+ writeRecord(smallCostumeScaleTable, sizeof(smallCostumeScaleTable), GBVARS_SMALLSCALETABLE_INDEX , GBVARS_SCUMM);
+}
+void addCostume() {
+ addCostume_smallCostumeScaleTable();
+} \ No newline at end of file
diff --git a/backends/platform/PalmOS/Src/builder/scumm/bl_dialogs.c b/backends/platform/PalmOS/Src/builder/scumm/bl_dialogs.c
new file mode 100644
index 0000000000..98ed7f919e
--- /dev/null
+++ b/backends/platform/PalmOS/Src/builder/scumm/bl_dialogs.c
@@ -0,0 +1,100 @@
+#include <PalmOS.h>
+#include "b_globals.h"
+
+typedef struct {
+ Int32 num;
+ char string[80];
+} ResString;
+
+static void addDialogs_string_map_table_v7() {
+ ResString string_map_table_v7[] = {
+ {96, "game name and version"}, //that's how it's supposed to be
+ {77, "Select a game to LOAD"},
+ {76, "Name your SAVE game"},
+ {70, "save"}, //boot8
+ {71, "load"}, //boot9
+ {72, "play"}, //boot10
+ {73, "cancel"}, //boot11
+ {74, "quit"}, //boot12
+ {75, "ok"}, //boot13
+ {85, "game paused"}, // boot3
+
+ /* this is the almost complete string map for v7
+ {63, "how may I serve you?"},
+ {64, "the dig v1.0"}, //(game name/version)
+ {67, "text display only"},
+ {68, "c:\\dig"}, //boot007 (save path ?)
+ {69, "the dig"}, //boot21 (game name)
+ {70, "save"}, //boot8
+ {71, "load"}, //boot9
+ {72, "play"}, //boot10
+ {73, "cancel"}, //boot11
+ {74, "quit"}, //boot12
+ {75, "ok"}, //boot13
+ {76, "name your save game"}, //boot19
+ {77, "select a game to load"}, //boot20
+ {78, "you must enter a name"},//boot14
+ {79, "saving '%s'"}, //boot17
+ {80, "loading '%s'"}, //boot18
+ {81, "the game was NOT saved"}, //boot15
+ {82, "the game was NOT loaded"}, //boot16
+ {83, "how may I serve you?"},
+ {84, "how may I serve you?"},
+ {85, "game paused"}, // boot3
+ {86, "Are you sure you want to restart"},
+ {87, "Are you sure you want to quit?"}, //boot05
+ {89, "how may I serve you?"},
+ {90, "music"}, //boot22
+ {91, "voice"}, //boot23
+ {92, "sfx"}, //boot24
+ {93, "disabled"}, //boot25
+ {94, "text speed"}, //boot26
+ {95, "text display"}, //boot27
+ {96, "the dig v1.0"},*/
+
+ };
+ writeRecord(string_map_table_v7, sizeof(string_map_table_v7), GBVARS_STRINGMAPTABLEV7_INDEX , GBVARS_SCUMM);
+}
+
+static void addDialogs_string_map_table_v6() {
+ ResString string_map_table_v6[] = {
+ {117, "How may I serve you?"},
+ {109, "Select a game to LOAD"},
+ {108, "Name your SAVE game"},
+ {96, "Save"},
+ {97, "Load"},
+ {98, "Play"},
+ {99, "Cancel"},
+ {100, "Quit"},
+ {101, "OK"},
+ {93, "Game paused"},
+ };
+ writeRecord(string_map_table_v6, sizeof(string_map_table_v6), GBVARS_STRINGMAPTABLEV6_INDEX , GBVARS_SCUMM);
+}
+
+static void addDialogs_string_map_table_v5() {
+ ResString string_map_table_v5[] = {
+ {28, "How may I serve you?"},
+ {20, "Select a game to LOAD"},
+ {19, "Name your SAVE game"},
+ {7, "Save"},
+ {8, "Load"},
+ {9, "Play"},
+ {10, "Cancel"},
+ {11, "Quit"},
+ {12, "OK"},
+ {4, "Game paused"}
+ };
+ writeRecord(string_map_table_v5, sizeof(string_map_table_v5), GBVARS_STRINGMAPTABLEV5_INDEX , GBVARS_SCUMM);
+}
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+
+void addDialogs() {
+ addDialogs_string_map_table_v7();
+ addDialogs_string_map_table_v6();
+ addDialogs_string_map_table_v5();
+
+} \ No newline at end of file
diff --git a/backends/platform/PalmOS/Src/builder/scumm/bl_gfx.c b/backends/platform/PalmOS/Src/builder/scumm/bl_gfx.c
new file mode 100644
index 0000000000..0ac90e5636
--- /dev/null
+++ b/backends/platform/PalmOS/Src/builder/scumm/bl_gfx.c
@@ -0,0 +1,111 @@
+#include <PalmOS.h>
+#include "b_globals.h"
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+typedef struct {
+ Int8 numOfIterations;
+ Int8 deltaTable[16]; // four times l / t / r / b
+ Int8 stripTable[16]; // ditto
+} TransitionEffect;
+///////////////////////////////////////////////////////////////////
+static void addGfx_transitionEffects() {
+ TransitionEffect transitionEffects[5] = {
+ // Iris effect (looks like an opening/closing camera iris)
+ {
+ 13, // Number of iterations
+ {
+ 1, 1, -1, 1,
+ -1, 1, -1, -1,
+ 1, -1, -1, -1,
+ 1, 1, 1, -1
+ },
+ {
+ 0, 0, 39, 0,
+ 39, 0, 39, 24,
+ 0, 24, 39, 24,
+ 0, 0, 0, 24
+ }
+ },
+
+ // Box wipe (a box expands from the upper-left corner to the lower-right corner)
+ {
+ 25, // Number of iterations
+ {
+ 0, 1, 2, 1,
+ 2, 0, 2, 1,
+ 2, 0, 2, 1,
+ 0, 0, 0, 0
+ },
+ {
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 1, 0, 1, 0,
+ 255, 0, 0, 0
+ }
+ },
+
+ // Box wipe (a box expands from the lower-right corner to the upper-left corner)
+ {
+ 25, // Number of iterations
+ {
+ -2, -1, 0, -1,
+ -2, -1, -2, 0,
+ -2, -1, -2, 0,
+ 0, 0, 0, 0
+ },
+ {
+ 39, 24, 39, 24,
+ 39, 24, 39, 24,
+ 38, 24, 38, 24,
+ 255, 0, 0, 0
+ }
+ },
+
+ // Inverse box wipe
+ {
+ 25, // Number of iterations
+ {
+ 0, -1, -2, -1,
+ -2, 0, -2, -1,
+ -2, 0, -2, -1,
+ 0, 0, 0, 0
+ },
+ {
+ 0, 24, 39, 24,
+ 39, 0, 39, 24,
+ 38, 0, 38, 24,
+ 255, 0, 0, 0
+ }
+ },
+
+ // Inverse iris effect, specially tailored for V1/V2 games
+ {
+ 9, // Number of iterations
+ {
+ -1, -1, 1, -1,
+ -1, 1, 1, 1,
+ -1, -1, -1, 1,
+ 1, -1, 1, 1
+ },
+ {
+ 7, 7, 32, 7,
+ 7, 8, 32, 8,
+ 7, 8, 7, 8,
+ 32, 7, 32, 8
+ }
+ }
+ };
+
+ writeRecord(transitionEffects, sizeof(transitionEffects), GBVARS_TRANSITIONEFFECTS_INDEX , GBVARS_SCUMM);
+}
+
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+
+void addGfx() {
+ addGfx_transitionEffects();
+
+} \ No newline at end of file
diff --git a/backends/platform/PalmOS/Src/builder/scumm/bl_md5.c b/backends/platform/PalmOS/Src/builder/scumm/bl_md5.c
new file mode 100644
index 0000000000..f3f4261d99
--- /dev/null
+++ b/backends/platform/PalmOS/Src/builder/scumm/bl_md5.c
@@ -0,0 +1,432 @@
+#include <PalmOS.h>
+#include "b_globals.h"
+
+enum Language {
+ UNK_LANG = -1, // Use default language (i.e. none specified)
+ EN_ANY = 0,
+ EN_USA = 1,
+ DE_DEU = 2,
+ FR_FRA = 3,
+ IT_ITA = 4,
+ PT_BRA = 5,
+ ES_ESP = 6,
+ JA_JPN = 7,
+ ZH_TWN = 8,
+ KO_KOR = 9,
+ SE_SWE = 10,
+ EN_GRB = 11,
+ HB_ISR = 20,
+ RU_RUS = 21,
+ CZ_CZE = 22,
+ NL_NLD = 23,
+ NB_NOR = 24
+};
+
+enum Platform {
+ kPlatformUnknown = -1,
+ kPlatformPC = 0,
+ kPlatformAmiga = 1,
+ kPlatformAtariST = 2,
+ kPlatformMacintosh = 3,
+ kPlatformFMTowns = 4,
+ kPlatformWindows = 5,
+ kPlatformNES = 6,
+ kPlatformC64 = 7
+/*
+ kPlatformSEGA,
+ kPlatformPCEngine
+*/
+};
+
+typedef struct {
+ const char md5[32 + 1];
+ const char target[16 + 1];
+ enum Language language;
+ enum Platform platform;
+} MD5Table;
+
+static void addScumm_mdtable() {
+ MD5Table md5table[] = {
+ { "0305e850382b812fec6e5998ef88a966", "pjs-demo", NL_NLD, kPlatformWindows },
+ { "035deab53b47bc43abc763560d0f8d4b", "playfate", EN_ANY, kPlatformPC },
+ { "037385a953789190298494d92b89b3d0", "catalog2", EN_ANY, kPlatformWindows },
+ { "0425954a9db5c340861672892c3e678d", "samdemo", EN_ANY, kPlatformMacintosh },
+ { "04401d747f1a2c1c4b388daff71ed378", "ft", DE_DEU, kPlatformMacintosh },
+ { "04687cdf7f975a89d2474929f7b80946", "indy3towns", EN_ANY, kPlatformFMTowns },
+ { "0557df19f046a84c2fdc63507c6616cb", "farmdemo", NL_NLD, kPlatformWindows },
+ { "06b187468113f9ae5a400b148a847fac", "atlantis", EN_ANY, kPlatformMacintosh },
+ { "07433205acdca3bc553d0e731588b35f", "airport", EN_ANY, kPlatformWindows },
+ { "07b810e37be7489263f7bc7627d4765d", "freddi4", RU_RUS, kPlatformWindows },
+ { "084ed0fa98a6d1e9368d67fe9cfbd417", "freddemo", EN_ANY, kPlatformWindows },
+ { "0855496dde35356b1a9691e22ba84cdc", "freddemo", EN_ANY, kPlatformWindows },
+ { "08cc5c3eedaf72ebe12734eee94f7fa2", "balloon", EN_ANY, kPlatformUnknown },
+ { "09820417db26687bb7fe0c83cc4c553b", "ft", EN_ANY, kPlatformUnknown },
+ { "0a212fa35fa8421f31c1f3961272caf0", "monkeyvga", DE_DEU, kPlatformAmiga },
+ { "0ab19be9e2a3f6938226638b2a3744fe", "timedemo", EN_ANY, kPlatformUnknown },
+ { "0ac41e2e3d2174e5a042a6b565328dba", "racedemo", EN_ANY, kPlatformUnknown },
+ { "0b3222aaa7efcf283eb621e0cefd26cc", "puttputt", RU_RUS, kPlatformPC },
+ { "0cccfa5223099a60e76cfcca57a1a141", "freddi3", NL_NLD, kPlatformWindows },
+ { "0d1b69471605201ef2fa9cec1f5f02d2", "maniac", ES_ESP, kPlatformPC },
+ { "0e4c5d54a0ad4b26132e78b5ea76642a", "snmidemo", EN_ANY, kPlatformPC },
+ { "0f5935bd5e88ba6f09e558d64459746d", "1grademo", EN_ANY, kPlatformWindows },
+ { "0f6f2e716ba896a44e5059bba1de7ca9", "samnmax", IT_ITA, kPlatformUnknown },
+ { "0f9c7a76657f0840b8f7ccb5bffeb9f4", "indy3EGA", FR_FRA, kPlatformAtariST },
+ { "0fb73eddfcf584c02ba097984df131ba", "samnmax", DE_DEU, kPlatformUnknown },
+ { "1005456bfe351c1b679e1ff2dc2849e9", "puttzoo", EN_ANY, kPlatformWindows },
+ { "114acdc2659a273c220f86ee9edb24c1", "maniac", FR_FRA, kPlatformPC },
+ { "11ddf1fde76e3156eb3a38da213f484e", "monkey2", IT_ITA, kPlatformAmiga },
+ { "11e6e244078ff09b0f3832e35420e0a7", "catalog", EN_ANY, kPlatformWindows },
+ { "132bff65e6367c09cc69318ce1b59333", "monkey2", EN_ANY, kPlatformAmiga },
+ { "145bd3373574feb668cc2eea2ec6cf86", "balloon", RU_RUS, kPlatformWindows },
+ { "14d48c95b43ddeb983254cf6c43851f1", "freddi4", NL_NLD, kPlatformWindows },
+ { "157367c3c21e0d03a0cba44361b4cf65", "indy3EGA", EN_ANY, kPlatformAtariST },
+ { "15e03ffbfeddb9c2aebc13dcb2a4a8f4", "monkeyvga", EN_ANY, kPlatformPC },
+ { "16542a7342a918bfe4ba512007d36c47", "FreddisFunShop", EN_ANY, kPlatformUnknown },
+ { "16effd200aa6b8abe9c569c3e578814d", "f4-demo", NL_NLD, kPlatformWindows },
+ { "179879b6e35c1ead0d93aab26db0951b", "fbear", EN_ANY, kPlatformWindows },
+ { "17b5d5e6af4ae89d62631641d66d5a05", "indy3", IT_ITA, kPlatformPC },
+ { "17fa250eb72dae2dad511ba79c0b6b0a", "dottdemo", FR_FRA, kPlatformPC },
+ { "182344899c2e2998fca0bebcd82aa81a", "atlantis", EN_ANY, kPlatformPC },
+ { "183d7464902d40d00800e8ee1f04117c", "maniac", DE_DEU, kPlatformPC },
+ { "1875b90fade138c9253a8e967007031a", "indy3", UNK_LANG, kPlatformPC },
+ { "187d315f6b5168f68680dfe8c3d76a3e", "loom", HB_ISR, kPlatformPC },
+ { "1900e501a52fbf55bde6e4196f6d2aa6", "zak", IT_ITA, kPlatformPC },
+ { "19263586f749a560c1adf8b3393a9593", "socks", RU_RUS, kPlatformWindows },
+ { "1a6e5ae2777a6a33f06ffc0226210934", "atlantis", EN_ANY, kPlatformMacintosh },
+ { "1c792d28376d45e145cb916bca0400a2", "sf2-demo", NL_NLD, kPlatformUnknown },
+ { "1ca86e2cf9aaa2068738a1e5ba477e60", "zakTowns", JA_JPN, kPlatformFMTowns },
+ { "1d05cd189e4908f79b57e78a4402f292", "monkeyega", EN_ANY, kPlatformPC },
+ { "1dd3c11ea4439adfe681e4e405b624e1", "monkeyega", FR_FRA, kPlatformPC },
+ { "1dd7aa088e09f96d06818aa9a9deabe0", "indy3EGA", EN_ANY, kPlatformMacintosh },
+ { "1fbebd7b2b692df5297870447a80cfed", "atlantis", DE_DEU, kPlatformPC },
+ { "2012f854d83d9cc6f73b2b544cd8bbf8", "water", RU_RUS, kPlatformWindows },
+ { "2108d83dcf09f8adb4bc524669c8cf51", "PuttTime", EN_ANY, kPlatformUnknown },
+ { "21a6592322f92550f144f68a8a4e685e", "dig", FR_FRA, kPlatformMacintosh },
+ { "21abe302e1b1e2b66d6f5c12e241ebfd", "freddicove", RU_RUS, kPlatformWindows },
+ { "225e18566e810c634bf7de63e7568e3e", "mustard", EN_ANY, kPlatformUnknown },
+ { "22c9eb04455440131ffc157aeb8d40a8", "fbdemo", EN_ANY, kPlatformWindows },
+ { "22d07d6c386c9c25aca5dac2a0c0d94b", "maniac", SE_SWE, kPlatformNES },
+ { "22f4ea88a09da12df9308ba30bcb7d0f", "loom", EN_ANY, kPlatformPC },
+ { "2723fea3dae0cb47768c424b145ae0e7", "tentacle", EN_ANY, kPlatformPC },
+ { "27b3a4224ad63d5b04627595c1c1a025", "zak", IT_ITA, kPlatformAmiga },
+ { "28d24a33448fab6795850bc9f159a4a2", "indydemo", JA_JPN, kPlatformFMTowns },
+ { "28ef68ee3ed76d7e2ee8ee13c15fbd5b", "loom", EN_ANY, kPlatformPC },
+ { "2a208ffbcd0e83e86f4356e6f64aa6e1", "loom", ES_ESP, kPlatformPC },
+ { "2ccd8891ce4d3f1a334d21bff6a88ca2", "monkey", EN_ANY, kPlatformMacintosh },
+ { "2d1e891fe52df707c30185e52c50cd92", "monkey", EN_ANY, kPlatformPC },
+ { "2d388339d6050d8ccaa757b64633954e", "zakTowns", EN_ANY, kPlatformFMTowns },
+ { "2d4536a56e01da4b02eb021e7770afa2", "zakTowns", EN_ANY, kPlatformFMTowns },
+ { "2e85f7aa054930c692a5b1bed1dfc295", "footdemo", EN_ANY, kPlatformUnknown },
+ { "2fe369ad70f52a8cf7ad6077ee64f81a", "loom", DE_DEU, kPlatformAmiga },
+ { "305d3dd57c96c65b017bc70c8c7cfb5e", "monkey", DE_DEU, kPlatformPC },
+ { "30ba1e825d4ad2b448143ae8df18482a", "pj2demo", NL_NLD, kPlatformWindows },
+ { "319a4dde52c7960b5aae8a1ec348d918", "monkeyvga", DE_DEU, kPlatformAmiga },
+ { "31aa57f460a3d12429f0552a46a90b39", "puttdemo", EN_ANY, kPlatformPC },
+ { "31b8fda4c8c7413fa6b39997e776eba4", "loomTowns", JA_JPN, kPlatformFMTowns },
+ { "32709cbeeb3044b34129950860a83f14", "pajama2", RU_RUS, kPlatformWindows },
+ { "32a433dea56b86a55b59e4ff7d755711", "ftpcdemo", EN_ANY, kPlatformPC },
+ { "330f631502e381a4e199a3f7cb483c20", "indy3EGA", DE_DEU, kPlatformAmiga },
+ { "3433be9866ca4261b2d5d25374e3f243", "monkeyvga", FR_FRA, kPlatformAmiga },
+ { "3486ede0f904789267d4bcc5537a46d4", "zoodemo", EN_ANY, kPlatformMacintosh },
+ { "35a2d3040fa512f8232d9e443319d84d", "dig", EN_ANY, kPlatformMacintosh },
+ { "362c1d281fb9899254cda66ad246c66a", "digdemo", EN_ANY, kPlatformUnknown },
+ { "3686cf8f89e102ececf4366e1d2c8126", "monkey2", EN_ANY, kPlatformPC },
+ { "36a6750e03fb505fc19fc2bf3e4dbe91", "pj2demo", EN_ANY, kPlatformUnknown },
+ { "37aed3f91c1ef959e0bd265f9b13781f", "pajama", EN_ANY, kPlatformUnknown },
+ { "37f56ceb13e401a7ac7d9e6b37fecaf7", "loom", EN_ANY, kPlatformPC },
+ { "37ff1b308999c4cca7319edfcc1280a0", "puttdemo", EN_ANY, kPlatformWindows },
+ { "3824e60cdf639d22f6df92a03dc4b131", "fbear", EN_ANY, kPlatformPC },
+ { "387a544b8b10b26912d8413bab63a853", "mi2demo", EN_ANY, kPlatformPC },
+ { "3905799e081b80a61d4460b7b733c206", "maniac", EN_ANY, kPlatformNES },
+ { "3938ee1aa4433fca9d9308c9891172b1", "zakTowns", EN_ANY, kPlatformFMTowns },
+ { "399b217b0c8d65d0398076da486363a9", "indy3", DE_DEU, kPlatformPC },
+ { "39cb9dec16fa16f38d79acd80effb059", "loom", FR_FRA, kPlatformAmiga },
+ { "39cb9dec16fa16f38d79acd80effb059", "loom", IT_ITA, kPlatformAmiga },
+ { "3a03dab514e4038df192d8a8de469788", "atlantis", EN_ANY, kPlatformAmiga },
+ { "3a0c35f3c147b98a2bdf8d400cfc4ab5", "indy3towns", JA_JPN, kPlatformFMTowns },
+ { "3b301b7892f883ce42ab4be6a274fea6", "samnmax", EN_ANY, kPlatformPC },
+ { "3de99ef0523f8ca7958faa3afccd035a", "spyfox", EN_ANY, kPlatformUnknown },
+ { "3df6ead57930488bc61e6e41901d0e97", "fbear", EN_ANY, kPlatformMacintosh },
+ { "40564ec47da48a67787d1f9bd043902a", "maniac", EN_ANY, kPlatformPC },
+ { "4167a92a1d46baa4f4127d918d561f88", "tentacle", EN_ANY, kPlatformUnknown },
+ { "430bc518017b6fac046f58bab6baad5d", "monkey2", JA_JPN, kPlatformFMTowns },
+ { "45082a5c9f42ba14dacfe1fdeeba819d", "ff5demo", EN_ANY, kPlatformWindows },
+ { "45152f7cf2ba8f43cf8a8ea2e740ae09", "monkeyvga", ES_ESP, kPlatformPC },
+ { "46b53fd430adcfbed791b48a0d4b079f", "funpack", EN_ANY, kPlatformPC },
+ { "477dbafbd66a53c98416dc01aef019ad", "monkeyega", IT_ITA, kPlatformPC },
+ { "47e75b1bdcb44c78cb94883d1731ccf8", "fbdemo", EN_ANY, kPlatformPC },
+ { "49210e124e4c2b30f1290a9ef6306301", "monkeyega", EN_ANY, kPlatformPC },
+ { "499c958affc394f2a3868f1eb568c3ee", "f4-demo", NL_NLD, kPlatformWindows },
+ { "4af4a6b248103c1fe9edef619677f540", "moondemo", EN_ANY, kPlatformMacintosh },
+ { "4ba37f835be11a59d969f90f272f575b", "water", EN_ANY, kPlatformUnknown },
+ { "4ba7fb331296c283e73d8f5b2096e551", "samnmax", ES_ESP, kPlatformUnknown },
+ { "4bedb49943df95a9c900a5a82ccbe9de", "ft", FR_FRA, kPlatformUnknown },
+ { "4cb9c3618f71668f8e4346c8f323fa82", "monkey2", EN_ANY, kPlatformMacintosh },
+ { "4ce2d5b355964bbcb5e5ce73236ef868", "freddicove", RU_RUS, kPlatformWindows },
+ { "4d34042713958b971cb139fba4658586", "indy4", JA_JPN, kPlatformFMTowns },
+ { "4dbff3787aedcd96b0b325f2d92d7ad9", "maze", EN_ANY, kPlatformUnknown },
+ { "4dc780f1bc587a193ce8a97652791438", "loom", EN_ANY, kPlatformAmiga },
+ { "4e5867848ee61bc30d157e2c94eee9b4", "timedemo", EN_ANY, kPlatformUnknown },
+ { "4edbf9d03550f7ba01e7f34d69b678dd", "spydemo", NL_NLD, kPlatformWindows },
+ { "4f04b321a95d4315ce6d65f8e1dd0368", "maze", EN_ANY, kPlatformUnknown },
+ { "4f267a901719623de7dde83e47d5b474", "atlantis", DE_DEU, kPlatformAmiga },
+ { "4f580a021eee026f3b4589e17d130d78", "freddi4", UNK_LANG, kPlatformUnknown },
+ { "4fa6870d9bc8c313b65d54b1da5a1891", "pajama", NL_NLD, kPlatformWindows },
+ { "4fbbe9f64b8bc547503a379a301183ce", "tentacle", IT_ITA, kPlatformUnknown },
+ { "5057fb0e99e5aa29df1836329232f101", "freddi2", UNK_LANG, kPlatformWindows },
+ { "507bb360688dc4180fdf0d7597352a69", "freddi", SE_SWE, kPlatformWindows },
+ { "50fcdc982a25063b78ad46bf389b8e8d", "tentacle", IT_ITA, kPlatformPC },
+ { "51305e929e330e24a75a0351c8f9975e", "freddi2", EN_ANY, kPlatformUnknown },
+ { "5262a27afcaee04e5c4900220bd463e7", "PuttsFunShop", EN_ANY, kPlatformUnknown },
+ { "52a4bae0746a11d7b1e8554e91a6645c", "zak", FR_FRA, kPlatformPC },
+ { "53e94115b55dd51d4b8ff0871aa1df1e", "spydemo", EN_ANY, kPlatformUnknown },
+ { "54a936ad06161ff7bfefcb96200f7bff", "monkeyvga", EN_ANY, kPlatformAmiga },
+ { "55518cd73cf9c6d23ea29c51ee06bdfe", "ft", IT_ITA, kPlatformUnknown },
+ { "55e4cc866ff9046824e1c638ba2b8c7f", "ft", RU_RUS, kPlatformUnknown },
+ { "566165a7338fa11029e7c14d94fa70d0", "freddemo", EN_ANY, kPlatformWindows },
+ { "5798972220cd458be2626d54c80f71d7", "atlantis", IT_ITA, kPlatformAmiga },
+ { "57b0d89af79befe1cabce3bece869e7f", "tentacle", DE_DEU, kPlatformPC },
+ { "589601b676c98b1c0c987bc031ab68b3", "chase", EN_ANY, kPlatformUnknown },
+ { "58fdf4c7ad13540a734e18f8584cad89", "puttzoo", EN_ANY, kPlatformMacintosh },
+ { "590e6546aacd0d374b7f3a4f53013ab1", "freddicove", EN_ANY, kPlatformUnknown },
+ { "5a35e36fd777e9c37a49c5b2faca52f9", "loom", EN_ANY, kPlatformPC },
+ { "5b08000a9c47b2887df6506ac767ca68", "fbear", EN_ANY, kPlatformUnknown },
+ { "5bd335265a61caa3d78956ad9f88ba23", "footdemo", EN_ANY, kPlatformUnknown },
+ { "5c21fc49aee8f46e58fef21579e614a1", "thinker1", EN_ANY, kPlatformUnknown },
+ { "5d88b9d6a88e6f8e90cded9d01b7f082", "loomcd", EN_ANY, kPlatformPC },
+ { "5e8fb66971a60e523e5afbc4c129c0e8", "socks", EN_ANY, kPlatformUnknown },
+ { "5fbe557049892eb4b709d90916ec97ca", "indy3EGA", EN_ANY, kPlatformPC },
+ { "600abd3e9f47e63e670188b7e4e86ac7", "spyozon", EN_ANY, kPlatformUnknown },
+ { "6027e9ca9c35746d95dee2068cec17e5", "zak", DE_DEU, kPlatformAmiga },
+ { "60ba818dc3bede86d40357e3913f8505", "ft", EN_ANY, kPlatformUnknown },
+ { "613f64f78ea26c7353b2a5940eb61d6a", "zak", FR_FRA, kPlatformAtariST },
+ { "624cdb93654667c869d204a64af7e57f", "maniac", EN_ANY, kPlatformPC },
+ { "6271130f440066830eca9056c1d7926f", "water", RU_RUS, kPlatformWindows },
+ { "66236cd1aec24e1d4aff4c4cc93b7e18", "indy3EGA", FR_FRA, kPlatformPC },
+ { "66fd5ff9a810dfeb6d6bdada18221140", "monkeyvga", IT_ITA, kPlatformPC },
+ { "672dec94b82f7f0877ebb5b5cf7f4bc1", "pajama", EN_ANY, kPlatformUnknown },
+ { "675d71151e9b5a968c8ce46d9fbf4cbf", "zak", EN_ANY, kPlatformPC },
+ { "68155a6bf082221525f431c2cbdac8ab", "SamsFunShop", EN_ANY, kPlatformUnknown },
+ { "684732efb5799c0f78804c99d8de9aba", "puttputt", EN_ANY, kPlatformMacintosh },
+ { "6886e5d08cee329b1f2e743ae2e3ceed", "monkey2", DE_DEU, kPlatformPC },
+ { "695fe0b3963333b7e15b37514db3c745", "kinddemo", EN_ANY, kPlatformUnknown },
+ { "697c9b7c55a05d8199c48b48e379d2c8", "puttmoon", HB_ISR, kPlatformPC },
+ { "69ea626f1f87eecb78ea0d6c6b983a1d", "monkey2", IT_ITA, kPlatformPC },
+ { "6a30a07f353a75cdc602db27d73e1b42", "puttputt", EN_ANY, kPlatformWindows },
+ { "6af2419fe3db5c2fdb091ae4e5833770", "racedemo", NL_NLD, kPlatformUnknown },
+ { "6b19d0e25cbf720d05822379b8b90ed9", "timedemo", NL_NLD, kPlatformWindows },
+ { "6b257bb2827dd894b8109a50a1a18b5a", "FF5Demo", NL_NLD, kPlatformWindows },
+ { "6b3ec67da214f558dc5ceaa2acd47453", "indy3EGA", EN_ANY, kPlatformPC },
+ { "6bf70eee5de3d24d2403e0dd3d267e8a", "spyfox", EN_ANY, kPlatformWindows },
+ { "6c2bff0e327f2962e809c2e1a82d7309", "monkeyvga", EN_ANY, kPlatformAmiga },
+ { "6df20c50c1ab19799de9be7ae7716881", "fbdemo", EN_ANY, kPlatformMacintosh },
+ { "6e959d65358eedf9b68b81e304b97fa4", "tentacle", DE_DEU, kPlatformUnknown },
+ { "6ea966b4d660c870b9ee790d1fbfc535", "monkey2", ES_ESP, kPlatformAmiga },
+ { "6f0be328c64d689bb606d22a389e1b0f", "loom", EN_ANY, kPlatformMacintosh },
+ { "6f6ef668c608c7f534fea6e6d3878dde", "indy3EGA", DE_DEU, kPlatformPC },
+ { "701246819d1a70573f41bf33fc19214f", "soccer", EN_ANY, kPlatformWindows },
+ { "7020931d5a2be0a49d68e7a1882363e4", "zak", EN_ANY, kPlatformPC },
+ { "71523b539491527d9860f4407faf0411", "monkeyega", EN_ANY, kPlatformPC },
+ { "71fe97c3108678cf604f14abe342341b", "spyfox2", NL_NLD, kPlatformWindows },
+ { "7222f260253f325c21fcfa68b5bfab67", "sf2-demo", EN_ANY, kPlatformUnknown },
+ { "72ac6bc980d5101c2142189d746bd62f", "spyfox", RU_RUS, kPlatformWindows },
+ { "73e5ab7dbb9a8061cc6d25df02dbd1e7", "loom", EN_ANY, kPlatformPC },
+ { "746e88c172a5b7a1ae89ac0ee3ee681a", "freddi", RU_RUS, kPlatformWindows },
+ { "754feb59d3bf86b8a00840df74fd7b26", "f3-mdemo", NL_NLD, kPlatformWindows },
+ { "75ba23fff4fd63fa446c02864f2a5a4b", "zak", IT_ITA, kPlatformPC },
+ { "75bff95816b84672b877d22a911ab811", "freddi3", RU_RUS, kPlatformWindows },
+ { "771bc18ec6f93837b839c992b211904b", "monkeyega", DE_DEU, kPlatformPC },
+ { "77f5c9cc0986eb729c1a6b4c8823bbae", "zakTowns", EN_ANY, kPlatformFMTowns },
+ { "780e4a0ae2ff17dc296f4a79543b44f8", "puttmoon", UNK_LANG, kPlatformPC },
+ { "78bd5f036ea35a878b74e4f47941f784", "freddi4", RU_RUS, kPlatformWindows },
+ { "7974365d3dc0f43a2748c975f91ff042", "monkey2", ES_ESP, kPlatformPC },
+ { "7bad72e332a59f9fcc1d437f4edad32a", "puttcircus", RU_RUS, kPlatformUnknown },
+ { "7c2e76087027eeee9c8f8985f93a1cc5", "f4-demo", EN_ANY, kPlatformUnknown },
+ { "7ddeaf52c8b9a50551ce0aa2ac811d07", "BluesABCTimeDemo", EN_ANY, kPlatformUnknown },
+ { "7e151c17adf624f1966c8fc5827c95e9", "puttputt", EN_ANY, kPlatformUnknown },
+ { "7ea2da67ebabea4ac20cee9f4f9d2934", "airdemo", EN_ANY, kPlatformMacintosh },
+ { "7edd665bbede7ea8b7233f8e650be6f8", "samnmax", FR_FRA, kPlatformUnknown },
+ { "7f45ddd6dbfbf8f80c0c0efea4c295bc", "maniac", EN_ANY, kPlatformPC },
+ { "7fc6cdb46b4c9d384c52327f4bca6416", "football", EN_ANY, kPlatformWindows },
+ { "810a9da887aefa597b0cf3c77d262897", "BluesABCTimeDemo", EN_ANY, kPlatformWindows },
+ { "81bbfa181184cb494e7a81dcfa94fbd9", "maniac", FR_FRA, kPlatformNES },
+ { "8299d9b8a1b0e7b881bae7a9971dc5e2", "zak", EN_ANY, kPlatformAtariST },
+ { "8368f552b1e3eba559f8d559bcc4cadb", "freddi3", UNK_LANG, kPlatformUnknown },
+ { "861e59ed72a1cd0e6d454f7ee7e2bf3d", "comi", RU_RUS, kPlatformUnknown },
+ { "86be8ada36371d4fdc35659d0e912a26", "indy3EGA", ES_ESP, kPlatformPC },
+ { "86c9902b7bec1a17926d4dae85beaa45", "airdemo", EN_ANY, kPlatformWindows },
+ { "870d1e3c86bc50846d808d14a36b4e08", "monkeyvga", ES_ESP, kPlatformAmiga },
+ { "87f6e8037b7cc996e13474b491a7a98e", "maniac", IT_ITA, kPlatformPC },
+ { "8801fb4a1200b347f7a38523339526dd", "jungle", EN_ANY, kPlatformWindows },
+ { "883af4b0af4f77a92f1dcf1d0a283140", "tentacle", ES_ESP, kPlatformUnknown },
+ { "898ce8eb1234a955ef75e87141902bb3", "freddi3", RU_RUS, kPlatformWindows },
+ { "8a484262363a8e18be87112454f1456b", "pjgames", EN_ANY, kPlatformWindows },
+ { "8aa05d3cdb0e795436043f0546af2da2", "tentacle", FR_FRA, kPlatformUnknown },
+ { "8afb3cf9f95abf208358e984f0c9e738", "funpack", EN_ANY, kPlatformUnknown },
+ { "8bdb0bf87b5e303dd35693afb9351215", "ft", DE_DEU, kPlatformUnknown },
+ { "8d479e36f35e80257dfc102cf4b8a912", "farmdemo", EN_ANY, kPlatformWindows },
+ { "8e3241ddd6c8dadf64305e8740d45e13", "balloon", EN_ANY, kPlatformUnknown },
+ { "8e4ee4db46954bfe2912e259a16fad82", "monkey2", FR_FRA, kPlatformPC },
+ { "8eb84cee9b429314c7f0bdcf560723eb", "monkey", EN_ANY, kPlatformFMTowns },
+ { "8ee63cafb1fe9d62aa0d5a23117e70e7", "freddi2", EN_ANY, kPlatformUnknown },
+ { "8f3758ff98c9c5d78e5d635222cad026", "atlantis", IT_ITA, kPlatformPC },
+ { "8fec68383202d38c0d25e9e3b757c5df", "comidemo", UNK_LANG, kPlatformUnknown },
+ { "8ffd618a776a4c0d8922bb28b09f8ce8", "airdemo", EN_ANY, kPlatformWindows },
+ { "90a329d8ad5b7ce0690429e98cfbb32f", "funpack", HB_ISR, kPlatformPC },
+ { "90c755e1c9b9b8a4129d37b2259d0655", "chase", EN_ANY, kPlatformUnknown },
+ { "910e31cffb28226bd68c569668a0d6b4", "monkeyega", ES_ESP, kPlatformPC },
+ { "91469353f7be1b122fa88d23480a1320", "zak", FR_FRA, kPlatformAmiga },
+ { "92b078d9d6d9d751da9c26b8b3075779", "tentacle", FR_FRA, kPlatformPC },
+ { "92e7727e67f5cd979d8a1070e4eb8cb3", "puttzoo", EN_ANY, kPlatformUnknown },
+ { "92fc0073a4cf259ff36070ecb8628ba8", "thinkerk", EN_ANY, kPlatformUnknown },
+ { "96a3069a3c63caa7329588ce1fef41ee", "spyozon", RU_RUS, kPlatformUnknown },
+ { "9708cf716ed8bcc9ff3fcfc69413b746", "puttputt", EN_ANY, kPlatformPC },
+ { "981e1e1891f2be7e25a01f50ae55a5af", "puttrace", EN_ANY, kPlatformUnknown },
+ { "98744fe66ff730e8c2b3b1f58803ab0b", "playfate", EN_ANY, kPlatformPC },
+ { "99a3699f80b8f776efae592b44b9b991", "maniac", FR_FRA, kPlatformPC },
+ { "99b6f822b0b2612415407865438697d6", "fate", EN_ANY, kPlatformPC },
+ { "9bc548e179cdb0767009401c094d0895", "maniac", DE_DEU, kPlatformAmiga },
+ { "9bd2a8f72613e715c199246dd511e10f", "atlantis", ES_ESP, kPlatformPC },
+ { "9bda5fee51d2fda5253d02c642016bf4", "spyfox", NL_NLD, kPlatformWindows },
+ { "9c0fee288ad564a7d25ec3e841810d79", "indy3EGA", EN_ANY, kPlatformAmiga },
+ { "9c143c5905055d5df7a0f014ab379aee", "moondemo", EN_ANY, kPlatformWindows },
+ { "9c92eeaf517a31b7221ec2546ab669fd", "puttmoon", EN_ANY, kPlatformWindows },
+ { "9cdd327c1034c046cb595d251c44da2f", "chase", RU_RUS, kPlatformWindows },
+ { "9d4ab3e0e1d1ebc6ba8a6a4c470ed184", "spydemo", EN_ANY, kPlatformWindows },
+ { "9d7b67be003fea60be4dcbd193611936", "ftdemo", EN_ANY, kPlatformMacintosh },
+ { "9dc02577bf50d4cfaf3de3fbac06fbe2", "puttmoon", EN_ANY, kPlatformMacintosh },
+ { "9e5e0fb43bd22f4628719b7501adb717", "monkeyega", FR_FRA, kPlatformAtariST },
+ { "a194f15f51ee62badab74b9e7da97693", "bb2demo", EN_ANY, kPlatformWindows },
+ { "a28135a7ade38cc0208b04507c46efd1", "spyfox", DE_DEU, kPlatformWindows },
+ { "a2bb6aa0537402c1b3c2ea899ccef64b", "smaller", EN_ANY, kPlatformWindows },
+ { "a3036878840720fbefa41e6965fa4a0a", "samnmax", EN_ANY, kPlatformPC },
+ { "a525c1753c1db5011c00417da37887ef", "PuttTime", EN_ANY, kPlatformUnknown },
+ { "a561d2e2413cc1c71d5a1bf87bf493ea", "lost", EN_ANY, kPlatformUnknown },
+ { "a570381b028972d891052ee1e51dc011", "maniac", EN_ANY, kPlatformAtariST },
+ { "a654fb60c3b67d6317a7894ffd9f25c5", "pj3-demo", EN_ANY, kPlatformWindows },
+ { "a7cacad9c40c4dc9e1812abf6c8af9d5", "circdemo", EN_ANY, kPlatformUnknown },
+ { "a85856675429fe88051744f755b72f93", "farm", EN_ANY, kPlatformWindows },
+ { "a86f9c49355579c30d4a55b477c0d869", "baseball2001", EN_ANY, kPlatformUnknown },
+ { "a9543ef0d79bcb47cd76ec197ad0a967", "puttmoon", EN_ANY, kPlatformUnknown },
+ { "a9f2f04b1ecaab9495b59befffe9bf88", "pj3-demo", EN_ANY, kPlatformUnknown },
+ { "aa6a91b7f6f119d1b7b1f2a4c9e24d59", "moondemo", EN_ANY, kPlatformPC },
+ { "aa7a07d94ae853f6460be4ce0a1bf530", "monkeyega", FR_FRA, kPlatformPC },
+ { "aa8a0cb65f3afbbe2c14c3f9f92775a3", "monkey", FR_FRA, kPlatformPC },
+ { "aaa587701cde7e74692c68c1024b85eb", "racedemo", NL_NLD, kPlatformUnknown },
+ { "ab0693e9324cfcf498fdcbb12acf8bb4", "puttcircus", EN_ANY, kPlatformUnknown },
+ { "ac1642b6edfb8521ca03760126f1c250", "dottdemo", DE_DEU, kPlatformPC },
+ { "ac62d50e39492ee3738b4e83a5ac780f", "freddi2", NL_NLD, kPlatformWindows },
+ { "acad97ab1c6fc2a5b2d98abf6db4a190", "tentacle", EN_ANY, kPlatformUnknown },
+ { "ae94f110a14ce71fc515d5b648827a8f", "tentacle", ES_ESP, kPlatformPC },
+ { "b23f7cd7c304d7dff08e92a96120d5b4", "zak", EN_ANY, kPlatformPC },
+ { "b250d0f9cc83f80ced56fe11a4fb057c", "maniac", EN_ANY, kPlatformPC },
+ { "b289a2a8cbedbf45786e0b4ad2f510f1", "samnmax", IT_ITA, kPlatformPC },
+ { "b597e0403cc0002f69170e6caba7edd9", "indy3EGA", EN_ANY, kPlatformPC },
+ { "b628506f7def772e40de0aa5440fb8e1", "activity", EN_ANY, kPlatformWindows },
+ { "b886b0a5d909c7158a914e1d7c1c6c65", "loom", FR_FRA, kPlatformPC },
+ { "b8955d7d23b4972229060d1592489fef", "freddicove", NL_NLD, kPlatformWindows },
+ { "bd126753de619a495f9f22adc951c8d5", "monkey2", IT_ITA, kPlatformPC },
+ { "be39a5d4db60e8aa736b9086778cb45c", "spyozon", EN_ANY, kPlatformWindows },
+ { "bf8b52fdd9a69c67f34e8e9fec72661c", "farmdemo", EN_ANY, kPlatformWindows },
+ { "bfdf584b01503f0762baded581f6a0a2", "SoccerMLS", EN_ANY, kPlatformWindows },
+ { "c0039ad982999c92d0de81910d640fa0", "freddi", NL_NLD, kPlatformWindows },
+ { "c13225cb1bbd3bc9fe578301696d8021", "game", EN_ANY, kPlatformUnknown },
+ { "c24c490373aeb48fbd54caa8e7ae376d", "loom", DE_DEU, kPlatformAtariST },
+ { "c25755b08a8d0d47695e05f1e2111bfc", "f4-demo", EN_ANY, kPlatformWindows },
+ { "c30ef068add4277104243c31ce46c12b", "monkey2", FR_FRA, kPlatformAmiga },
+ { "c3196c5349e53e387aaff1533d95e53a", "snmdemo", EN_ANY, kPlatformPC },
+ { "c3b22fa4654bb580b20325ebf4174841", "puttzoo", NL_NLD, kPlatformWindows },
+ { "c3df37df9d3b481b45f75283a9907c47", "loom", IT_ITA, kPlatformPC },
+ { "c4787c3e8b5e2dfda90850ee800af00f ", "zak", FR_FRA, kPlatformPC },
+ { "c4ffae9fac495475d6bc3343ccc8faf9", "Soccer2004", EN_ANY, kPlatformUnknown },
+ { "c5d10e190d4b4d59114b824f2fdbd00e", "loomTowns", EN_ANY, kPlatformFMTowns },
+ { "c63ee46143ba65f9ce14cf539ca51bd7", "atlantis", EN_ANY, kPlatformPC },
+ { "c6907d44f1166941d982864cd42cdc89", "pajama2", DE_DEU, kPlatformWindows },
+ { "c7890e038806df2bb5c0c8c6f1986ea2", "monkeyvga", EN_ANY, kPlatformPC },
+ { "c7be10f775404fd9785a8b92a06d240c", "indy4", EN_ANY, kPlatformFMTowns },
+ { "c83079157ec765a28de445aec9768d60", "dottdemo", EN_ANY, kPlatformPC },
+ { "c8aac5e3e701874e2fa4117896f9e1b1", "freddemo", EN_ANY, kPlatformMacintosh },
+ { "cb1559e8405d17a5a278a6b5ad9338d1", "f3-mdemo", EN_ANY, kPlatformUnknown },
+ { "cc8ba2b0df2f9c450bcf055fe2711979", "snmdemo", DE_DEU, kPlatformPC },
+ { "cd9c05e755d7bf8e9b9590ad1ebe273e", "digdemo", EN_ANY, kPlatformMacintosh },
+ { "cdd760228cf1010c2903f37e788ea31c", "zak", DE_DEU, kPlatformPC },
+ { "ce3edc99cd4f478c5b37104d70c68ca5", "zakTowns", JA_JPN, kPlatformFMTowns },
+ { "ce6a4cef315b20fef58a95bc40a2d8d3", "monkeyega", FR_FRA, kPlatformPC },
+ { "ce7733f185b838e248927c7ba1a04204", "maniac", FR_FRA, kPlatformAmiga },
+ { "ce7fd0c382389a6791fc3e199c117ef4", "indy3EGA", ES_ESP, kPlatformPC },
+ { "cea91e3dd47f2518ea418e41611aa77f", "spyfox2", RU_RUS, kPlatformUnknown },
+ { "cf8d13446ec6cb6222287a925fd47c1d", "baseball", EN_ANY, kPlatformWindows },
+ { "cf90b4db5486ef798db78fe6fbf897e5", "pj3-demo", EN_ANY, kPlatformWindows },
+ { "d06fbe28818fef7bfc45c2cdf0c0849d", "zak", DE_DEU, kPlatformPC },
+ { "d0b531227a27c6662018d2bd05aac52a", "monkeyvga", DE_DEU, kPlatformPC },
+ { "d37c55388294b66e53e7ced3af88fa68", "ff2-demo", EN_ANY, kPlatformUnknown },
+ { "d43352a805d78b5f4936c6d7779bf575", "samnmax", RU_RUS, kPlatformPC },
+ { "d4b8ee426b1afd3e53bc0cf020418cf6", "dog", EN_ANY, kPlatformWindows },
+ { "d4cccb5af88f3e77f370896e9ba8c5f9", "freddi", RU_RUS, kPlatformWindows },
+ { "d4e79c3d8645b8266cd78c325bc35154", "pajama2", EN_ANY, kPlatformUnknown },
+ { "d62047a6729349ab36f7ee065bf26509", "dig", RU_RUS, kPlatformUnknown },
+ { "d62d248c3df6ec177405e2cb23d923b2", "indy3EGA", IT_ITA, kPlatformPC },
+ { "d6dd0646404768a63e963891a96daadd", "atlantis", EN_ANY, kPlatformMacintosh },
+ { "d7ab7cd6105546016e6a0d46fb36b964", "pjs-demo", EN_ANY, kPlatformUnknown },
+ { "d8323015ecb8b10bf53474f6e6b0ae33", "dig", UNK_LANG, kPlatformUnknown },
+ { "d8d07efcb88f396bee0b402b10c3b1c9", "maniac", EN_ANY, kPlatformNES },
+ { "d917f311a448e3cc7239c31bddb00dd2", "samnmax", EN_ANY, kPlatformUnknown },
+ { "d9d0dd93d16ab4dec55cabc2b86bbd17", "samdemo", EN_ANY, kPlatformPC },
+ { "da09e666fc8f5b78d7b0ac65d1a3b56e", "monkey2", EN_ANY, kPlatformFMTowns },
+ { "da6269b18fcb08189c0aa9c95533cce2", "monkey", IT_ITA, kPlatformPC },
+ { "da669b20271b85182e9c17a2a37ea02e", "monkey2", DE_DEU, kPlatformAmiga },
+ { "dd30a53035393baa5a5e222e716559af", "maniac", FR_FRA, kPlatformAtariST },
+ { "de4efb910210736813c9a1185384bace", "zoodemo", EN_ANY, kPlatformWindows },
+ { "debe337f73d660e951ece7c1f1c81add", "zak", EN_ANY, kPlatformPC },
+ { "defb8cb9ec4b0f91acfb6b61c6129ad9", "PuttTime", RU_RUS, kPlatformWindows },
+ { "df03ee021aa9b81d90cab9c26da07614", "indy3EGA", IT_ITA, kPlatformAmiga },
+ { "df047cc4792150f601290357566d36a6", "freddi", EN_ANY, kPlatformUnknown },
+ { "e01acc8c12ef44e8f778fe87e5f90f4e", "fbpack", EN_ANY, kPlatformUnknown },
+ { "e144f5f49d9241d2a9dee2576b3d09cb", "airdemo", EN_ANY, kPlatformWindows },
+ { "e17db1ddf91b39ca6bbc8ad3ed19e883", "monkey", JA_JPN, kPlatformFMTowns },
+ { "e246e02db9630533a40d99c9f54a8e01", "monkey2", EN_ANY, kPlatformMacintosh },
+ { "e361a7058ed8e8ebb462663c0a3ae8d6", "puttputt", HB_ISR, kPlatformPC },
+ { "e41de1c2a15abbcdbf9977e2d7e8a340", "freddi2", RU_RUS, kPlatformWindows },
+ { "e534d29afb3c6e0ee9dc3d53c5956714", "atlantis", DE_DEU, kPlatformAmiga },
+ { "e63a0b9249b5ca4cc4d3ac34305ae360", "freddi", NB_NOR, kPlatformWindows },
+ { "e689bdf67f98b1d760ce4487ec0e8d06", "indy3EGA", FR_FRA, kPlatformAmiga },
+ { "e6cd81b25ab1453a8a6d3482118c391e", "pass", EN_ANY, kPlatformPC },
+ { "e72bb4c2b613db2cf50f89ff6350e70a", "ft", ES_ESP, kPlatformUnknown },
+ { "e781230da44a44e2f0770edb2b3b3633", "maniac", EN_ANY, kPlatformAmiga },
+ { "e94c7cc3686fce406d3c91b5eae5a72d", "zak", EN_ANY, kPlatformAmiga },
+ { "eae95b2b3546d8ba86ae1d397c383253", "dog", EN_ANY, kPlatformUnknown },
+ { "ebd0b2c8a387f18887282afe6cad894a", "sf3-demo", EN_ANY, kPlatformUnknown },
+ { "ebd324dcf06a4c49e1ba5c231eee1060", "f4-demo", EN_ANY, kPlatformUnknown },
+ { "ed361270102e355afe5236954216aba2", "lost", EN_ANY, kPlatformUnknown },
+ { "edfdb24a499d92c59f824c52987c0eec", "atlantis", FR_FRA, kPlatformPC },
+ { "ef347474f3c7be3b29584eaa133cca05", "samnmax", FR_FRA, kPlatformPC },
+ { "ef74d9071d4e564b037cb44bd6774de7", "fbear", HB_ISR, kPlatformPC },
+ { "efe0a04a703e765ebebe92b6c8aa6b86", "baseball2003", EN_ANY, kPlatformWindows },
+ { "f049e38c1f8302b5db6170f1872af89a", "monkey", ES_ESP, kPlatformPC },
+ { "f06e66fd45b2f8b0f4a2833ff4476050", "fbpack", HB_ISR, kPlatformPC },
+ { "f08145577e4f13584cc90b3d6e9caa55", "pj3-demo", NL_NLD, kPlatformUnknown },
+ { "f237bf8a5ef9af78b2a6a4f3901da341", "pjs-demo", EN_ANY, kPlatformUnknown },
+ { "f27b1ba0eadaf2a6617b2b58192d1dbf", "samnmax", DE_DEU, kPlatformPC },
+ { "f3d55aea441e260e9e9c7d2a187097e0", "zoodemo", EN_ANY, kPlatformWindows },
+ { "f40a7f495f59188ca57a9d1d50301bb6", "puttdemo", EN_ANY, kPlatformMacintosh },
+ { "f7711f9264d4d43c2a1518ec7c10a607", "pajama3", EN_ANY, kPlatformWindows },
+ { "f79e60c17cca601e411f1f75e8ee9b5a", "spyfox2", EN_ANY, kPlatformUnknown },
+ { "fa127d7c4bb47d05bb1c33ddcaa9f767", "loom", DE_DEU, kPlatformPC },
+ { "fb66aa42de21675116346213f176a366", "monkeyvga", IT_ITA, kPlatformAmiga },
+ { "fbbbb38a81fc9d6a61d509278390a290", "farm", EN_ANY, kPlatformMacintosh },
+ { "fbdd947d21e8f5bac6d6f7a316af1c5a", "spydemo", EN_ANY, kPlatformUnknown },
+ { "fc53ce0e5f6562b1c1e1b4b8203acafb", "samnmax", ES_ESP, kPlatformPC },
+ { "fc6b6148e80d67939d9a18697c0f626a", "monkeyega", DE_DEU, kPlatformPC },
+ { "fc8d197a22146e74766e9cb0cfcaf1da", "ff2-demo", EN_ANY, kPlatformUnknown },
+ { "fcb78ebecab2757264c590890c319cc5", "PuttTime", NL_NLD, kPlatformWindows },
+ { "fe381e45117878b1e942cb876b050fd6", "ft", EN_ANY, kPlatformMacintosh },
+ { "fe60d6b5ff51b0553ac59963123b5777", "comi", UNK_LANG, kPlatformUnknown },
+ { 0, 0, UNK_LANG, kPlatformUnknown }
+};
+
+ writeRecord(md5table, sizeof(md5table), GBVARS_MD5TABLE_INDEX , GBVARS_SCUMM);
+}
+
+void addScummTables() {
+ addScumm_mdtable();
+}
diff --git a/backends/platform/PalmOS/Src/builder/scumm/bl_newgui.c b/backends/platform/PalmOS/Src/builder/scumm/bl_newgui.c
new file mode 100644
index 0000000000..528bcf5b25
--- /dev/null
+++ b/backends/platform/PalmOS/Src/builder/scumm/bl_newgui.c
@@ -0,0 +1,47 @@
+#include <PalmOS.h>
+#include "b_globals.h"
+
+typedef unsigned short bitmap_t;
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+static void addNewGui_guifont() {
+ UInt8 guifont[] = {
+0,0,99,1,226,8,4,8,6,8,6,0,0,0,0,0,0,0,0,0,0,0,8,2,1,8,0,0,0,0,0,0,0,0,0,0,0,0,4,3,7,8,7,7,8,4,5,5,8,7,4,7,3,8,7,7,7,7,8,7,7,7,7,7,3,4,7,5,7,7,8,7,7,7,7,7,7,7,7,5,7,7,
+7,8,7,7,7,7,7,7,7,7,7,8,7,7,7,5,8,5,8,8,7,7,7,6,7,7,7,7,7,5,6,7,5,8,7,7,7,7,7,7,7,7,7,8,7,7,7,5,3,5,7,8,7,7,7,7,7,7,0,6,7,7,7,5,5,5,7,0,6,8,8,7,7,7,7,7,0,7,7,0,0,
+0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,1,3,6,12,
+24,62,3,0,128,192,96,48,24,124,192,0,0,3,62,24,12,6,3,1,0,192,124,24,48,96,192,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,237,74,72,0,0,0,0,0,128,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,60,66,153,161,161,153,66,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,96,96,96,96,0,0,96,0,102,102,102,0,0,0,0,0,102,102,255,102,255,102,102,0,24,62,96,60,6,124,24,0,98,102,12,24,48,102,70,0,60,102,60,56,103,102,63,0,96,48,16,0,0,0,0,0,24,48,96,96,96,48,24,0,96,48,24,24,24,48,96,0,
+0,102,60,255,60,102,0,0,0,24,24,126,24,24,0,0,0,0,0,0,0,48,48,96,0,0,0,126,0,0,0,0,0,0,0,0,0,96,96,0,0,3,6,12,24,48,96,0,60,102,102,102,102,102,60,0,24,24,56,24,24,24,126,0,60,102,6,12,48,96,126,0,60,102,6,28,6,102,60,0,6,
+14,30,102,127,6,6,0,126,96,124,6,6,102,60,0,60,102,96,124,102,102,60,0,126,102,12,24,24,24,24,0,60,102,102,60,102,102,60,0,60,102,102,62,6,102,60,0,0,0,96,0,0,96,0,0,0,0,48,0,0,48,48,96,14,24,48,96,48,24,14,0,0,0,120,0,120,0,0,0,112,24,
+12,6,12,24,112,0,60,102,6,12,24,0,24,0,0,0,0,255,255,0,0,0,24,60,102,126,102,102,102,0,124,102,102,124,102,102,124,0,60,102,96,96,96,102,60,0,120,108,102,102,102,108,120,0,126,96,96,120,96,96,126,0,126,96,96,120,96,96,96,0,60,102,96,110,102,102,60,0,102,102,102,
+126,102,102,102,0,120,48,48,48,48,48,120,0,30,12,12,12,12,108,56,0,102,108,120,112,120,108,102,0,96,96,96,96,96,96,126,0,99,119,127,107,99,99,99,0,102,118,126,126,110,102,102,0,60,102,102,102,102,102,60,0,124,102,102,124,96,96,96,0,60,102,102,102,102,60,14,0,124,102,102,124,
+120,108,102,0,60,102,96,60,6,102,60,0,126,24,24,24,24,24,24,0,102,102,102,102,102,102,60,0,102,102,102,102,102,60,24,0,99,99,99,107,127,119,99,0,102,102,60,24,60,102,102,0,102,102,102,60,24,24,24,0,126,6,12,24,48,96,126,0,120,96,96,96,96,96,120,0,3,6,12,24,48,
+96,192,0,120,24,24,24,24,24,120,0,0,0,0,0,0,219,219,0,0,0,0,0,0,0,0,255,102,102,102,0,0,0,0,0,0,0,60,6,62,102,62,0,0,96,96,124,102,102,124,0,0,0,60,96,96,96,60,0,0,6,6,62,102,102,62,0,0,0,60,102,126,96,60,0,0,14,24,62,24,24,
+24,0,0,0,62,102,102,62,6,124,0,96,96,124,102,102,102,0,0,48,0,112,48,48,120,0,0,12,0,12,12,12,12,120,0,96,96,108,120,108,102,0,0,112,48,48,48,48,120,0,0,0,102,127,127,107,99,0,0,0,124,102,102,102,102,0,0,0,60,102,102,102,60,0,0,0,124,102,102,124,96,
+96,0,0,62,102,102,62,6,6,0,0,124,102,96,96,96,0,0,0,62,96,60,6,124,0,0,24,126,24,24,24,14,0,0,0,102,102,102,102,62,0,0,0,102,102,102,60,24,0,0,0,99,107,127,62,54,0,0,0,102,60,24,60,102,0,0,0,102,102,102,62,12,120,0,0,126,12,24,48,126,0,
+24,48,48,96,48,48,24,0,96,96,96,0,96,96,96,0,96,48,48,24,48,48,96,0,0,0,97,153,134,0,0,0,8,12,14,255,255,14,12,8,60,102,96,96,102,60,24,56,102,0,102,102,102,102,62,0,12,24,60,102,126,96,60,0,24,36,60,6,62,102,62,0,102,0,60,6,62,102,62,0,48,
+24,60,6,62,102,62,0,0,0,0,0,0,0,0,0,0,60,96,96,96,60,24,56,24,36,60,102,126,96,60,0,102,0,60,102,126,96,60,0,48,24,60,102,126,96,60,0,0,216,0,112,48,48,120,0,48,72,0,112,48,48,120,0,96,48,0,112,48,48,120,0,102,24,60,102,126,102,102,0,0,0,
+0,0,0,0,0,0,24,48,124,96,120,96,124,0,0,0,108,26,126,216,110,0,30,40,40,126,72,136,142,0,24,36,60,102,102,102,60,0,102,0,60,102,102,102,60,0,48,24,60,102,102,102,60,0,24,36,0,102,102,102,62,0,48,24,102,102,102,102,62,0,0,0,0,0,0,0,0,0,102,60,102,
+102,102,102,60,0,102,0,102,102,102,102,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,24,60,6,62,102,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,28,54,54,124,102,102,124,64,0,0,0
+};
+ writeRecord(guifont, sizeof(guifont), GBVARS_GUIFONT_INDEX, GBVARS_COMMON);
+}
+
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+
+void addNewGui() {
+ addNewGui_guifont();
+} \ No newline at end of file
diff --git a/backends/platform/PalmOS/Src/builder/scumm/bl_player_v2.c b/backends/platform/PalmOS/Src/builder/scumm/bl_player_v2.c
new file mode 100644
index 0000000000..9b2a7b0987
--- /dev/null
+++ b/backends/platform/PalmOS/Src/builder/scumm/bl_player_v2.c
@@ -0,0 +1,334 @@
+#include <PalmOS.h>
+#include "b_globals.h"
+
+static void PlayerV2_note_lengths() {
+ UInt8 note_lengths[] = {
+ 0,
+ 0, 0, 2,
+ 0, 3, 4,
+ 5, 6, 8,
+ 9, 12, 16,
+ 18, 24, 32,
+ 36, 48, 64,
+ 72, 96
+ };
+
+ writeRecord(note_lengths, sizeof(note_lengths), GBVARS_NOTELENGTHS_INDEX , GBVARS_SCUMM);
+}
+
+static void PlayerV2_hull_offsets() {
+ UInt16 hull_offsets[] = {
+ 0, 12, 24, 36, 48, 60,
+ 72, 88, 104, 120, 136, 256,
+ 152, 164, 180
+ };
+
+ writeRecord(hull_offsets, sizeof(hull_offsets), GBVARS_HULLOFFSETS_INDEX , GBVARS_SCUMM);
+}
+
+typedef Int16 int16;
+
+static void PlayerV2_hulls() {
+ Int16 hulls[] = {
+ // hull 0
+ 3, -1, 0, 0, 0, 0, 0, 0,
+ 0, -1, 0, 0,
+ // hull 1 (staccato)
+ 3, -1, 0, 32, 0, -1, 0, 0,
+ 0, -1, 0, 0,
+ // hull 2 (legato)
+ 3, -1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ // hull 3 (staccatissimo)
+ 3, -1, 0, 2, 0, -1, 0, 0,
+ 0, -1, 0, 0,
+ // hull 4
+ 3, -1, 0, 6, 0, -1, 0, 0,
+ 0, -1, 0, 0,
+ // hull 5
+ 3, -1, 0, 16, 0, -1, 0, 0,
+ 0, -1, 0, 0,
+ // hull 6
+ (int16) 60000, -1, -1000, 20, 0, 0, 0, 0,
+ (int16) 40000, -1, -5000, 5, 0, -1, 0, 0,
+ // hull 7
+ (int16) 50000, -1, 0, 8, 30000, -1, 0, 0,
+ 28000, -1, -5000, 5, 0, -1, 0, 0,
+ // hull 8
+ (int16) 60000, -1, -2000, 16, 0, 0, 0, 0,
+ 28000, -1, -6000, 5, 0, -1, 0, 0,
+ // hull 9
+ (int16) 55000, -1, 0, 8, (int16) 35000, -1, 0, 0,
+ (int16) 40000, -1, -2000, 10, 0, -1, 0, 0,
+ // hull 10
+ (int16) 60000, -1, 0, 4, -2000, 8, 0, 0,
+ (int16) 40000, -1, -6000, 5, 0, -1, 0, 0,
+ // hull 12
+ 0, -1, 150, 340, -150, 340, 0, -1,
+ 0, -1, 0, 0,
+ // hull 13 == 164
+ 20000, -1, 4000, 7, 1000, 15, 0, 0,
+ (int16) 35000, -1, -2000, 15, 0, -1, 0, 0,
+
+ // hull 14 == 180
+ (int16) 35000, -1, 500, 20, 0, 0, 0, 0,
+ (int16) 45000, -1, -500, 60, 0, -1, 0, 0,
+
+ // hull misc = 196
+ (int16) 44000, -1, -4400, 10, 0, -1, 0, 0,
+ 0, -1, 0, 0,
+
+ (int16) 53000, -1, -5300, 10, 0, -1, 0, 0,
+ 0, -1, 0, 0,
+
+ (int16) 63000, -1, -6300, 10, 0, -1, 0, 0,
+ 0, -1, 0, 0,
+
+ (int16) 44000, -1, -1375, 32, 0, -1, 0, 0,
+ 0, -1, 0, 0,
+
+ (int16) 53000, -1, -1656, 32, 0, -1, 0, 0,
+ 0, -1, 0, 0,
+
+ // hull 11 == 256
+ (int16) 63000, -1, -1968, 32, 0, -1, 0, 0,
+ 0, -1, 0, 0,
+
+ (int16) 44000, -1, - 733, 60, 0, -1, 0, 0,
+ 0, -1, 0, 0,
+
+ (int16) 53000, -1, - 883, 60, 0, -1, 0, 0,
+ 0, -1, 0, 0,
+
+ (int16) 63000, -1, -1050, 60, 0, -1, 0, 0,
+ 0, -1, 0, 0,
+
+ (int16) 44000, -1, - 488, 90, 0, -1, 0, 0,
+ 0, -1, 0, 0,
+
+ (int16) 53000, -1, - 588, 90, 0, -1, 0, 0,
+ 0, -1, 0, 0,
+
+ (int16) 63000, -1, - 700, 90, 0, -1, 0, 0,
+ 0, -1, 0, 0
+ };
+
+ writeRecord(hulls, sizeof(hulls), GBVARS_HULLS_INDEX , GBVARS_SCUMM);
+}
+
+static void PlayerV2_freqmod_lengths() {
+ UInt16 freqmod_lengths[] = {
+ 0x1000, 0x1000, 0x20, 0x2000, 0x1000
+ };
+
+ writeRecord(freqmod_lengths, sizeof(freqmod_lengths), GBVARS_FREQMODLENGTHS_INDEX , GBVARS_SCUMM);
+}
+
+static void PlayerV2_freqmod_offsets() {
+ UInt16 freqmod_offsets[] = {
+ 0, 0x100, 0x200, 0x302, 0x202
+ };
+
+ writeRecord(freqmod_offsets, sizeof(freqmod_offsets), GBVARS_FREQMODOFFSETS_INDEX , GBVARS_SCUMM);
+}
+
+static void PlayerV2_freqmod_table() {
+ Int8 freqmod_table[0x502] = {
+ 0, 3, 6, 9, 12, 15, 18, 21,
+ 24, 27, 30, 33, 36, 39, 42, 45,
+ 48, 51, 54, 57, 59, 62, 65, 67,
+ 70, 73, 75, 78, 80, 82, 85, 87,
+ 89, 91, 94, 96, 98, 100, 102, 103,
+ 105, 107, 108, 110, 112, 113, 114, 116,
+ 117, 118, 119, 120, 121, 122, 123, 123,
+ 124, 125, 125, 126, 126, 126, 126, 126,
+ 126, 126, 126, 126, 126, 126, 125, 125,
+ 124, 123, 123, 122, 121, 120, 119, 118,
+ 117, 116, 114, 113, 112, 110, 108, 107,
+ 105, 103, 102, 100, 98, 96, 94, 91,
+ 89, 87, 85, 82, 80, 78, 75, 73,
+ 70, 67, 65, 62, 59, 57, 54, 51,
+ 48, 45, 42, 39, 36, 33, 30, 27,
+ 24, 21, 18, 15, 12, 9, 6, 3,
+ 0, -3, -6, -9, -12, -15, -18, -21,
+ -24, -27, -30, -33, -36, -39, -42, -45,
+ -48, -51, -54, -57, -59, -62, -65, -67,
+ -70, -73, -75, -78, -80, -82, -85, -87,
+ -89, -91, -94, -96, -98,-100,-102,-103,
+ -105,-107,-108,-110,-112,-113,-114,-116,
+ -117,-118,-119,-120,-121,-122,-123,-123,
+ -124,-125,-125,-126,-126,-126,-126,-126,
+ -126,-126,-126,-126,-126,-126,-125,-125,
+ -124,-123,-123,-122,-121,-120,-119,-118,
+ -117,-116,-114,-113,-112,-110,-108,-107,
+ -105,-103,-102,-100, -98, -96, -94, -91,
+ -89, -87, -85, -82, -80, -78, -75, -73,
+ -70, -67, -65, -62, -59, -57, -54, -51,
+ -48, -45, -42, -39, -36, -33, -30, -27,
+ -24, -21, -18, -15, -12, -9, -6, -3,
+
+ 0, 1, 2, 3, 4, 5, 6, 7,
+ 8, 9, 10, 11, 12, 13, 14, 15,
+ 16, 17, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 42, 43, 44, 45, 46, 47,
+ 48, 49, 50, 51, 52, 53, 54, 55,
+ 56, 57, 58, 59, 60, 61, 62, 63,
+ 64, 65, 66, 67, 68, 69, 70, 71,
+ 72, 73, 74, 75, 76, 77, 78, 79,
+ 80, 81, 82, 83, 84, 85, 86, 87,
+ 88, 89, 90, 91, 92, 93, 94, 95,
+ 96, 97, 98, 99, 100, 101, 102, 103,
+ 104, 105, 106, 107, 108, 109, 110, 111,
+ 112, 113, 114, 115, 116, 117, 118, 119,
+ 120, 121, 122, 123, 124, 125, 126, 127,
+ -128,-127,-126,-125,-124,-123,-122,-121,
+ -120,-119,-118,-117,-116,-115,-114,-113,
+ -112,-111,-110,-109,-108,-107,-106,-105,
+ -104,-103,-102,-101,-100, -99, -98, -97,
+ -96, -95, -94, -93, -92, -91, -90, -89,
+ -88, -87, -86, -85, -84, -83, -82, -81,
+ -80, -79, -78, -77, -76, -75, -74, -73,
+ -72, -71, -70, -69, -68, -67, -66, -65,
+ -64, -63, -62, -61, -60, -59, -58, -57,
+ -56, -55, -54, -53, -52, -51, -50, -49,
+ -48, -47, -46, -45, -44, -43, -42, -41,
+ -40, -39, -38, -37, -36, -35, -34, -33,
+ -32, -31, -30, -29, -28, -27, -26, -25,
+ -24, -23, -22, -21, -20, -19, -18, -17,
+ -16, -15, -14, -13, -12, -11, -10, -9,
+ -8, -7, -6, -5, -4, -3, -2, -1,
+
+ -120, 120,
+
+ -120,-120,-120,-120,-120,-120,-120,-120,
+ -120,-120,-120,-120,-120,-120,-120,-120,
+ -120,-120,-120,-120,-120,-120,-120,-120,
+ -120,-120,-120,-120,-120,-120,-120,-120,
+ -120,-120,-120,-120,-120,-120,-120,-120,
+ -120,-120,-120,-120,-120,-120,-120,-120,
+ -120,-120,-120,-120,-120,-120,-120,-120,
+ -120,-120,-120,-120,-120,-120,-120,-120,
+ -120,-120,-120,-120,-120,-120,-120,-120,
+ -120,-120,-120,-120,-120,-120,-120,-120,
+ -120,-120,-120,-120,-120,-120,-120,-120,
+ -120,-120,-120,-120,-120,-120,-120,-120,
+ -120,-120,-120,-120,-120,-120,-120,-120,
+ -120,-120,-120,-120,-120,-120,-120,-120,
+ -120,-120,-120,-120,-120,-120,-120,-120,
+ -120,-120,-120,-120,-120,-120,-120,-120,
+ 120, 120, 120, 120, 120, 120, 120, 120,
+ 120, 120, 120, 120, 120, 120, 120, 120,
+ 120, 120, 120, 120, 120, 120, 120, 120,
+ 120, 120, 120, 120, 120, 120, 120, 120,
+ 120, 120, 120, 120, 120, 120, 120, 120,
+ 120, 120, 120, 120, 120, 120, 120, 120,
+ 120, 120, 120, 120, 120, 120, 120, 120,
+ 120, 120, 120, 120, 120, 120, 120, 120,
+ 120, 120, 120, 120, 120, 120, 120, 120,
+ 120, 120, 120, 120, 120, 120, 120, 120,
+ 120, 120, 120, 120, 120, 120, 120, 120,
+ 120, 120, 120, 120, 120, 120, 120, 120,
+ 120, 120, 120, 120, 120, 120, 120, 120,
+ 120, 120, 120, 120, 120, 120, 120, 120,
+ 120, 120, 120, 120, 120, 120, 120, 120,
+ 120, 120, 120, 120, 120, 120, 120, 120,
+
+ 41, 35, -66,-124, -31, 108, -42, -82,
+ 82,-112, 73, -15, -15, -69, -23, -21,
+ -77, -90, -37, 60,-121, 12, 62,-103,
+ 36, 94, 13, 28, 6, -73, 71, -34,
+ -77, 18, 77, -56, 67, -69,-117, -90,
+ 31, 3, 90, 125, 9, 56, 37, 31,
+ 93, -44, -53, -4,-106, -11, 69, 59,
+ 19, 13,-119, 10, 28, -37, -82, 50,
+ 32,-102, 80, -18, 64, 120, 54, -3,
+ 18, 73, 50, -10, -98, 125, 73, -36,
+ -83, 79, 20, -14, 68, 64, 102, -48,
+ 107, -60, 48, -73, 50, 59, -95, 34,
+ -10, 34,-111, -99, -31,-117, 31, -38,
+ -80, -54,-103, 2, -71, 114, -99, 73,
+ 44,-128, 126, -59,-103, -43, -23,-128,
+ -78, -22, -55, -52, 83, -65, 103, -42,
+ -65, 20, -42, 126, 45, -36,-114, 102,
+ -125, -17, 87, 73, 97, -1, 105,-113,
+ 97, -51, -47, 30, -99,-100, 22, 114,
+ 114, -26, 29, -16,-124, 79, 74, 119,
+ 2, -41, -24, 57, 44, 83, -53, -55,
+ 18, 30, 51, 116, -98, 12, -12, -43,
+ -44, -97, -44, -92, 89, 126, 53, -49,
+ 50, 34, -12, -52, -49, -45,-112, 45,
+ 72, -45,-113, 117, -26, -39, 29, 42,
+ -27, -64, -9, 43, 120,-127,-121, 68,
+ 14, 95, 80, 0, -44, 97,-115, -66,
+ 123, 5, 21, 7, 59, 51,-126, 31,
+ 24, 112,-110, -38, 100, 84, -50, -79,
+ -123, 62, 105, 21, -8, 70, 106, 4,
+ -106, 115, 14, -39, 22, 47, 103, 104,
+ -44, -9, 74, 74, -48, 87, 104, 118,
+ -6, 22, -69, 17, -83, -82, 36,-120,
+ 121, -2, 82, -37, 37, 67, -27, 60,
+ -12, 69, -45, -40, 40, -50, 11, -11,
+ -59, 96, 89, 61,-105, 39,-118, 89,
+ 118, 45, -48, -62, -55, -51, 104, -44,
+ 73, 106, 121, 37, 8, 97, 64, 20,
+ -79, 59, 106, -91, 17, 40, -63,-116,
+ -42, -87, 11,-121,-105,-116, 47, -15,
+ 21, 29,-102,-107, -63,-101, -31, -64,
+ 126, -23, -88,-102, -89,-122, -62, -75,
+ 84, -65,-102, -25, -39, 35, -47, 85,
+ -112, 56, 40, -47, -39, 108, -95, 102,
+ 94, 78, -31, 48,-100, -2, -39, 113,
+ -97, -30, -91, -30, 12,-101, -76, 71,
+ 101, 56, 42, 70,-119, -87,-126, 121,
+ 122, 118, 120, -62, 99, -79, 38, -33,
+ -38, 41, 109, 62, 98, -32,-106, 18,
+ 52, -65, 57, -90, 63,-119, 94, -15,
+ 109, 14, -29, 108, 40, -95, 30, 32,
+ 29, -53, -62, 3, 63, 65, 7,-124,
+ 15, 20, 5, 101, 27, 40, 97, -55,
+ -59, -25, 44,-114, 70, 54, 8, -36,
+ -13, -88,-115, -2, -66, -14, -21, 113,
+ -1, -96, -48, 59, 117, 6,-116, 126,
+ -121, 120, 115, 77, -48, -66,-126, -66,
+ -37, -62, 70, 65, 43,-116, -6, 48,
+ 127, 112, -16, -89, 84,-122, 50,-107,
+ -86, 91, 104, 19, 11, -26, -4, -11,
+ -54, -66, 125, -97,-119,-118, 65, 27,
+ -3, -72, 79, 104, -10, 114, 123, 20,
+ -103, -51, -45, 13, -16, 68, 58, -76,
+ -90, 102, 83, 51, 11, -53, -95, 16
+};
+
+ writeRecord(freqmod_table, sizeof(freqmod_table), GBVARS_FREQMODTABLE_INDEX , GBVARS_SCUMM);
+}
+
+static void PlayerV2_spk_freq_table() {
+ UInt16 spk_freq_table[12] = {
+ 36484, 34436, 32503, 30679, 28957, 27332,
+ 25798, 24350, 22983, 21693, 20476, 19326
+};
+
+ writeRecord(spk_freq_table, sizeof(spk_freq_table), GBVARS_SPKFREQTABLE_INDEX , GBVARS_SCUMM);
+}
+
+static void PlayerV2_pcjr_freq_table() {
+ UInt16 pcjr_freq_table[12] = {
+ 65472, 61760, 58304, 55040, 52032, 49024,
+ 46272, 43648, 41216, 38912, 36736, 34624
+};
+
+ writeRecord(pcjr_freq_table, sizeof(pcjr_freq_table), GBVARS_PCJRFREQTABLE_INDEX , GBVARS_SCUMM);
+}
+
+void addPlayerV2() {
+ PlayerV2_note_lengths();
+ PlayerV2_hull_offsets();
+ PlayerV2_hulls();
+ PlayerV2_freqmod_lengths();
+ PlayerV2_freqmod_offsets();
+ PlayerV2_freqmod_table();
+ PlayerV2_spk_freq_table();
+ PlayerV2_pcjr_freq_table();
+} \ No newline at end of file
diff --git a/backends/platform/PalmOS/Src/builder/scumm/bl_scumm.c b/backends/platform/PalmOS/Src/builder/scumm/bl_scumm.c
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/backends/platform/PalmOS/Src/builder/scumm/bl_scumm.c
diff --git a/backends/platform/PalmOS/Src/builder/scumm/imuse_digi/bl_dimuse_codecs.c b/backends/platform/PalmOS/Src/builder/scumm/imuse_digi/bl_dimuse_codecs.c
new file mode 100644
index 0000000000..635bba344f
--- /dev/null
+++ b/backends/platform/PalmOS/Src/builder/scumm/imuse_digi/bl_dimuse_codecs.c
@@ -0,0 +1,21 @@
+#include <PalmOS.h>
+#include "b_globals.h"
+
+static void addDimuseCodecs_imcTable() {
+ Int16 imcTable[] = {
+ 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x0010, 0x0011,
+ 0x0013, 0x0015, 0x0017, 0x0019, 0x001C, 0x001F, 0x0022, 0x0025, 0x0029, 0x002D,
+ 0x0032, 0x0037, 0x003C, 0x0042, 0x0049, 0x0050, 0x0058, 0x0061, 0x006B, 0x0076,
+ 0x0082, 0x008F, 0x009D, 0x00AD, 0x00BE, 0x00D1, 0x00E6, 0x00FD, 0x0117, 0x0133,
+ 0x0151, 0x0173, 0x0198, 0x01C1, 0x01EE, 0x0220, 0x0256, 0x0292, 0x02D4, 0x031C,
+ 0x036C, 0x03C3, 0x0424, 0x048E, 0x0502, 0x0583, 0x0610, 0x06AB, 0x0756, 0x0812,
+ 0x08E0, 0x09C3, 0x0ABD, 0x0BD0, 0x0CFF, 0x0E4C, 0x0FBA, 0x114C, 0x1307, 0x14EE,
+ 0x1706, 0x1954, 0x1BDC, 0x1EA5, 0x21B6, 0x2515, 0x28CA, 0x2CDF, 0x315B, 0x364B,
+ 0x3BB9, 0x41B2, 0x4844, 0x4F7E, 0x5771, 0x602F, 0x69CE, 0x7462, 0x7FFF
+};
+ writeRecord(imcTable, sizeof(imcTable), GBVARS_IMCTABLE_INDEX , GBVARS_SCUMM);
+}
+
+void addDimuseCodecs() {
+ addDimuseCodecs_imcTable();
+} \ No newline at end of file
diff --git a/backends/platform/PalmOS/Src/builder/scumm/imuse_digi/bl_dimuse_tables.c b/backends/platform/PalmOS/Src/builder/scumm/imuse_digi/bl_dimuse_tables.c
new file mode 100644
index 0000000000..1614932343
--- /dev/null
+++ b/backends/platform/PalmOS/Src/builder/scumm/imuse_digi/bl_dimuse_tables.c
@@ -0,0 +1,921 @@
+#include <PalmOS.h>
+#include "b_globals.h"
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+typedef Int16 int16;
+typedef Int8 int8;
+typedef unsigned char byte;
+
+typedef struct {
+ int8 roomId;
+ byte musicTableIndex;
+ byte unk1;
+ byte unk2;
+ byte unk3;
+ byte unk4;
+} imuseRoomMap;
+
+
+typedef struct {
+ byte opcode;
+ int16 soundId;
+ char name[20];
+ byte param;
+ byte hookId;
+ char filename[13];
+} imuseDigTable;
+
+typedef struct {
+ byte opcode;
+ int16 soundId;
+ char name[20];
+ byte param;
+ byte hookId;
+ int16 fadeDelay;
+ char filename[13];
+} imuseComiTable;
+
+
+
+typedef struct {
+ char audioName[9];
+ byte opcode;
+ byte volume;
+ char name[21];
+} imuseFtStateTable;
+
+typedef struct {
+ char audioName[9];
+ byte opcode;
+ byte volume;
+} imuseFtSeqTable;
+
+typedef struct {
+ char name[20];
+} imuseFtNames;
+///////////////////////////////////////////////////////////////////
+
+static void addDimuseTables_digStateMusicMap() {
+ imuseRoomMap _digStateMusicMap[] = {
+ {0, 0, 0, 0, 0, 0 },
+ {1, 0, 0, 0, 0, 0 },
+ {2, 2, 0, 0, 0, 0 },
+ {4, 3, 0, 0, 0, 0 },
+ {5, 3, 0, 0, 0, 0 },
+ {6, 3, 0, 0, 0, 0 },
+ {7, 3, 0, 0, 0, 0 },
+ {8, 4, 0, 0, 0, 0 },
+ {9, 5, 0, 0, 0, 0 },
+ {10, 4, 0, 0, 0, 0 },
+ {12, 5, 0, 0, 0, 0 },
+ {14, 5, 0, 0, 0, 0 },
+ {15, 6, 29, 7, 0, 0 },
+ {16, 8, 0, 0, 0, 0 },
+ {17, 1, 0, 0, 0, 0 },
+ {18, 9, 0, 0, 0, 0 },
+ {19, 9, 0, 0, 0, 0 },
+ {20, 6, 0, 0, 0, 0 },
+ {21, 6, 0, 0, 0, 0 },
+ {22, 44, 0, 0, 0, 0 },
+ {23, 10, 7, 0, 0, 0 },
+ {24, 26, 0, 0, 0, 0 },
+ {25, 17, 0, 0, 0, 0 },
+ {26, 17, 0, 0, 0, 0 },
+ {27, 18, 0, 0, 0, 0 },
+ {28, 1, 0, 0, 0, 0 },
+ {29, 20, 0, 0, 0, 0 },
+ {30, 22, 0, 0, 0, 0 },
+ {31, 23, 0, 0, 0, 0 },
+ {32, 22, 0, 0, 0, 0 },
+ {33, 26, 0, 0, 0, 0 },
+ {34, 24, 0, 0, 0, 0 },
+ {35, 1, 0, 0, 0, 0 },
+ {36, 1, 0, 0, 0, 0 },
+ {37, 42, 0, 0, 0, 0 },
+ {38, 43, 0, 0, 0, 0 },
+ {39, 44, 0, 0, 0, 0 },
+ {40, 1, 0, 0, 0, 0 },
+ {41, 43, 0, 0, 0, 0 },
+ {42, 44, 0, 0, 0, 0 },
+ {43, 43, 0, 0, 0, 0 },
+ {44, 45, 117,45, 114,46},
+ {47, 1, 0, 0, 0, 0 },
+ {48, 43, 0, 0, 0, 0 },
+ {49, 44, 0, 0, 0, 0 },
+ {51, 1, 0, 0, 0, 0 },
+ {53, 28, 0, 0, 0, 0 },
+ {54, 28, 0, 0, 0, 0 },
+ {55, 29, 0, 0, 0, 0 },
+ {56, 29, 0, 0, 0, 0 },
+ {57, 29, 0, 0, 0, 0 },
+ {58, 31, 0, 0, 0, 0 },
+ {59, 1, 0, 0, 0, 0 },
+ {60, 37, 0, 0, 0, 0 },
+ {61, 39, 0, 0, 0, 0 },
+ {62, 38, 0, 0, 0, 0 },
+ {63, 39, 0, 0, 0, 0 },
+ {64, 39, 0, 0, 0, 0 },
+ {65, 40, 0, 0, 0, 0 },
+ {67, 40, 0, 0, 0, 0 },
+ {68, 39, 0, 0, 0, 0 },
+ {69, 1, 0, 0, 0, 0 },
+ {70, 49, 0, 0, 0, 0 },
+ {73, 50, 0, 0, 0, 0 },
+ {75, 51, 0, 0, 0, 0 },
+ {76, 1, 0, 0, 0, 0 },
+ {77, 52, 7, 0, 0, 0 },
+ {78, 63, 0, 0, 0, 0 },
+ {79, 1, 0, 0, 0, 0 },
+ {82, 21, 0, 0, 0, 0 },
+ {85, 1, 0, 0, 0, 0 },
+ {86, 0, 0, 0, 0, 0 },
+ {89, 33, 6, 35, 5, 34},
+ {90, 16, 0, 0, 0, 0 },
+ {91, 57, 0, 0, 0, 0 },
+ {88, 32, 0, 0, 0, 0 },
+ {92, 25, 0, 0, 0, 0 },
+ {93, 0, 0, 0, 0, 0 },
+ {95, 19, 0, 0, 0, 0 },
+ {80, 41, 0, 0, 0, 0 },
+ {81, 48, 0, 0, 0, 0 },
+ {83, 27, 0, 0, 0, 0 },
+ {94, 36, 0, 0, 0, 0 },
+ {40, 1, 0, 0, 0, 0 },
+ {96, 13, 0, 0, 0, 0 },
+ {97, 14, 0, 0, 0, 0 },
+ {98, 11, 0, 0, 0, 0 },
+ {99, 15, 0, 0, 0, 0 },
+ {100, 17, 0, 0, 0, 0 },
+ {101, 38, 0, 0, 0, 0 },
+ {103, 0, 0, 0, 0, 0 },
+ {104, 0, 0, 0, 0, 0 },
+ {11, 44, 0, 0, 0, 0 },
+ {3, 47, 0, 0, 0, 0 },
+ {105, 30, 128,29, 0, 0 },
+ {106, 0, 0, 0, 0, 0 },
+ {107, 1, 0, 0, 0, 0 },
+ {108, 1, 0, 0, 0, 0 },
+ {47, 1, 0, 0, 0, 0 },
+ {50, 1, 0, 0, 0, 0 },
+ {52, 0, 0, 0, 0, 0 },
+ {71, 1, 0, 0, 0, 0 },
+ {13, 1, 0, 0, 0, 0 },
+ {72, 1, 0, 0, 0, 0 },
+ {46, 33, 6, 35, 5, 34},
+ {74, 1, 0, 0, 0, 0 },
+ {84, 1, 0, 0, 0, 0 },
+ {66, 1, 0, 0, 0, 0 },
+ {102, 1, 0, 0, 0, 0 },
+ {109, 1, 0, 0, 0, 0 },
+ {110, 2, 0, 0, 0, 0 },
+ {45, 1, 0, 0, 0, 0 },
+ {87, 1, 0, 0, 0, 0 },
+ {111, 1, 0, 0, 0, 0 },
+ {-1, 1, 0, 0, 0, 0 }
+};
+ writeRecord(_digStateMusicMap, sizeof(_digStateMusicMap), GBVARS_DIGSTATEMUSICMAP_INDEX , GBVARS_SCUMM);
+}
+///////////////////////////////////////////////////////////////////
+static void addDimuseTables_digStateMusicTable() {
+ imuseDigTable _digStateMusicTable[] = {
+ {0, 1000, "STATE_NULL", 0, 0, ""}, /* 00 */
+ {0, 1001, "stateNoChange", 0, 0, ""}, /* 01 */
+ {3, 1100, "stateAstShip", 2, 0, "ASTERO~1.IMU"}, /* 02 */
+ {3, 1120, "stateAstClose", 2, 0, "ASTERO~2.IMU"}, /* 03 */
+ {3, 1140, "stateAstInside", 0, 0, "ASTERO~3.IMU"}, /* 04 */
+ {3, 1150, "stateAstCore", 0, 2, "ASTERO~4.IMU"}, /* 05 */
+ {3, 1200, "stateCanyonClose", 0, 1, "CANYON~1.IMU"}, /* 06 */
+ {3, 1205, "stateCanyonClose_m", 0, 0, "CANYON~2.IMU"}, /* 07 */
+ {3, 1210, "stateCanyonOver", 0, 1, "CANYON~3.IMU"}, /* 08 */
+ {3, 1220, "stateCanyonWreck", 0, 1, "CANYON~4.IMU"}, /* 09 */
+ {3, 1300, "stateNexusCanyon", 10, 0, "NEXUS(~1.IMU"}, /* 10 */
+ {3, 1310, "stateNexusPlan", 10, 0, "NEXUS(~1.IMU"}, /* 11 */
+ {3, 1320, "stateNexusRamp", 10, 0, "NEXUS(~2.IMU"}, /* 12 */
+ {3, 1330, "stateNexusMuseum", 10, 0, "NEXUS(~3.IMU"}, /* 13 */
+ {3, 1340, "stateNexusMap", 10, 0, "NEXUS(~4.IMU"}, /* 14 */
+ {3, 1350, "stateNexusTomb", 10, 0, "NE3706~5.IMU"}, /* 15 */
+ {3, 1360, "stateNexusCath", 10, 0, "NE3305~5.IMU"}, /* 16 */
+ {3, 1370, "stateNexusAirlock", 0, 0, "NE2D3A~5.IMU"}, /* 17 */
+ {3, 1380, "stateNexusPowerOff", 0, 1, "NE8522~5.IMU"}, /* 18 */
+ {3, 1400, "stateMuseumTramNear", 0, 1, "TRAM(M~1.IMU"}, /* 19 */
+ {3, 1410, "stateMuseumTramFar", 0, 0, "TRAM(M~2.IMU"}, /* 20 */
+ {3, 1420, "stateMuseumLockup", 0, 0, "MUSEUM~1.IMU"}, /* 21 */
+ {3, 1433, "stateMuseumPool", 22, 1, "MUSEUM~2.IMU"}, /* 22 */
+ {3, 1436, "stateMuseumSpire", 22, 2, "MUSEUM~3.IMU"}, /* 23 */
+ {3, 1440, "stateMuseumMuseum", 22, 2, "MUSEUM~4.IMU"}, /* 24 */
+ {3, 1450, "stateMuseumLibrary", 0, 0, "MUB575~5.IMU"}, /* 25 */
+ {3, 1460, "stateMuseumCavern", 0, 0, "MUF9BE~5.IMU"}, /* 26 */
+ {3, 1500, "stateTombTramNear", 0, 1, "TRAM(T~1.IMU"}, /* 27 */
+ {3, 1510, "stateTombBase", 28, 2, "TOMB(A~1.IMU"}, /* 28 */
+ {3, 1520, "stateTombSpire", 28, 2, "TOMB(A~2.IMU"}, /* 29 */
+ {3, 1530, "stateTombCave", 28, 2, "TOMB(A~3.IMU"}, /* 30 */
+ {3, 1540, "stateTombCrypt", 31, 1, "TOMB(C~1.IMU"}, /* 31 */
+ {3, 1550, "stateTombGuards", 31, 1, "TOMB(C~2.IMU"}, /* 32 */
+ {3, 1560, "stateTombInner", 0, 1, "TOMB(I~1.IMU"}, /* 33 */
+ {3, 1570, "stateTombCreator1", 0, 0, "TOMB(C~3.IMU"}, /* 34 */
+ {3, 1580, "stateTombCreator2", 0, 0, "TOMB(C~4.IMU"}, /* 35 */
+ {3, 1600, "statePlanTramNear", 0, 1, "TRAM(P~1.IMU"}, /* 36 */
+ {3, 1610, "statePlanTramFar", 0, 0, "TRAM(P~2.IMU"}, /* 37 */
+ {3, 1620, "statePlanBase", 38, 2, "PLAN(A~1.IMU"}, /* 38 */
+ {3, 1630, "statePlanSpire", 38, 2, "PLAN(A~2.IMU"}, /* 39 */
+ {3, 1650, "statePlanDome", 0, 0, "PLAN(D~1.IMU"}, /* 40 */
+ {3, 1700, "stateMapTramNear", 0, 1, "TRAM(M~3.IMU"}, /* 41 */
+ {3, 1710, "stateMapTramFar", 0, 0, "TRAM(M~4.IMU"}, /* 42 */
+ {3, 1720, "stateMapCanyon", 43, 2, "MAP(AM~1.IMU"}, /* 43 */
+ {3, 1730, "stateMapExposed", 43, 2, "MAP(AM~2.IMU"}, /* 44 */
+ {3, 1750, "stateMapNestEmpty", 43, 2, "MAP(AM~4.IMU"}, /* 45 */
+ {3, 1760, "stateMapNestMonster", 0, 0, "MAP(MO~1.IMU"}, /* 46 */
+ {3, 1770, "stateMapKlein", 0, 0, "MAP(KL~1.IMU"}, /* 47 */
+ {3, 1800, "stateCathTramNear", 0, 1, "TRAM(C~1.IMU"}, /* 48 */
+ {3, 1810, "stateCathTramFar", 0, 0, "TRAM(C~2.IMU"}, /* 49 */
+ {3, 1820, "stateCathLab", 50, 1, "CATH(A~1.IMU"}, /* 50 */
+ {3, 1830, "stateCathOutside", 50, 1, "CATH(A~2.IMU"}, /* 51 */
+ {3, 1900, "stateWorldMuseum", 52, 0, "WORLD(~1.IMU"}, /* 52 */
+ {3, 1901, "stateWorldPlan", 52, 0, "WORLD(~2.IMU"}, /* 53 */
+ {3, 1902, "stateWorldTomb", 52, 0, "WORLD(~3.IMU"}, /* 54 */
+ {3, 1903, "stateWorldMap", 52, 0, "WORLD(~4.IMU"}, /* 55 */
+ {3, 1904, "stateWorldCath", 52, 0, "WO3227~5.IMU"}, /* 56 */
+ {3, 1910, "stateEye1", 0, 0, "EYE1~1.IMU"}, /* 57 */
+ {3, 1911, "stateEye2", 0, 0, "EYE2~1.IMU"}, /* 58 */
+ {3, 1912, "stateEye3", 0, 0, "EYE3~1.IMU"}, /* 59 */
+ {3, 1913, "stateEye4", 0, 0, "EYE4~1.IMU"}, /* 60 */
+ {3, 1914, "stateEye5", 0, 0, "EYE5~1.IMU"}, /* 61 */
+ {3, 1915, "stateEye6", 0, 0, "EYE6~1.IMU"}, /* 62 */
+ {3, 1916, "stateEye7", 0, 0, "EYE7~1.IMU"}, /* 63 */
+ {0, -1, "", 0, 0, ""}
+};
+
+ writeRecord(_digStateMusicTable, sizeof(_digStateMusicTable), GBVARS_DIGSTATEMUSICTABLE_INDEX , GBVARS_SCUMM);
+}
+///////////////////////////////////////////////////////////////////
+static void addDimuseTables_comiStateMusicTable() {
+ imuseComiTable _comiStateMusicTable[] = {
+ {0, 1000, "STATE_NULL", 0, 0, 0, ""}, /* 00 */
+ {0, 1001, "stateNoChange", 0, 0, 0, ""}, /* 01 */
+ {3, 1098, "stateCredits1", 0, 0, 60, "1098-C~1.IMX"}, /* 02 */
+ {3, 1099, "stateMenu", 0, 0, 60, "1099-M~1.IMX"}, /* 03 */
+ {3, 1100, "stateHold1", 4, 0, 60, "1100-H~1.IMX"}, /* 04 */
+ {3, 1101, "stateWaterline1", 4, 0, 60, "1101-W~1.IMX"}, /* 05 */
+ {3, 1102, "stateHold2", 6, 1, 60, "1102-H~1.IMX"}, /* 06 */
+ {3, 1103, "stateWaterline2", 6, 0, 60, "1103-W~1.IMX"}, /* 07 */
+ {3, 1104, "stateCannon", 0, 0, 60, "1104-C~1.IMX"}, /* 08 */
+ {3, 1105, "stateTreasure", 0, 0, 60, "1105-T~1.IMX"}, /* 09 */
+ {3, 1200, "stateFortBase", 10, 1, 60, "1200-F~1.IMX"}, /* 10 */
+ {3, 1201, "statePreFort", 10, 1, 60, "1201-P~1.IMX"}, /* 11 */
+ {3, 1202, "statePreVooOut", 12, 0, 60, "1202-P~1.IMX"}, /* 12 */
+ {3, 1203, "statePreVooIn", 12, 0, 60, "1203-P~1.IMX"}, /* 13 */
+ {3, 1204, "statePreVooLady", 12, 0, 60, "1204-P~1.IMX"}, /* 14 */
+ {3, 1205, "stateVoodooOut", 0, 0, 60, "1205-V~1.IMX"}, /* 15 */
+ {3, 1210, "stateVoodooIn", 0, 0, 60, "1210-V~1.IMX"}, /* 16 */
+ {12,1212, "stateVoodooInAlt", 0, 1, 42, "1210-V~1.IMX"}, /* 17 */
+ {3, 1215, "stateVoodooLady", 0, 0, 60, "1215-V~1.IMX"}, /* 18 */
+ {3, 1219, "statePrePlundermap", 0, 0, 60, "1219-P~1.IMX"}, /* 19 */
+ {3, 1220, "statePlundermap", 0, 0, 60, "1220-P~1.IMX"}, /* 20 */
+ {3, 1222, "statePreCabana", 0, 0, 60, "1222-P~1.IMX"}, /* 21 */
+ {3, 1223, "stateCabana", 0, 0, 60, "1223-C~1.IMX"}, /* 22 */
+ {3, 1224, "statePostCabana", 23, 0, 60, "1224-P~1.IMX"}, /* 23 */
+ {3, 1225, "stateBeachClub", 23, 0, 60, "1225-B~1.IMX"}, /* 24 */
+ {3, 1230, "stateCliff", 0, 0, 60, "1230-C~1.IMX"}, /* 25 */
+ {3, 1232, "stateBelly", 0, 0, 48, "1232-B~1.IMX"}, /* 26 */
+ {3, 1235, "stateQuicksand", 0, 0, 60, "1235-Q~1.IMX"}, /* 27 */
+ {3, 1240, "stateDangerBeach", 0, 0, 48, "1240-D~1.IMX"}, /* 28 */
+ {12,1241, "stateDangerBeachAlt",0, 2, 48, "1240-D~1.IMX"}, /* 29 */
+ {3, 1245, "stateRowBoat", 0, 0, 60, "1245-R~1.IMX"}, /* 30 */
+ {3, 1247, "stateAlongside", 0, 0, 48, "1247-A~1.IMX"}, /* 31 */
+ {12,1248, "stateAlongsideAlt", 0, 1, 48, "1247-A~1.IMX"}, /* 32 */
+ {3, 1250, "stateChimpBoat", 0, 0, 30, "1250-C~1.IMX"}, /* 33 */
+ {3, 1255, "stateMrFossey", 0, 0, 48, "1255-M~1.IMX"}, /* 34 */
+ {3, 1259, "statePreTown", 0, 0, 60, "1259-P~1.IMX"}, /* 35 */
+ {3, 1260, "stateTown", 0, 0, 60, "1260-T~1.IMX"}, /* 36 */
+ {3, 1264, "statePreMeadow", 0, 0, 60, "1264-P~1.IMX"}, /* 37 */
+ {3, 1265, "stateMeadow", 0, 0, 60, "1265-M~1.IMX"}, /* 38 */
+ {3, 1266, "stateMeadowAmb", 0, 0, 60, "1266-M~1.IMX"}, /* 39 */
+ {3, 1270, "stateWardrobePre", 40, 0, 60, "1270-W~1.IMX"}, /* 40 */
+ {3, 1272, "statePreShow", 40, 0, 60, "1272-P~1.IMX"}, /* 41 */
+ {3, 1274, "stateWardrobeShow", 42, 0, 60, "1274-W~1.IMX"}, /* 42 */
+ {3, 1276, "stateShow", 42, 0, 60, "1276-S~1.IMX"}, /* 43 */
+ {3, 1277, "stateWardrobeJug", 44, 0, 60, "1277-W~1.IMX"}, /* 44 */
+ {3, 1278, "stateJuggling", 44, 0, 60, "1278-J~1.IMX"}, /* 45 */
+ {3, 1279, "statePostShow", 0, 0, 60, "1279-P~1.IMX"}, /* 46 */
+ {3, 1280, "stateChickenShop", 0, 0, 60, "1280-C~1.IMX"}, /* 47 */
+ {3, 1285, "stateBarberShop", 48, 0, 60, "1285-B~1.IMX"}, /* 48 */
+ {3, 1286, "stateVanHelgen", 48, 0, 60, "1286-V~1.IMX"}, /* 49 */
+ {3, 1287, "stateBill", 48, 0, 60, "1287-B~1.IMX"}, /* 50 */
+ {3, 1288, "stateHaggis", 48, 0, 60, "1288-H~1.IMX"}, /* 51 */
+ {3, 1289, "stateRottingham", 48, 0, 60, "1289-R~1.IMX"}, /* 52 */
+ {3, 1305, "stateDeck", 0, 0, 60, "1305-D~1.IMX"}, /* 53 */
+ {3, 1310, "stateCombatMap", 0, 0, 60, "1310-C~1.IMX"}, /* 54 */
+ {3, 1320, "stateShipCombat", 0, 0, 60, "1320-S~1.IMX"}, /* 55 */
+ {3, 1325, "stateSwordfight", 0, 0, 60, "1325-S~1.IMX"}, /* 56 */
+ {3, 1327, "stateSwordRott", 0, 0, 60, "1327-S~1.IMX"}, /* 57 */
+ {3, 1330, "stateTownEdge", 0, 0, 60, "1330-T~1.IMX"}, /* 58 */
+ {3, 1335, "stateSwordLose", 0, 0, 60, "1335-S~1.IMX"}, /* 59 */
+ {3, 1340, "stateSwordWin", 0, 0, 60, "1340-S~1.IMX"}, /* 60 */
+ {3, 1345, "stateGetMap", 0, 0, 60, "1345-G~1.IMX"}, /* 61 */
+ {3, 1400, "stateWreckBeach", 0, 0, 60, "1400-W~1.IMX"}, /* 62 */
+ {3, 1405, "stateBloodMap", 63, 0, 60, "1405-B~1.IMX"}, /* 63 */
+ {3, 1410, "stateClearing", 0, 0, 60, "1410-C~1.IMX"}, /* 64 */
+ {3, 1415, "stateLighthouse", 63, 0, 60, "1415-L~1.IMX"}, /* 65 */
+ {3, 1420, "stateVillage", 66, 0, 60, "1420-V~1.IMX"}, /* 66 */
+ {3, 1423, "stateVolcano", 66, 0, 60, "1423-V~1.IMX"}, /* 67 */
+ {3, 1425, "stateAltar", 66, 0, 60, "1425-A~1.IMX"}, /* 68 */
+ {3, 1430, "stateHotelOut", 0, 0, 60, "1430-H~1.IMX"}, /* 69 */
+ {3, 1435, "stateHotelBar", 70, 0, 60, "1435-H~1.IMX"}, /* 70 */
+ {3, 1440, "stateHotelIn", 70, 0, 60, "1440-H~1.IMX"}, /* 71 */
+ {3, 1445, "stateTarotLady", 70, 0, 60, "1445-T~1.IMX"}, /* 72 */
+ {3, 1447, "stateGoodsoup", 70, 0, 60, "1447-G~1.IMX"}, /* 73 */
+ {3, 1448, "stateGuestRoom", 0, 0, 60, "1448-G~1.IMX"}, /* 74 */
+ {3, 1450, "stateWindmill", 63, 0, 60, "1450-W~1.IMX"}, /* 75 */
+ {3, 1455, "stateCemetary", 0, 0, 60, "1455-C~1.IMX"}, /* 76 */
+ {3, 1460, "stateCrypt", 77, 0, 60, "1460-C~1.IMX"}, /* 77 */
+ {3, 1463, "stateGraveDigger", 77, 0, 60, "1463-G~1.IMX"}, /* 78 */
+ {3, 1465, "stateMonkey1", 0, 0, 60, "1465-M~1.IMX"}, /* 79 */
+ {3, 1475, "stateStanDark", 0, 0, 60, "1475-S~1.IMX"}, /* 80 */
+ {3, 1477, "stateStanLight", 0, 0, 60, "1477-S~1.IMX"}, /* 81 */
+ {3, 1480, "stateEggBeach", 63, 0, 60, "1480-E~1.IMX"}, /* 82 */
+ {3, 1485, "stateSkullIsland", 0, 0, 60, "1485-S~1.IMX"}, /* 83 */
+ {3, 1490, "stateSmugglersCave", 0, 0, 60, "1490-S~1.IMX"}, /* 84 */
+ {3, 1500, "stateLeChuckTalk", 0, 0, 60, "1500-L~1.IMX"}, /* 85 */
+ {3, 1505, "stateCarnival", 0, 0, 60, "1505-C~1.IMX"}, /* 86 */
+ {3, 1511, "stateHang", 87, 0, 60, "1511-H~1.IMX"}, /* 87 */
+ {3, 1512, "stateRum", 87, 0, 60, "1512-RUM.IMX"}, /* 88 */
+ {3, 1513, "stateTorture", 87, 0, 60, "1513-T~1.IMX"}, /* 89 */
+ {3, 1514, "stateSnow", 87, 0, 60, "1514-S~1.IMX"}, /* 90 */
+ {3, 1515, "stateCredits", 0, 0, 60, "1515-C~1.IMX"}, /* 91 */
+ {3, 1520, "stateCarnAmb", 0, 0, 60, "1520-C~1.IMX"}, /* 92 */
+ {0, -1, "", 0, 0, 0, ""}
+};
+
+ writeRecord(_comiStateMusicTable, sizeof(_comiStateMusicTable), GBVARS_COMISTATEMUSICTABLE_INDEX , GBVARS_SCUMM);
+}
+///////////////////////////////////////////////////////////////////
+static void addDimuseTables_comiSeqMusicTable() {
+ imuseComiTable _comiSeqMusicTable[] = {
+ {0, 2000, "SEQ_NULL", 0, 0, 0, ""},
+ {0, 2100, "seqINTRO", 0, 0, 0, ""},
+ {3, 2105, "seqInterlude1", 0, 0, 60, "2105-I~1.IMX"},
+ {8, 2110, "seqLastBoat", 0, 1, 0, ""},
+ {0, 2115, "seqSINK_SHIP", 0, 0, 0, ""},
+ {0, 2120, "seqCURSED_RING", 0, 0, 60, ""},
+ {3, 2200, "seqInterlude2", 0, 0, 60, "2200-I~1.IMX"},
+ {3, 2210, "seqKidnapped", 0, 0, 60, "2210-K~1.IMX"},
+ {8, 2220, "seqSnakeVomits", 0, 1, 0, ""},
+ {8, 2222, "seqPopBalloon", 0, 1, 0, ""},
+ {3, 2225, "seqDropBalls", 0, 0, 60, "2225-D~1.IMX"},
+ {4, 2232, "seqArriveBarber", 0, 0, 60, "2232-A~1.IMX"},
+ {3, 2233, "seqAtonal", 0, 0, 60, "2233-A~1.IMX"},
+ {3, 2235, "seqShaveHead1", 0, 0, 60, "2235-S~1.IMX"},
+ {2, 2236, "seqShaveHead2", 0, 2, 60, "2235-S~1.IMX"},
+ {3, 2245, "seqCaberLose", 0, 0, 60, "2245-C~1.IMX"},
+ {3, 2250, "seqCaberWin", 0, 0, 60, "2250-C~1.IMX"},
+ {3, 2255, "seqDuel1", 0, 0, 60, "2255-D~1.IMX"},
+ {2, 2256, "seqDuel2", 0, 2, 60, "2255-D~1.IMX"},
+ {2, 2257, "seqDuel3", 0, 3, 60, "2255-D~1.IMX"},
+ {3, 2260, "seqBlowUpTree1", 0, 0, 60, "2260-B~1.IMX"},
+ {2, 2261, "seqBlowUpTree2", 0, 2, 60, "2260-B~1.IMX"},
+ {3, 2275, "seqMonkeys", 0, 0, 60, "2275-M~1.IMX"},
+ {9, 2277, "seqAttack", 0, 1, 0, ""},
+ {3, 2285, "seqSharks", 0, 0, 60, "2285-S~1.IMX"},
+ {3, 2287, "seqTowelWalk", 0, 0, 60, "2287-T~1.IMX"},
+ {0, 2293, "seqNICE_BOOTS", 0, 0, 0, ""},
+ {0, 2295, "seqBIG_BONED", 0, 0, 0, ""},
+ {3, 2300, "seqToBlood", 0, 0, 60, "2300-T~1.IMX"},
+ {3, 2301, "seqInterlude3", 0, 0, 60, "2301-I~1.IMX"},
+ {3, 2302, "seqRott1", 0, 0, 60, "2302-R~1.IMX"},
+ {2, 2304, "seqRott2", 0, 2, 60, "2302-R~1.IMX"},
+ {2, 2305, "seqRott2b", 0,21, 60, "2302-R~1.IMX"},
+ {2, 2306, "seqRott3", 0, 3, 60, "2302-R~1.IMX"},
+ {2, 2308, "seqRott4", 0, 4, 60, "2302-R~1.IMX"},
+ {2, 2309, "seqRott5", 0, 5, 60, "2302-R~1.IMX"},
+ {3, 2311, "seqVerse1", 0, 0, 60, "2311-S~1.IMX"},
+ {2, 2312, "seqVerse2", 0, 2, 60, "2311-S~1.IMX"},
+ {2, 2313, "seqVerse3", 0, 3, 60, "2311-S~1.IMX"},
+ {2, 2314, "seqVerse4", 0, 4, 60, "2311-S~1.IMX"},
+ {2, 2315, "seqVerse5", 0, 5, 60, "2311-S~1.IMX"},
+ {2, 2316, "seqVerse6", 0, 6, 60, "2311-S~1.IMX"},
+ {2, 2317, "seqVerse7", 0, 7, 60, "2311-S~1.IMX"},
+ {2, 2318, "seqVerse8", 0, 8, 60, "2311-S~1.IMX"},
+ {2, 2319, "seqSongEnd", 0, 9, 60, "2311-S~1.IMX"},
+ {2, 2336, "seqRiposteLose", 0, 0, 60, "2336-R~1.IMX"},
+ {2, 2337, "seqRiposteWin", 0, 0, 60, "2337-R~1.IMX"},
+ {2, 2338, "seqInsultLose", 0, 0, 60, "2338-I~1.IMX"},
+ {2, 2339, "seqInsultWin", 0, 0, 60, "2339-I~1.IMX"},
+ {3, 2340, "seqSwordLose", 0, 0, 60, "1335-S~1.IMX"},
+ {3, 2345, "seqSwordWin", 0, 0, 60, "1340-S~1.IMX"},
+ {3, 2347, "seqGetMap", 0, 0, 60, "1345-G~1.IMX"},
+ {3, 2400, "seqInterlude4", 0, 0, 60, "2400-I~1.IMX"},
+ {0, 2405, "seqSHIPWRECK", 0, 0, 0, ""},
+ {3, 2408, "seqFakeCredits", 0, 0, 60, "2408-F~1.IMX"},
+ {3, 2410, "seqPassOut", 0, 0, 60, "2410-P~1.IMX"},
+ {3, 2414, "seqGhostTalk", 0, 0, 60, "2414-G~1.IMX"},
+ {2, 2415, "seqGhostWedding", 0, 1, 60, "2414-G~1.IMX"},
+ {3, 2420, "seqEruption", 0, 0, 60, "2420-E~1.IMX"},
+ {3, 2425, "seqSacrifice", 0, 0, 60, "2425-S~1.IMX"},
+ {2, 2426, "seqSacrificeEnd", 0, 1, 60, "2425-S~1.IMX"},
+ {3, 2430, "seqScareDigger", 0, 0, 60, "2430-S~1.IMX"},
+ {3, 2445, "seqSkullArrive", 0, 0, 60, "2445-S~1.IMX"},
+ {3, 2450, "seqFloat", 0, 0, 60, "2450-C~1.IMX"},
+ {2, 2451, "seqFall", 0, 1, 60, "2450-C~1.IMX"},
+ {2, 2452, "seqUmbrella", 0, 0, 60, "2450-C~1.IMX"},
+ {3, 2460, "seqFight", 0, 0, 60, "2460-F~1.IMX"},
+ {0, 2465, "seqLAVE_RIDE", 0, 0, 0, ""},
+ {0, 2470, "seqMORE_SLAW", 0, 0, 0, ""},
+ {0, 2475, "seqLIFT_CURSE", 0, 0, 0, ""},
+ {3, 2500, "seqInterlude5", 0, 0, 60, "2500-I~1.IMX"},
+ {3, 2502, "seqExitSkycar", 0, 0, 60, "2502-E~1.IMX"},
+ {3, 2504, "seqGrow1", 0, 0, 60, "2504-G~1.IMX"},
+ {2, 2505, "seqGrow2", 0, 1, 60, "2504-G~1.IMX"},
+ {3, 2508, "seqInterlude6", 0, 0, 60, "2508-I~1.IMX"},
+ {0, 2515, "seqFINALE", 0, 0, 0, ""},
+ {3, 2520, "seqOut", 0, 0, 60, "2520-OUT.IMX"},
+ {3, 2530, "seqZap1a", 0, 0, 60, "2530-Z~1.IMX"},
+ {2, 2531, "seqZap1b", 0, 1, 60, "2530-Z~1.IMX"},
+ {2, 2532, "seqZap1c", 0, 2, 60, "2530-Z~1.IMX"},
+ {2, 2540, "seqZap2a", 0, 0, 60, "2540-Z~1.IMX"},
+ {2, 2541, "seqZap2b", 0, 1, 60, "2540-Z~1.IMX"},
+ {2, 2542, "seqZap2c", 0, 2, 60, "2540-Z~1.IMX"},
+ {3, 2550, "seqZap3a", 0, 0, 60, "2550-Z~1.IMX"},
+ {2, 2551, "seqZap3b", 0, 1, 60, "2550-Z~1.IMX"},
+ {2, 2552, "seqZap3c", 0, 2, 60, "2550-Z~1.IMX"},
+ {3, 2560, "seqZap4a", 0, 0, 60, "2560-Z~1.IMX"},
+ {2, 2561, "seqZap4b", 0, 1, 60, "2560-Z~1.IMX"},
+ {2, 2562, "seqZap4c", 0, 2, 60, "2560-Z~1.IMX"},
+ {0, -1, "", 0, 0, 0, ""}
+};
+
+ writeRecord(_comiSeqMusicTable, sizeof(_comiSeqMusicTable), GBVARS_COMISEQMUSICTABLE_INDEX ,GBVARS_SCUMM);
+}
+///////////////////////////////////////////////////////////////////
+static void addDimuseTables_digSeqMusicTable() {
+
+ imuseDigTable _digSeqMusicTable[] = {
+ {0, 2000, "SEQ_NULL", 0, 0, ""},
+ {0, 2005, "seqLogo", 0, 0, ""},
+ {0, 2010, "seqIntro", 0, 0, ""},
+ {6, 2020, "seqExplosion1b", 0, 0, ""},
+ {3, 2030, "seqAstTunnel1a", 0, 0, "SEQ(AS~1.IMU"},
+ {6, 2031, "seqAstTunnel2b", 0, 0, ""},
+ {4, 2032, "seqAstTunnel3a", 0, 0, "SEQ(AS~2.IMU"},
+ {5, 2040, "seqToPlanet1b", 0, 0, ""},
+ {4, 2045, "seqArgBegin", 0, 0, "SEQ(AR~1.IMU"},
+ {4, 2046, "seqArgEnd", 0, 0, "SEQ(AR~2.IMU"},
+ {4, 2050, "seqWreckGhost", 0, 0, "SEQ(GH~1.IMU"},
+ {4, 2060, "seqCanyonGhost", 0, 0, "SEQ(GH~2.IMU"},
+ {0, 2070, "seqBrinkFall", 0, 0, ""},
+ {4, 2080, "seqPanUpCanyon", 0, 0, "SEQ(PA~1.IMU"},
+ {6, 2091, "seqAirlockTunnel1b", 0, 0, ""},
+ {6, 2100, "seqTramToMu", 0, 0, ""},
+ {6, 2101, "seqTramFromMu", 0, 0, ""},
+ {6, 2102, "seqTramToTomb", 0, 0, ""},
+ {6, 2103, "seqTramFromTomb", 0, 0, ""},
+ {6, 2104, "seqTramToPlan", 0, 0, ""},
+ {6, 2105, "seqTramFromPlan", 0, 0, ""},
+ {6, 2106, "seqTramToMap", 0, 0, ""},
+ {6, 2107, "seqTramFromMap", 0, 0, ""},
+ {6, 2108, "seqTramToCath", 0, 0, ""},
+ {6, 2109, "seqTramFromCath", 0, 0, ""},
+ {0, 2110, "seqMuseumGhost", 0, 0, ""},
+ {0, 2120, "seqSerpentAppears", 0, 0, ""},
+ {0, 2130, "seqSerpentEats", 0, 0, ""},
+ {6, 2140, "seqBrinkRes1b", 0, 0, ""},
+ {4, 2141, "seqBrinkRes2a", 0, 0, "SEQ(BR~1.IMU"},
+ {3, 2150, "seqLockupEntry", 0, 0, "SEQ(BR~1.IMU"},
+ {0, 2160, "seqSerpentExplodes", 0, 0, ""},
+ {4, 2170, "seqSwimUnderwater", 0, 0, "SEQ(DE~1.IMU"},
+ {4, 2175, "seqWavesPlunge", 0, 0, "SEQ(PL~1.IMU"},
+ {0, 2180, "seqCryptOpens", 0, 0, ""},
+ {0, 2190, "seqGuardsFight", 0, 0, ""},
+ {3, 2200, "seqCreatorRes1.1a", 0, 0, "SEQ(CR~1.IMU"},
+ {6, 2201, "seqCreatorRes1.2b", 0, 0, ""},
+ {6, 2210, "seqMaggieCapture1b", 0, 0, ""},
+ {3, 2220, "seqStealCrystals", 0, 0, "SEQ(BR~1.IMU"},
+ {0, 2230, "seqGetByMonster", 0, 0, ""},
+ {6, 2240, "seqKillMonster1b", 0, 0, ""},
+ {3, 2250, "seqCreatorRes2.1a", 0, 0, "SEQ(CR~2.IMU"},
+ {6, 2251, "seqCreatorRes2.2b", 0, 0, ""},
+ {4, 2252, "seqCreatorRes2.3a", 0, 0, "SEQ(CR~3.IMU"},
+ {0, 2260, "seqMaggieInsists", 0, 0, ""},
+ {0, 2270, "seqBrinkHelpCall", 0, 0, ""},
+ {3, 2280, "seqBrinkCrevice1a", 0, 0, "SEQ(BR~2.IMU"},
+ {3, 2281, "seqBrinkCrevice2a", 0, 0, "SEQ(BR~3.IMU"},
+ {6, 2290, "seqCathAccess1b", 0, 0, ""},
+ {4, 2291, "seqCathAccess2a", 0, 0, "SEQ(CA~1.IMU"},
+ {3, 2300, "seqBrinkAtGenerator", 0, 0, "SEQ(BR~1.IMU"},
+ {6, 2320, "seqFightBrink1b", 0, 0, ""},
+ {6, 2340, "seqMaggieDies1b", 0, 0, ""},
+ {6, 2346, "seqMaggieRes1b", 0, 0, ""},
+ {4, 2347, "seqMaggieRes2a", 0, 0, "SEQ(MA~1.IMU"},
+ {0, 2350, "seqCreatureFalls", 0, 0, ""},
+ {5, 2360, "seqFinale1b", 0, 0, ""},
+ {3, 2370, "seqFinale2a", 0, 0, "SEQ(FI~1.IMU"},
+ {6, 2380, "seqFinale3b1", 0, 0, ""},
+ {6, 2390, "seqFinale3b2", 0, 0, ""},
+ {3, 2400, "seqFinale4a", 0, 0, "SEQ(FI~2.IMU"},
+ {3, 2410, "seqFinale5a", 0, 0, "SEQ(FI~3.IMU"},
+ {3, 2420, "seqFinale6a", 0, 0, "SEQ(FI~4.IMU"},
+ {3, 2430, "seqFinale7a", 0, 0, "SE3D2B~5.IMU"},
+ {6, 2440, "seqFinale8b", 0, 0, ""},
+ {4, 2450, "seqFinale9a", 0, 0, "SE313B~5.IMU"},
+ {0, -1, "", 0, 0, ""}
+};
+
+ writeRecord(_digSeqMusicTable, sizeof(_digSeqMusicTable), GBVARS_DIGSEQMUSICTABLE_INDEX ,GBVARS_SCUMM);
+}
+///////////////////////////////////////////////////////////////////
+static void addDimuseTables_ftStateMusicTable() {
+
+ imuseFtStateTable _ftStateMusicTable[] = {
+ {"", 0, 0, "STATE_NULL" },
+ {"", 4, 127, "stateKstandOutside" },
+ {"kinside", 2, 127, "stateKstandInside" },
+ {"moshop", 3, 64, "stateMoesInside" },
+ {"melcut", 2, 127, "stateMoesOutside" },
+ {"mellover", 2, 127, "stateMellonAbove" },
+ {"radloop", 3, 28, "stateTrailerOutside" },
+ {"radloop", 3, 58, "stateTrailerInside" },
+ {"radloop", 3, 127, "stateTodShop" },
+ {"junkgate", 2, 127, "stateJunkGate" },
+ {"junkover", 3, 127, "stateJunkAbove" },
+ {"gastower", 2, 127, "stateGasTower" },
+ {"", 4, 0, "stateTowerAlarm" },
+ {"melcut", 2, 127, "stateCopsOnGround" },
+ {"melcut", 2, 127, "stateCopsAround" },
+ {"melcut", 2, 127, "stateMoesRuins" },
+ {"melcut", 2, 127, "stateKstandNight" },
+ {"trukblu2", 2, 127, "stateTruckerTalk" },
+ {"stretch", 2, 127, "stateMumblyPeg" },
+ {"kstand", 2, 100, "stateRanchOutside" },
+ {"kinside", 2, 127, "stateRanchInside" },
+ {"desert", 2, 127, "stateWreckedTruck" },
+ {"opening", 2, 100, "stateGorgeVista" },
+ {"caveopen", 2, 127, "stateCaveOpen" },
+ {"cavecut1", 2, 127, "stateCaveOuter" },
+ {"cavecut1", 1, 127, "stateCaveMiddle" },
+ {"cave", 2, 127, "stateCaveInner" },
+ {"corville", 2, 127, "stateCorvilleFront" },
+ {"mines", 2, 127, "stateMineField" },
+ {"bunyman3", 2, 127, "stateBunnyStore" },
+ {"stretch", 2, 127, "stateStretchBen" },
+ {"saveme", 2, 127, "stateBenPleas" },
+ {"", 4, 0, "stateBenConvinces" },
+ {"derby", 3, 127, "stateDemoDerby" },
+ {"fire", 3, 127, "stateLightMyFire" },
+ {"derby", 3, 127, "stateDerbyChase" },
+ {"carparts", 2, 127, "stateVultureCarParts"},
+ {"cavecut1", 2, 127, "stateVulturesInside" },
+ {"mines", 2, 127, "stateFactoryRear" },
+ {"croffice", 2, 127, "stateCorleyOffice" },
+ {"melcut", 2, 127, "stateCorleyHall" },
+ {"", 4, 0, "stateProjRoom" },
+ {"", 4, 0, "stateMMRoom" },
+ {"bumper", 2, 127, "stateBenOnBumper" },
+ {"benump", 2, 127, "stateBenOnBack" },
+ {"plane", 2, 127, "stateInCargoPlane" },
+ {"saveme", 2, 127, "statePlaneControls" },
+ {"", 4, 0, "stateCliffHanger1" },
+ {"", 4, 0, "stateCliffHanger2" },
+};
+
+ writeRecord(_ftStateMusicTable, sizeof(_ftStateMusicTable), GBVARS_FTSTATEMUSICTABLE_INDEX , GBVARS_SCUMM);
+}
+///////////////////////////////////////////////////////////////////
+static void addDimuseTables_ftSeqMusicTable() {
+
+ imuseFtSeqTable _ftSeqMusicTable[] = {
+ {"", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"opening", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"barbeat", 2, 127},
+ {"barwarn", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0, },
+
+ {"benwakes", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"barwarn", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"swatben", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"dogattak", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"", 4, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"", 4, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"cops2", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"cops2", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"cops2", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"bunymrch", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"", 4, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"", 0, 0 },
+ {"melcut", 2, 127},
+ {"tada", 2, 127},
+ {"", 0, 0 },
+
+ {"", 4, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"trucker", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"cops2", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"barwarn", 2, 127},
+ {"murder", 2, 127},
+ {"murder2", 2, 127},
+ {"", 0, 0 },
+
+ {"corldie", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"barwarn", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"picture", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"ripintro", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"trucker", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"hosed", 2, 127},
+
+ {"ripdead", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"nesranch", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"scolding", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"desert", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"cavecut1", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"caveamb", 2, 80 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"castle", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"bunymrch", 2, 105},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"valkyrs", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"melcut", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"veltures", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"sorry", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"makeplan", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"castle", 2, 127},
+ {"derby", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"fire", 3, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"saveme", 3, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"scolding", 2, 127},
+
+ {"cops2", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"sorry", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"sorry", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"caveamb", 2, 85 },
+ {"tada", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"expose", 2, 127},
+ {"", 4, 0 },
+ {"", 0, 0 },
+ {"mocoup", 2, 127},
+
+ {"ripscram", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"valkyrs", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"ripdead", 2, 127},
+ {"", 0, 0 },
+ {"", 0, 0 },
+ {"", 0, 0 },
+
+ {"funeral", 2, 127},
+ {"", 2, 127},
+ {"moshop", 3, 64 },
+ {"", 0, 0 },
+
+ {"bornbad", 2, 127},
+ {"hammvox", 2, 127},
+ {"legavox", 2, 127},
+ {"chances", 2, 90 },
+};
+ writeRecord(_ftSeqMusicTable, sizeof(_ftSeqMusicTable), GBVARS_FTSEQMUSICTABLE_INDEX , GBVARS_SCUMM);
+}
+
+static void addDimuseTables_ftSeqNames() {
+ imuseFtNames _ftSeqNames[] = {
+ {"SEQ_NULL" },
+ {"seqLogo" },
+ {"seqOpenFlick" },
+ {"seqBartender" },
+ {"seqBenWakes" },
+ {"seqPhotoScram" },
+ {"seqClimbChain" },
+ {"seqDogChase" },
+ {"seqDogSquish" },
+ {"seqDogHoist" },
+ {"seqCopsArrive" },
+ {"seqCopsLand" },
+ {"seqCopsLeave" },
+ {"seqCopterFlyby" },
+ {"seqCopterCrash" },
+ {"seqMoGetsParts" },
+ {"seqMoFixesBike" },
+ {"seqFirstGoodbye" },
+ {"seqCopRoadblock" },
+ {"seqDivertCops" },
+ {"seqMurder" },
+ {"seqCorleyDies" },
+ {"seqTooLateAtMoes" },
+ {"seqPicture" },
+ {"seqNewsReel" },
+ {"seqCopsInspect" },
+ {"seqHijack" },
+ {"seqNestolusAtRanch" },
+ {"seqRipLimo" },
+ {"seqGorgeTurn" },
+ {"seqCavefishTalk" },
+ {"seqArriveCorville" },
+ {"seqSingleBunny" },
+ {"seqBunnyArmy" },
+ {"seqArriveAtMines" },
+ {"seqArriveAtVultures"},
+ {"seqMakePlan" },
+ {"seqShowPlan" },
+ {"seqDerbyStart" },
+ {"seqLightBales" },
+ {"seqNestolusBBQ" },
+ {"seqCallSecurity" },
+ {"seqFilmFail" },
+ {"seqFilmBurn" },
+ {"seqRipSpeech" },
+ {"seqExposeRip" },
+ {"seqRipEscape" },
+ {"seqRareMoment" },
+ {"seqFanBunnies" },
+ {"seqRipDead" },
+ {"seqFuneral" },
+ {"seqCredits" }
+};
+ writeRecord(_ftSeqNames, sizeof(_ftSeqNames), GBVARS_FTSEQNAMES_INDEX , GBVARS_SCUMM);
+}
+
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+
+void addDimuseTables() {
+ addDimuseTables_digStateMusicMap();
+ addDimuseTables_digStateMusicTable();
+ addDimuseTables_digSeqMusicTable();
+ addDimuseTables_comiStateMusicTable();
+ addDimuseTables_comiSeqMusicTable();
+ addDimuseTables_ftStateMusicTable();
+ addDimuseTables_ftSeqMusicTable();
+ addDimuseTables_ftSeqNames();
+} \ No newline at end of file
diff --git a/backends/platform/PalmOS/Src/builder/scumm/smush/bl_codec47.c b/backends/platform/PalmOS/Src/builder/scumm/smush/bl_codec47.c
new file mode 100644
index 0000000000..8a3f3e1b99
--- /dev/null
+++ b/backends/platform/PalmOS/Src/builder/scumm/smush/bl_codec47.c
@@ -0,0 +1,63 @@
+#include <PalmOS.h>
+#include "b_globals.h"
+
+static void addCodec47_codec47_table() {
+ Int8 codec47_table[] = {
+ 0, 0, -1, -43, 6, -43, -9, -42, 13, -41,
+ -16, -40, 19, -39, -23, -36, 26, -34, -2, -33,
+ 4, -33, -29, -32, -9, -32, 11, -31, -16, -29,
+ 32, -29, 18, -28, -34, -26, -22, -25, -1, -25,
+ 3, -25, -7, -24, 8, -24, 24, -23, 36, -23,
+ -12, -22, 13, -21, -38, -20, 0, -20, -27, -19,
+ -4, -19, 4, -19, -17, -18, -8, -17, 8, -17,
+ 18, -17, 28, -17, 39, -17, -12, -15, 12, -15,
+ -21, -14, -1, -14, 1, -14, -41, -13, -5, -13,
+ 5, -13, 21, -13, -31, -12, -15, -11, -8, -11,
+ 8, -11, 15, -11, -2, -10, 1, -10, 31, -10,
+ -23, -9, -11, -9, -5, -9, 4, -9, 11, -9,
+ 42, -9, 6, -8, 24, -8, -18, -7, -7, -7,
+ -3, -7, -1, -7, 2, -7, 18, -7, -43, -6,
+ -13, -6, -4, -6, 4, -6, 8, -6, -33, -5,
+ -9, -5, -2, -5, 0, -5, 2, -5, 5, -5,
+ 13, -5, -25, -4, -6, -4, -3, -4, 3, -4,
+ 9, -4, -19, -3, -7, -3, -4, -3, -2, -3,
+ -1, -3, 0, -3, 1, -3, 2, -3, 4, -3,
+ 6, -3, 33, -3, -14, -2, -10, -2, -5, -2,
+ -3, -2, -2, -2, -1, -2, 0, -2, 1, -2,
+ 2, -2, 3, -2, 5, -2, 7, -2, 14, -2,
+ 19, -2, 25, -2, 43, -2, -7, -1, -3, -1,
+ -2, -1, -1, -1, 0, -1, 1, -1, 2, -1,
+ 3, -1, 10, -1, -5, 0, -3, 0, -2, 0,
+ -1, 0, 1, 0, 2, 0, 3, 0, 5, 0,
+ 7, 0, -10, 1, -7, 1, -3, 1, -2, 1,
+ -1, 1, 0, 1, 1, 1, 2, 1, 3, 1,
+ -43, 2, -25, 2, -19, 2, -14, 2, -5, 2,
+ -3, 2, -2, 2, -1, 2, 0, 2, 1, 2,
+ 2, 2, 3, 2, 5, 2, 7, 2, 10, 2,
+ 14, 2, -33, 3, -6, 3, -4, 3, -2, 3,
+ -1, 3, 0, 3, 1, 3, 2, 3, 4, 3,
+ 19, 3, -9, 4, -3, 4, 3, 4, 7, 4,
+ 25, 4, -13, 5, -5, 5, -2, 5, 0, 5,
+ 2, 5, 5, 5, 9, 5, 33, 5, -8, 6,
+ -4, 6, 4, 6, 13, 6, 43, 6, -18, 7,
+ -2, 7, 0, 7, 2, 7, 7, 7, 18, 7,
+ -24, 8, -6, 8, -42, 9, -11, 9, -4, 9,
+ 5, 9, 11, 9, 23, 9, -31, 10, -1, 10,
+ 2, 10, -15, 11, -8, 11, 8, 11, 15, 11,
+ 31, 12, -21, 13, -5, 13, 5, 13, 41, 13,
+ -1, 14, 1, 14, 21, 14, -12, 15, 12, 15,
+ -39, 17, -28, 17, -18, 17, -8, 17, 8, 17,
+ 17, 18, -4, 19, 0, 19, 4, 19, 27, 19,
+ 38, 20, -13, 21, 12, 22, -36, 23, -24, 23,
+ -8, 24, 7, 24, -3, 25, 1, 25, 22, 25,
+ 34, 26, -18, 28, -32, 29, 16, 29, -11, 31,
+ 9, 32, 29, 32, -4, 33, 2, 33, -26, 34,
+ 23, 36, -19, 39, 16, 40, -13, 41, 9, 42,
+ -6, 43, 1, 43, 0, 0, 0, 0, 0, 0
+};
+ writeRecord(codec47_table, sizeof(codec47_table), GBVARS_CODEC47TABLE_INDEX , GBVARS_SCUMM);
+}
+
+void addCodec47() {
+ addCodec47_codec47_table();
+} \ No newline at end of file
diff --git a/backends/platform/PalmOS/Src/builder/simon/bs_charset.c b/backends/platform/PalmOS/Src/builder/simon/bs_charset.c
new file mode 100644
index 0000000000..662884682f
--- /dev/null
+++ b/backends/platform/PalmOS/Src/builder/simon/bs_charset.c
@@ -0,0 +1,745 @@
+#include <PalmOS.h>
+#include "b_globals.h"
+
+static void addCharset_russian_video_font() {
+ byte russian_video_font[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 32, 112, 112, 32, 32, 0, 32, 0,
+ 48, 48, 96, 0, 0, 0, 0, 0,
+ 0, 0, 100, 40, 48, 40, 100, 0,
+ 0, 0, 96, 48, 40, 40, 112, 0,
+ 60, 68, 68, 60, 36, 68, 68, 0,
+ 0, 16, 40, 16, 42, 68, 58, 0,
+ 48, 48, 96, 0, 0, 0, 0, 0,
+ 0, 4, 8, 8, 8, 8, 4, 0,
+ 0, 32, 16, 16, 16, 16, 32, 0,
+ 72, 84, 84, 116, 84, 84, 72, 0,
+ 0, 0, 60, 68, 60, 36, 100, 0,
+ 0, 0, 0, 0, 0, 48, 48, 96,
+ 0, 0, 0, 240, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 48, 48, 0,
+ 16, 32, 0, 120, 112, 64, 56, 0,
+ 112, 136, 152, 168, 200, 136, 112, 0,
+ 32, 96, 32, 32, 32, 32, 112, 0,
+ 112, 136, 8, 48, 64, 136, 248, 0,
+ 112, 136, 8, 48, 8, 136, 112, 0,
+ 16, 48, 80, 144, 248, 16, 56, 0,
+ 248, 128, 240, 8, 8, 136, 112, 0,
+ 48, 64, 128, 240, 136, 136, 112, 0,
+ 248, 136, 8, 16, 32, 32, 32, 0,
+ 112, 136, 136, 112, 136, 136, 112, 0,
+ 112, 136, 136, 120, 8, 16, 96, 0,
+ 0, 0, 48, 48, 0, 48, 48, 0,
+ 32, 16, 0, 112, 8, 248, 120, 0,
+ 0, 0, 96, 48, 40, 40, 112, 0,
+ 0, 0, 112, 88, 20, 20, 56, 0,
+ 0, 0, 120, 4, 28, 4, 120, 0,
+ 112, 136, 8, 16, 32, 0, 32, 0,
+ 0, 0, 84, 84, 84, 84, 56, 4,
+ 56, 68, 68, 124, 68, 68, 68, 0,
+ 124, 36, 32, 56, 36, 36, 120, 0,
+ 120, 36, 36, 56, 36, 36, 120, 0,
+ 124, 36, 32, 32, 32, 32, 112, 0,
+ 56, 40, 40, 40, 40, 40, 124, 68,
+ 124, 36, 32, 56, 32, 36, 124, 0,
+ 84, 84, 84, 56, 84, 84, 84, 0,
+ 56, 68, 4, 24, 4, 68, 56, 0,
+ 68, 68, 76, 84, 100, 68, 68, 0,
+ 100, 40, 40, 48, 40, 36, 100, 0,
+ 28, 36, 36, 36, 36, 36, 100, 0,
+ 68, 108, 84, 68, 68, 68, 68, 0,
+ 68, 68, 68, 124, 68, 68, 68, 0,
+ 56, 68, 68, 68, 68, 68, 56, 0,
+ 124, 68, 68, 68, 68, 68, 68, 0,
+ 120, 36, 36, 56, 32, 32, 112, 0,
+ 56, 68, 64, 64, 64, 68, 56, 0,
+ 124, 84, 16, 16, 16, 16, 56, 0,
+ 100, 36, 36, 28, 4, 4, 56, 0,
+ 56, 84, 84, 84, 56, 16, 56, 0,
+ 108, 40, 16, 16, 40, 40, 108, 0,
+ 72, 72, 72, 72, 72, 72, 60, 4,
+ 76, 72, 72, 56, 8, 8, 28, 0,
+ 84, 84, 84, 84, 84, 84, 60, 0,
+ 84, 84, 84, 84, 84, 84, 56, 4,
+ 56, 68, 4, 28, 4, 68, 56, 0,
+ 0, 0, 68, 100, 84, 84, 100, 0,
+ 0, 0, 72, 84, 116, 84, 72, 0,
+ 0, 0, 60, 68, 60, 36, 100, 0,
+ 0, 0, 120, 4, 24, 4, 120, 0,
+ 0, 0, 100, 40, 48, 40, 100, 0,
+ 60, 68, 68, 60, 36, 68, 68, 0,
+ 0, 0, 56, 4, 60, 68, 60, 0,
+ 60, 64, 32, 56, 68, 68, 56, 0,
+ 48, 72, 80, 120, 68, 68, 56, 0,
+ 0, 0, 120, 4, 56, 64, 60, 0,
+ 56, 4, 4, 60, 68, 68, 56, 0,
+ 0, 0, 56, 68, 120, 64, 56, 0,
+ 40, 0, 56, 68, 120, 64, 56, 0,
+ 0, 0, 84, 84, 56, 84, 84, 0,
+ 64, 0, 192, 64, 64, 64, 224, 0,
+ 0, 0, 68, 68, 68, 68, 60, 0,
+ 56, 0, 68, 68, 68, 68, 60, 0,
+ 192, 64, 64, 64, 64, 64, 224, 0,
+ 0, 0, 28, 36, 36, 36, 100, 0,
+ 0, 0, 68, 108, 84, 68, 68, 0,
+ 0, 0, 56, 68, 68, 68, 56, 0,
+ 0, 0, 68, 68, 124, 68, 68, 0,
+ 0, 0, 124, 68, 68, 68, 68, 0,
+ 0, 0, 120, 36, 36, 56, 32, 112,
+ 0, 0, 60, 64, 64, 64, 60, 0,
+ 0, 0, 124, 84, 16, 16, 56, 0,
+ 0, 0, 68, 68, 60, 4, 56, 0,
+ 48, 16, 56, 84, 84, 56, 16, 56,
+ 0, 0, 68, 40, 16, 40, 68, 0,
+ 0, 0, 72, 72, 72, 72, 60, 4,
+ 0, 0, 76, 72, 72, 56, 8, 28,
+ 0, 0, 84, 84, 84, 84, 60, 0,
+ 32, 80, 0, 96, 144, 144, 96, 0,
+ 0, 14, 8, 48, 8, 8, 14, 0,
+ 0, 8, 8, 8, 8, 8, 8, 0,
+ 0, 112, 16, 12, 16, 16, 112, 0,
+ 0, 0, 0, 0, 0, 0, 248, 0,
+ 252, 252, 252, 252, 252, 252, 252, 252,
+ 240, 240, 240, 240, 240, 240, 240, 240,
+ };
+ writeRecord(russian_video_font, sizeof(russian_video_font), GBVARS_RUSSIANVIDEOFONT_INDEX , GBVARS_SIMON);
+}
+
+static void addCharset_french_video_font() {
+ byte french_video_font[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 32, 112, 112, 32, 32, 0, 32, 0,
+ 48, 48, 96, 0, 0, 0, 0, 0,
+ 32, 80, 0, 112, 136, 136, 112, 0,
+ 32, 80, 0, 112, 8, 248, 120, 0,
+ 112, 136, 128, 128, 136, 112, 32, 96,
+ 0, 16, 40, 16, 42, 68, 58, 0,
+ 48, 48, 96, 0, 0, 0, 0, 0,
+ 0, 4, 8, 8, 8, 8, 4, 0,
+ 0, 32, 16, 16, 16, 16, 32, 0,
+ 0, 0, 20, 8, 62, 8, 20, 0,
+ 112, 136, 128, 128, 136, 112, 32, 96,
+ 0, 0, 0, 0, 0, 48, 48, 96,
+ 0, 0, 0, 240, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 48, 48, 0,
+ 32, 64, 0, 112, 248, 128, 112, 0,
+ 112, 136, 152, 168, 200, 136, 112, 0,
+ 32, 96, 32, 32, 32, 32, 112, 0,
+ 112, 136, 8, 48, 64, 136, 248, 0,
+ 112, 136, 8, 48, 8, 136, 112, 0,
+ 16, 48, 80, 144, 248, 16, 56, 0,
+ 248, 128, 240, 8, 8, 136, 112, 0,
+ 48, 64, 128, 240, 136, 136, 112, 0,
+ 248, 136, 8, 16, 32, 32, 32, 0,
+ 112, 136, 136, 112, 136, 136, 112, 0,
+ 112, 136, 136, 120, 8, 16, 96, 0,
+ 0, 0, 48, 48, 0, 48, 48, 0,
+ 32, 16, 0, 112, 8, 248, 120, 0,
+ 32, 80, 0, 144, 144, 144, 104, 0,
+ 32, 16, 0, 112, 248, 128, 112, 0,
+ 32, 80, 0, 112, 248, 128, 112, 0,
+ 112, 136, 8, 16, 32, 0, 32, 0,
+ 32, 80, 0, 192, 64, 64, 224, 0,
+ 112, 136, 136, 248, 136, 136, 136, 0,
+ 240, 72, 72, 112, 72, 72, 240, 0,
+ 48, 72, 128, 128, 128, 72, 48, 0,
+ 224, 80, 72, 72, 72, 80, 224, 0,
+ 248, 72, 64, 112, 64, 72, 248, 0,
+ 248, 72, 64, 112, 64, 64, 224, 0,
+ 48, 72, 128, 152, 136, 72, 56, 0,
+ 136, 136, 136, 248, 136, 136, 136, 0,
+ 248, 32, 32, 32, 32, 32, 248, 0,
+ 24, 8, 8, 8, 136, 136, 112, 0,
+ 200, 72, 80, 96, 80, 72, 200, 0,
+ 224, 64, 64, 64, 64, 72, 248, 0,
+ 136, 216, 168, 168, 136, 136, 136, 0,
+ 136, 200, 168, 152, 136, 136, 136, 0,
+ 112, 136, 136, 136, 136, 136, 112, 0,
+ 240, 72, 72, 112, 64, 64, 224, 0,
+ 112, 136, 136, 136, 136, 168, 112, 8,
+ 240, 72, 72, 112, 72, 72, 200, 0,
+ 112, 136, 128, 112, 8, 136, 112, 0,
+ 248, 168, 32, 32, 32, 32, 112, 0,
+ 136, 136, 136, 136, 136, 136, 120, 0,
+ 136, 136, 136, 80, 80, 32, 32, 0,
+ 136, 136, 136, 136, 168, 216, 136, 0,
+ 136, 136, 80, 32, 80, 136, 136, 0,
+ 136, 136, 136, 112, 32, 32, 112, 0,
+ 248, 136, 16, 32, 64, 136, 248, 0,
+ 0, 14, 8, 8, 8, 8, 14, 0,
+ 0, 128, 64, 32, 16, 8, 4, 0,
+ 0, 112, 16, 16, 16, 16, 112, 0,
+ 0, 0, 112, 136, 128, 112, 32, 96,
+ 160, 0, 192, 64, 64, 64, 224, 0,
+ 32, 16, 0, 144, 144, 144, 104, 0,
+ 0, 0, 112, 8, 120, 136, 120, 0,
+ 192, 64, 80, 104, 72, 72, 112, 0,
+ 0, 0, 112, 136, 128, 136, 112, 0,
+ 24, 16, 80, 176, 144, 144, 112, 0,
+ 0, 0, 112, 136, 248, 128, 112, 0,
+ 48, 72, 64, 224, 64, 64, 224, 0,
+ 0, 0, 104, 144, 144, 112, 136, 112,
+ 192, 64, 80, 104, 72, 72, 200, 0,
+ 64, 0, 192, 64, 64, 64, 224, 0,
+ 8, 0, 8, 8, 8, 8, 136, 112,
+ 192, 64, 72, 80, 96, 80, 200, 0,
+ 192, 64, 64, 64, 64, 64, 224, 0,
+ 0, 0, 144, 216, 168, 136, 136, 0,
+ 0, 0, 240, 136, 136, 136, 136, 0,
+ 0, 0, 112, 136, 136, 136, 112, 0,
+ 0, 0, 176, 72, 72, 112, 64, 224,
+ 0, 0, 104, 144, 144, 112, 16, 56,
+ 0, 0, 176, 72, 72, 64, 224, 0,
+ 0, 0, 120, 128, 112, 8, 240, 0,
+ 64, 64, 240, 64, 64, 72, 48, 0,
+ 0, 0, 144, 144, 144, 144, 104, 0,
+ 0, 0, 136, 136, 136, 80, 32, 0,
+ 0, 0, 136, 136, 168, 216, 144, 0,
+ 0, 0, 136, 80, 32, 80, 136, 0,
+ 0, 0, 136, 136, 136, 112, 32, 192,
+ 0, 0, 248, 144, 32, 72, 248, 0,
+ 32, 80, 0, 96, 144, 144, 96, 0,
+ 0, 14, 8, 48, 8, 8, 14, 0,
+ 0, 8, 8, 8, 8, 8, 8, 0,
+ 0, 112, 16, 12, 16, 16, 112, 0,
+ 0, 0, 0, 0, 0, 0, 248, 0,
+ 252, 252, 252, 252, 252, 252, 252, 252,
+ 240, 240, 240, 240, 240, 240, 240, 240,
+ };
+
+ writeRecord(french_video_font, sizeof(french_video_font), GBVARS_FRENCHVIDEOFONT_INDEX , GBVARS_SIMON);
+}
+
+static void addCharset_german_video_font() {
+ byte german_video_font[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 32, 112, 112, 32, 32, 0, 32, 0,
+ 48, 48, 96, 0, 0, 0, 0, 0,
+ 80, 0, 112, 8, 120, 136, 120, 0,
+ 80, 0, 112, 136, 136, 136, 112, 0,
+ 80, 0, 144, 144, 144, 144, 104, 0,
+ 0, 16, 40, 16, 42, 68, 58, 0,
+ 48, 48, 96, 0, 0, 0, 0, 0,
+ 0, 4, 8, 8, 8, 8, 4, 0,
+ 0, 32, 16, 16, 16, 16, 32, 0,
+ 0, 0, 20, 8, 62, 8, 20, 0,
+ 96, 144, 144, 160, 144, 144, 160, 128,
+ 0, 0, 0, 0, 0, 48, 48, 96,
+ 0, 0, 0, 240, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 48, 48, 0,
+ 80, 0, 112, 136, 248, 136, 136, 0,
+ 112, 136, 152, 168, 200, 136, 112, 0,
+ 32, 96, 32, 32, 32, 32, 112, 0,
+ 112, 136, 8, 48, 64, 136, 248, 0,
+ 112, 136, 8, 48, 8, 136, 112, 0,
+ 16, 48, 80, 144, 248, 16, 56, 0,
+ 248, 128, 240, 8, 8, 136, 112, 0,
+ 48, 64, 128, 240, 136, 136, 112, 0,
+ 248, 136, 8, 16, 32, 32, 32, 0,
+ 112, 136, 136, 112, 136, 136, 112, 0,
+ 112, 136, 136, 120, 8, 16, 96, 0,
+ 0, 0, 48, 48, 0, 48, 48, 0,
+ 136, 112, 136, 136, 136, 136, 112, 0,
+ 80, 0, 136, 136, 136, 136, 112, 0,
+ 80, 0, 144, 144, 144, 144, 104, 0,
+ 32, 64, 0, 112, 248, 128, 112, 0,
+ 112, 136, 8, 16, 32, 0, 32, 0,
+ 32, 80, 0, 192, 64, 64, 224, 0,
+ 112, 136, 136, 248, 136, 136, 136, 0,
+ 240, 72, 72, 112, 72, 72, 240, 0,
+ 48, 72, 128, 128, 128, 72, 48, 0,
+ 224, 80, 72, 72, 72, 80, 224, 0,
+ 248, 72, 64, 112, 64, 72, 248, 0,
+ 248, 72, 64, 112, 64, 64, 224, 0,
+ 48, 72, 128, 152, 136, 72, 56, 0,
+ 136, 136, 136, 248, 136, 136, 136, 0,
+ 248, 32, 32, 32, 32, 32, 248, 0,
+ 24, 8, 8, 8, 136, 136, 112, 0,
+ 200, 72, 80, 96, 80, 72, 200, 0,
+ 224, 64, 64, 64, 64, 72, 248, 0,
+ 136, 216, 168, 168, 136, 136, 136, 0,
+ 136, 200, 168, 152, 136, 136, 136, 0,
+ 112, 136, 136, 136, 136, 136, 112, 0,
+ 240, 72, 72, 112, 64, 64, 224, 0,
+ 112, 136, 136, 136, 136, 168, 112, 8,
+ 240, 72, 72, 112, 72, 72, 200, 0,
+ 112, 136, 128, 112, 8, 136, 112, 0,
+ 248, 168, 32, 32, 32, 32, 112, 0,
+ 136, 136, 136, 136, 136, 136, 120, 0,
+ 136, 136, 136, 80, 80, 32, 32, 0,
+ 136, 136, 136, 136, 168, 216, 136, 0,
+ 136, 136, 80, 32, 80, 136, 136, 0,
+ 136, 136, 136, 112, 32, 32, 112, 0,
+ 248, 136, 16, 32, 64, 136, 248, 0,
+ 0, 14, 8, 8, 8, 8, 14, 0,
+ 0, 128, 64, 32, 16, 8, 4, 0,
+ 0, 112, 16, 16, 16, 16, 112, 0,
+ 0, 48, 72, 64, 72, 48, 16, 48,
+ 0, 80, 0, 96, 32, 40, 48, 0,
+ 32, 16, 0, 152, 144, 144, 232, 0,
+ 0, 0, 112, 8, 120, 136, 120, 0,
+ 192, 64, 80, 104, 72, 72, 112, 0,
+ 0, 0, 112, 136, 128, 136, 112, 0,
+ 24, 16, 80, 176, 144, 144, 112, 0,
+ 0, 0, 112, 136, 248, 128, 112, 0,
+ 48, 72, 64, 224, 64, 64, 224, 0,
+ 0, 0, 104, 144, 144, 112, 136, 112,
+ 192, 64, 80, 104, 72, 72, 200, 0,
+ 64, 0, 192, 64, 64, 64, 224, 0,
+ 8, 0, 8, 8, 8, 8, 136, 112,
+ 192, 64, 72, 80, 96, 80, 200, 0,
+ 192, 64, 64, 64, 64, 64, 224, 0,
+ 0, 0, 144, 216, 168, 136, 136, 0,
+ 0, 0, 240, 136, 136, 136, 136, 0,
+ 0, 0, 112, 136, 136, 136, 112, 0,
+ 0, 0, 176, 72, 72, 112, 64, 224,
+ 0, 0, 104, 144, 144, 112, 16, 56,
+ 0, 0, 176, 72, 72, 64, 224, 0,
+ 0, 0, 120, 128, 112, 8, 240, 0,
+ 64, 64, 240, 64, 64, 72, 48, 0,
+ 0, 0, 144, 144, 144, 144, 104, 0,
+ 0, 0, 136, 136, 136, 80, 32, 0,
+ 0, 0, 136, 136, 168, 216, 144, 0,
+ 0, 0, 136, 80, 32, 80, 136, 0,
+ 0, 0, 136, 136, 136, 112, 32, 192,
+ 0, 0, 248, 144, 32, 72, 248, 0,
+ 32, 80, 0, 96, 144, 144, 96, 0,
+ 0, 14, 8, 48, 8, 8, 14, 0,
+ 0, 8, 8, 8, 8, 8, 8, 0,
+ 0, 112, 16, 12, 16, 16, 112, 0,
+ 0, 0, 0, 0, 0, 0, 248, 0,
+ 252, 252, 252, 252, 252, 252, 252, 252,
+ 240, 240, 240, 240, 240, 240, 240, 240,
+ };
+ writeRecord(german_video_font, sizeof(german_video_font), GBVARS_GERMANVIDEOFONT_INDEX , GBVARS_SIMON);
+}
+
+static void addCharset_hebrew_video_font() {
+ byte hebrew_video_font[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 32, 112, 112, 32, 32, 0, 32, 0,
+ 48, 48, 96, 0, 0, 0, 0, 0,
+ 0, 144, 0, 96, 144, 144, 104, 0,
+ 0, 144, 0, 96, 144, 144, 96, 0,
+ 0, 144, 0, 144, 144, 144, 96, 0,
+ 0, 16, 40, 16, 42, 68, 58, 0,
+ 48, 48, 96, 0, 0, 0, 0, 0,
+ 0, 4, 8, 8, 8, 8, 4, 0,
+ 0, 32, 16, 16, 16, 16, 32, 0,
+ 0, 0, 20, 8, 62, 8, 20, 0,
+ 0, 112, 136, 240, 136, 136, 240, 0,
+ 0, 0, 0, 0, 0, 48, 48, 96,
+ 0, 0, 0, 240, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 48, 48, 0,
+ 16, 32, 0, 120, 112, 64, 56, 0,
+ 112, 136, 152, 168, 200, 136, 112, 0,
+ 32, 96, 32, 32, 32, 32, 112, 0,
+ 112, 136, 8, 48, 64, 136, 248, 0,
+ 112, 136, 8, 48, 8, 136, 112, 0,
+ 16, 48, 80, 144, 248, 16, 56, 0,
+ 248, 128, 240, 8, 8, 136, 112, 0,
+ 48, 64, 128, 240, 136, 136, 112, 0,
+ 248, 136, 8, 16, 32, 32, 32, 0,
+ 112, 136, 136, 112, 136, 136, 112, 0,
+ 112, 136, 136, 120, 8, 16, 96, 0,
+ 0, 0, 48, 48, 0, 48, 48, 0,
+ 5, 5, 4, 6, 5, 3, 4, 5,
+ 6, 3, 5, 5, 4, 6, 5, 3,
+ 4, 6, 5, 6, 6, 6, 5, 5,
+ 5, 6, 5, 6, 6, 6, 6, 6,
+ 112, 136, 8, 16, 32, 0, 32, 0,
+ 0, 0, 144, 80, 160, 144, 144, 0,
+ 0, 0, 224, 32, 32, 32, 240, 0,
+ 0, 0, 224, 32, 96, 160, 160, 0,
+ 0, 0, 248, 16, 16, 16, 16, 0,
+ 0, 0, 240, 16, 16, 144, 144, 0,
+ 0, 0, 192, 64, 64, 64, 64, 0,
+ 0, 0, 224, 64, 32, 64, 64, 0,
+ 0, 0, 240, 144, 144, 144, 144, 0,
+ 0, 0, 184, 168, 136, 136, 112, 0,
+ 0, 0, 192, 64, 0, 0, 0, 0,
+ 0, 0, 240, 16, 16, 16, 16, 16,
+ 0, 0, 224, 16, 16, 16, 224, 0,
+ 128, 128, 224, 32, 32, 32, 192, 0,
+ 0, 0, 248, 72, 72, 72, 120, 0,
+ 0, 0, 176, 208, 144, 144, 176, 0,
+ 0, 0, 192, 64, 64, 64, 64, 64,
+ 0, 0, 96, 32, 32, 32, 224, 0,
+ 0, 0, 248, 72, 72, 72, 48, 0,
+ 0, 0, 80, 80, 80, 80, 224, 0,
+ 0, 0, 248, 72, 104, 8, 8, 8,
+ 0, 0, 248, 72, 104, 8, 248, 0,
+ 0, 0, 216, 72, 48, 16, 16, 16,
+ 0, 0, 144, 80, 32, 16, 240, 0,
+ 0, 0, 240, 16, 144, 160, 128, 128,
+ 0, 0, 240, 16, 16, 16, 16, 0,
+ 0, 0, 168, 168, 200, 136, 112, 0,
+ 0, 0, 240, 80, 80, 80, 208, 0,
+ 0, 14, 8, 8, 8, 8, 14, 0,
+ 0, 128, 64, 32, 16, 8, 4, 0,
+ 0, 112, 16, 16, 16, 16, 112, 0,
+ 0, 48, 72, 64, 72, 48, 16, 48,
+ 0, 80, 0, 96, 32, 40, 48, 0,
+ 32, 16, 0, 152, 144, 144, 232, 0,
+ 0, 0, 112, 8, 120, 136, 120, 0,
+ 192, 64, 80, 104, 72, 72, 112, 0,
+ 0, 0, 112, 136, 128, 136, 112, 0,
+ 24, 16, 80, 176, 144, 144, 112, 0,
+ 0, 0, 112, 136, 248, 128, 112, 0,
+ 48, 72, 64, 224, 64, 64, 224, 0,
+ 0, 0, 104, 144, 144, 112, 136, 112,
+ 192, 64, 80, 104, 72, 72, 200, 0,
+ 64, 0, 192, 64, 64, 64, 224, 0,
+ 8, 0, 8, 8, 8, 8, 136, 112,
+ 192, 64, 72, 80, 96, 80, 200, 0,
+ 192, 64, 64, 64, 64, 64, 224, 0,
+ 0, 0, 144, 216, 168, 136, 136, 0,
+ 0, 0, 240, 136, 136, 136, 136, 0,
+ 0, 0, 112, 136, 136, 136, 112, 0,
+ 0, 0, 176, 72, 72, 112, 64, 224,
+ 0, 0, 104, 144, 144, 112, 16, 56,
+ 0, 0, 176, 72, 72, 64, 224, 0,
+ 0, 0, 120, 128, 112, 8, 240, 0,
+ 64, 64, 240, 64, 64, 72, 48, 0,
+ 0, 0, 144, 144, 144, 144, 104, 0,
+ 0, 0, 136, 136, 136, 80, 32, 0,
+ 0, 0, 136, 136, 168, 216, 144, 0,
+ 0, 0, 136, 80, 32, 80, 136, 0,
+ 0, 0, 136, 136, 136, 112, 32, 192,
+ 0, 0, 248, 144, 32, 72, 248, 0,
+ 32, 80, 0, 96, 144, 144, 96, 0,
+ 0, 14, 8, 48, 8, 8, 14, 0,
+ 0, 8, 8, 8, 8, 8, 8, 0,
+ 0, 112, 16, 12, 16, 16, 112, 0,
+ 0, 0, 0, 0, 0, 0, 248, 0,
+ 252, 252, 252, 252, 252, 252, 252, 252,
+ 240, 240, 240, 240, 240, 240, 240, 240,
+ };
+ writeRecord(hebrew_video_font, sizeof(hebrew_video_font), GBVARS_HEBREWVIDEOFONT_INDEX , GBVARS_SIMON);
+}
+
+static void addCharset_italian_video_font() {
+ byte italian_video_font[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 32, 112, 112, 32, 32, 0, 32, 0,
+ 48, 48, 96, 0, 0, 0, 0, 0,
+ 80, 0, 112, 8, 120, 136, 120, 0,
+ 80, 0, 112, 136, 136, 136, 112, 0,
+ 32, 16, 0, 112, 136, 136, 112, 0,
+ 0, 16, 40, 16, 42, 68, 58, 0,
+ 48, 48, 96, 0, 0, 0, 0, 0,
+ 0, 4, 8, 8, 8, 8, 4, 0,
+ 0, 32, 16, 16, 16, 16, 32, 0,
+ 0, 0, 20, 8, 62, 8, 20, 0,
+ 32, 16, 0, 192, 64, 64, 224, 0,
+ 0, 0, 0, 0, 0, 48, 48, 96,
+ 0, 0, 0, 240, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 48, 48, 0,
+ 32, 64, 0, 112, 248, 128, 112, 0,
+ 112, 136, 152, 168, 200, 136, 112, 0,
+ 32, 96, 32, 32, 32, 32, 112, 0,
+ 112, 136, 8, 48, 64, 136, 248, 0,
+ 112, 136, 8, 48, 8, 136, 112, 0,
+ 16, 48, 80, 144, 248, 16, 56, 0,
+ 248, 128, 240, 8, 8, 136, 112, 0,
+ 48, 64, 128, 240, 136, 136, 112, 0,
+ 248, 136, 8, 16, 32, 32, 32, 0,
+ 112, 136, 136, 112, 136, 136, 112, 0,
+ 112, 136, 136, 120, 8, 16, 96, 0,
+ 0, 0, 48, 48, 0, 48, 48, 0,
+ 32, 16, 0, 112, 8, 248, 120, 0,
+ 32, 16, 0, 112, 136, 136, 112, 0,
+ 32, 16, 0, 112, 248, 128, 112, 0,
+ 32, 80, 0, 112, 248, 128, 112, 0,
+ 112, 136, 8, 16, 32, 0, 32, 0,
+ 32, 80, 0, 96, 32, 40, 48, 0,
+ 112, 136, 136, 248, 136, 136, 136, 0,
+ 240, 72, 72, 112, 72, 72, 240, 0,
+ 48, 72, 128, 128, 128, 72, 48, 0,
+ 224, 80, 72, 72, 72, 80, 224, 0,
+ 248, 72, 64, 112, 64, 72, 248, 0,
+ 248, 72, 64, 112, 64, 64, 224, 0,
+ 48, 72, 128, 152, 136, 72, 56, 0,
+ 136, 136, 136, 248, 136, 136, 136, 0,
+ 248, 32, 32, 32, 32, 32, 248, 0,
+ 24, 8, 8, 8, 136, 136, 112, 0,
+ 200, 72, 80, 96, 80, 72, 200, 0,
+ 224, 64, 64, 64, 64, 72, 248, 0,
+ 136, 216, 168, 168, 136, 136, 136, 0,
+ 136, 200, 168, 152, 136, 136, 136, 0,
+ 112, 136, 136, 136, 136, 136, 112, 0,
+ 240, 72, 72, 112, 64, 64, 224, 0,
+ 112, 136, 136, 136, 136, 168, 112, 8,
+ 240, 72, 72, 112, 72, 72, 200, 0,
+ 112, 136, 128, 112, 8, 136, 112, 0,
+ 248, 168, 32, 32, 32, 32, 112, 0,
+ 136, 136, 136, 136, 136, 136, 120, 0,
+ 136, 136, 136, 80, 80, 32, 32, 0,
+ 136, 136, 136, 136, 168, 216, 136, 0,
+ 136, 136, 80, 32, 80, 136, 136, 0,
+ 136, 136, 136, 112, 32, 32, 112, 0,
+ 248, 136, 16, 32, 64, 136, 248, 0,
+ 0, 14, 8, 8, 8, 8, 14, 0,
+ 0, 128, 64, 32, 16, 8, 4, 0,
+ 0, 112, 16, 16, 16, 16, 112, 0,
+ 0, 0, 112, 136, 128, 112, 32, 96,
+ 160, 0, 192, 64, 64, 64, 224, 0,
+ 32, 16, 0, 144, 144, 144, 104, 0,
+ 0, 0, 112, 8, 120, 136, 120, 0,
+ 192, 64, 80, 104, 72, 72, 112, 0,
+ 0, 0, 112, 136, 128, 136, 112, 0,
+ 24, 16, 80, 176, 144, 144, 112, 0,
+ 0, 0, 112, 136, 248, 128, 112, 0,
+ 48, 72, 64, 224, 64, 64, 224, 0,
+ 0, 0, 104, 144, 144, 112, 136, 112,
+ 192, 64, 80, 104, 72, 72, 200, 0,
+ 64, 0, 192, 64, 64, 64, 224, 0,
+ 8, 0, 8, 8, 8, 8, 136, 112,
+ 192, 64, 72, 80, 96, 80, 200, 0,
+ 192, 64, 64, 64, 64, 64, 224, 0,
+ 0, 0, 144, 216, 168, 136, 136, 0,
+ 0, 0, 240, 136, 136, 136, 136, 0,
+ 0, 0, 112, 136, 136, 136, 112, 0,
+ 0, 0, 176, 72, 72, 112, 64, 224,
+ 0, 0, 104, 144, 144, 112, 16, 56,
+ 0, 0, 176, 72, 72, 64, 224, 0,
+ 0, 0, 120, 128, 112, 8, 240, 0,
+ 64, 64, 240, 64, 64, 72, 48, 0,
+ 0, 0, 144, 144, 144, 144, 104, 0,
+ 0, 0, 136, 136, 136, 80, 32, 0,
+ 0, 0, 136, 136, 168, 216, 144, 0,
+ 0, 0, 136, 80, 32, 80, 136, 0,
+ 0, 0, 136, 136, 136, 112, 32, 192,
+ 0, 0, 248, 144, 32, 72, 248, 0,
+ 32, 80, 0, 96, 144, 144, 96, 0,
+ 0, 14, 8, 48, 8, 8, 14, 0,
+ 0, 8, 8, 8, 8, 8, 8, 0,
+ 0, 112, 16, 12, 16, 16, 112, 0,
+ 0, 0, 0, 0, 0, 0, 248, 0,
+ 252, 252, 252, 252, 252, 252, 252, 252,
+ 240, 240, 240, 240, 240, 240, 240, 240,
+ };
+ writeRecord(italian_video_font, sizeof(italian_video_font), GBVARS_ITALIANVIDEOFONT_INDEX , GBVARS_SIMON);
+}
+
+static void addCharset_spanish_video_font() {
+ byte spanish_video_font[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 32, 112, 112, 32, 32, 0, 32, 0,
+ 48, 48, 96, 0, 0, 0, 0, 0,
+ 80, 0, 112, 8, 120, 136, 120, 0,
+ 80, 0, 112, 136, 136, 136, 112, 0,
+ 80, 0, 144, 144, 144, 144, 104, 0,
+ 0, 16, 40, 16, 42, 68, 58, 0,
+ 48, 48, 96, 0, 0, 0, 0, 0,
+ 0, 4, 8, 8, 8, 8, 4, 0,
+ 0, 32, 16, 16, 16, 16, 32, 0,
+ 0, 0, 20, 8, 62, 8, 20, 0,
+ 96, 144, 144, 160, 144, 144, 160, 128,
+ 0, 0, 0, 0, 0, 48, 48, 96,
+ 0, 0, 0, 240, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 48, 48, 0,
+ 32, 64, 0, 112, 248, 128, 112, 0,
+ 112, 136, 152, 168, 200, 136, 112, 0,
+ 32, 96, 32, 32, 32, 32, 112, 0,
+ 112, 136, 8, 48, 64, 136, 248, 0,
+ 112, 136, 8, 48, 8, 136, 112, 0,
+ 16, 48, 80, 144, 248, 16, 56, 0,
+ 248, 128, 240, 8, 8, 136, 112, 0,
+ 48, 64, 128, 240, 136, 136, 112, 0,
+ 248, 136, 8, 16, 32, 32, 32, 0,
+ 112, 136, 136, 112, 136, 136, 112, 0,
+ 112, 136, 136, 120, 8, 16, 96, 0,
+ 0, 0, 48, 48, 0, 48, 48, 0,
+ 32, 64, 0, 112, 8, 248, 120, 0,
+ 32, 64, 0, 192, 64, 64, 224, 0,
+ 32, 64, 0, 112, 136, 136, 112, 0,
+ 32, 64, 0, 144, 144, 144, 104, 0,
+ 112, 136, 8, 16, 32, 0, 32, 0,
+ 80, 160, 0, 240, 136, 136, 136, 0,
+ 112, 136, 136, 248, 136, 136, 136, 0,
+ 240, 72, 72, 112, 72, 72, 240, 0,
+ 48, 72, 128, 128, 128, 72, 48, 0,
+ 224, 80, 72, 72, 72, 80, 224, 0,
+ 248, 72, 64, 112, 64, 72, 248, 0,
+ 248, 72, 64, 112, 64, 64, 224, 0,
+ 48, 72, 128, 152, 136, 72, 56, 0,
+ 136, 136, 136, 248, 136, 136, 136, 0,
+ 248, 32, 32, 32, 32, 32, 248, 0,
+ 24, 8, 8, 8, 136, 136, 112, 0,
+ 200, 72, 80, 96, 80, 72, 200, 0,
+ 224, 64, 64, 64, 64, 72, 248, 0,
+ 136, 216, 168, 168, 136, 136, 136, 0,
+ 136, 200, 168, 152, 136, 136, 136, 0,
+ 112, 136, 136, 136, 136, 136, 112, 0,
+ 240, 72, 72, 112, 64, 64, 224, 0,
+ 112, 136, 136, 136, 136, 168, 112, 8,
+ 240, 72, 72, 112, 72, 72, 200, 0,
+ 112, 136, 128, 112, 8, 136, 112, 0,
+ 248, 168, 32, 32, 32, 32, 112, 0,
+ 136, 136, 136, 136, 136, 136, 120, 0,
+ 136, 136, 136, 80, 80, 32, 32, 0,
+ 136, 136, 136, 136, 168, 216, 136, 0,
+ 136, 136, 80, 32, 80, 136, 136, 0,
+ 136, 136, 136, 112, 32, 32, 112, 0,
+ 248, 136, 16, 32, 64, 136, 248, 0,
+ 0, 14, 8, 8, 8, 8, 14, 0,
+ 0, 128, 64, 32, 16, 8, 4, 0,
+ 0, 112, 16, 16, 16, 16, 112, 0,
+ 32, 0, 32, 64, 128, 136, 112, 0,
+ 32, 0, 32, 32, 112, 112, 32, 0,
+ 80, 0, 144, 144, 144, 144, 104, 0,
+ 0, 0, 112, 8, 120, 136, 120, 0,
+ 192, 64, 80, 104, 72, 72, 112, 0,
+ 0, 0, 112, 136, 128, 136, 112, 0,
+ 24, 16, 80, 176, 144, 144, 112, 0,
+ 0, 0, 112, 136, 248, 128, 112, 0,
+ 48, 72, 64, 224, 64, 64, 224, 0,
+ 0, 0, 104, 144, 144, 112, 136, 112,
+ 192, 64, 80, 104, 72, 72, 200, 0,
+ 64, 0, 192, 64, 64, 64, 224, 0,
+ 8, 0, 8, 8, 8, 8, 136, 112,
+ 192, 64, 72, 80, 96, 80, 200, 0,
+ 192, 64, 64, 64, 64, 64, 224, 0,
+ 0, 0, 144, 216, 168, 136, 136, 0,
+ 0, 0, 240, 136, 136, 136, 136, 0,
+ 0, 0, 112, 136, 136, 136, 112, 0,
+ 0, 0, 176, 72, 72, 112, 64, 224,
+ 0, 0, 104, 144, 144, 112, 16, 56,
+ 0, 0, 176, 72, 72, 64, 224, 0,
+ 0, 0, 120, 128, 112, 8, 240, 0,
+ 64, 64, 240, 64, 64, 72, 48, 0,
+ 0, 0, 144, 144, 144, 144, 104, 0,
+ 0, 0, 136, 136, 136, 80, 32, 0,
+ 0, 0, 136, 136, 168, 216, 144, 0,
+ 0, 0, 136, 80, 32, 80, 136, 0,
+ 0, 0, 136, 136, 136, 112, 32, 192,
+ 0, 0, 248, 144, 32, 72, 248, 0,
+ 32, 80, 0, 96, 144, 144, 96, 0,
+ 0, 14, 8, 48, 8, 8, 14, 0,
+ 0, 8, 8, 8, 8, 8, 8, 0,
+ 0, 112, 16, 12, 16, 16, 112, 0,
+ 0, 0, 0, 0, 0, 0, 248, 0,
+ 252, 252, 252, 252, 252, 252, 252, 252,
+ 240, 240, 240, 240, 240, 240, 240, 240,
+ };
+ writeRecord(spanish_video_font, sizeof(spanish_video_font), GBVARS_SPANISHVIDEOFONT_INDEX , GBVARS_SIMON);
+}
+
+static void addCharset_video_font() {
+ byte video_font[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 32, 112, 112, 32, 32, 0, 32, 0,
+ 48, 48, 96, 0, 0, 0, 0, 0,
+ 0, 144, 0, 96, 144, 144, 104, 0,
+ 0, 144, 0, 96, 144, 144, 96, 0,
+ 0, 144, 0, 144, 144, 144, 96, 0,
+ 0, 16, 40, 16, 42, 68, 58, 0,
+ 48, 48, 96, 0, 0, 0, 0, 0,
+ 0, 4, 8, 8, 8, 8, 4, 0,
+ 0, 32, 16, 16, 16, 16, 32, 0,
+ 0, 0, 20, 8, 62, 8, 20, 0,
+ 0, 112, 136, 240, 136, 136, 240, 0,
+ 0, 0, 0, 0, 0, 48, 48, 96,
+ 0, 0, 0, 240, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 48, 48, 0,
+ 16, 32, 0, 120, 112, 64, 56, 0,
+ 112, 136, 152, 168, 200, 136, 112, 0,
+ 32, 96, 32, 32, 32, 32, 112, 0,
+ 112, 136, 8, 48, 64, 136, 248, 0,
+ 112, 136, 8, 48, 8, 136, 112, 0,
+ 16, 48, 80, 144, 248, 16, 56, 0,
+ 248, 128, 240, 8, 8, 136, 112, 0,
+ 48, 64, 128, 240, 136, 136, 112, 0,
+ 248, 136, 8, 16, 32, 32, 32, 0,
+ 112, 136, 136, 112, 136, 136, 112, 0,
+ 112, 136, 136, 120, 8, 16, 96, 0,
+ 0, 0, 48, 48, 0, 48, 48, 0,
+ 32, 16, 0, 112, 8, 248, 120, 0,
+ 32, 80, 0, 144, 144, 144, 104, 0,
+ 80, 0, 144, 144, 144, 144, 104, 0,
+ 32, 80, 0, 112, 248, 128, 112, 0,
+ 112, 136, 8, 16, 32, 0, 32, 0,
+ 32, 80, 0, 192, 64, 64, 224, 0,
+ 112, 136, 136, 248, 136, 136, 136, 0,
+ 240, 72, 72, 112, 72, 72, 240, 0,
+ 48, 72, 128, 128, 128, 72, 48, 0,
+ 224, 80, 72, 72, 72, 80, 224, 0,
+ 248, 72, 64, 112, 64, 72, 248, 0,
+ 248, 72, 64, 112, 64, 64, 224, 0,
+ 48, 72, 128, 152, 136, 72, 56, 0,
+ 136, 136, 136, 248, 136, 136, 136, 0,
+ 248, 32, 32, 32, 32, 32, 248, 0,
+ 24, 8, 8, 8, 136, 136, 112, 0,
+ 200, 72, 80, 96, 80, 72, 200, 0,
+ 224, 64, 64, 64, 64, 72, 248, 0,
+ 136, 216, 168, 168, 136, 136, 136, 0,
+ 136, 200, 168, 152, 136, 136, 136, 0,
+ 112, 136, 136, 136, 136, 136, 112, 0,
+ 240, 72, 72, 112, 64, 64, 224, 0,
+ 112, 136, 136, 136, 136, 168, 112, 8,
+ 240, 72, 72, 112, 72, 72, 200, 0,
+ 112, 136, 128, 112, 8, 136, 112, 0,
+ 248, 168, 32, 32, 32, 32, 112, 0,
+ 136, 136, 136, 136, 136, 136, 120, 0,
+ 136, 136, 136, 80, 80, 32, 32, 0,
+ 136, 136, 136, 136, 168, 216, 136, 0,
+ 136, 136, 80, 32, 80, 136, 136, 0,
+ 136, 136, 136, 112, 32, 32, 112, 0,
+ 248, 136, 16, 32, 64, 136, 248, 0,
+ 0, 14, 8, 8, 8, 8, 14, 0,
+ 0, 128, 64, 32, 16, 8, 4, 0,
+ 0, 112, 16, 16, 16, 16, 112, 0,
+ 0, 48, 72, 64, 72, 48, 16, 48,
+ 0, 80, 0, 96, 32, 40, 48, 0,
+ 32, 16, 0, 152, 144, 144, 232, 0,
+ 0, 0, 112, 8, 120, 136, 120, 0,
+ 192, 64, 80, 104, 72, 72, 112, 0,
+ 0, 0, 112, 136, 128, 136, 112, 0,
+ 24, 16, 80, 176, 144, 144, 112, 0,
+ 0, 0, 112, 136, 248, 128, 112, 0,
+ 48, 72, 64, 224, 64, 64, 224, 0,
+ 0, 0, 104, 144, 144, 112, 136, 112,
+ 192, 64, 80, 104, 72, 72, 200, 0,
+ 64, 0, 192, 64, 64, 64, 224, 0,
+ 8, 0, 8, 8, 8, 8, 136, 112,
+ 192, 64, 72, 80, 96, 80, 200, 0,
+ 192, 64, 64, 64, 64, 64, 224, 0,
+ 0, 0, 144, 216, 168, 136, 136, 0,
+ 0, 0, 240, 136, 136, 136, 136, 0,
+ 0, 0, 112, 136, 136, 136, 112, 0,
+ 0, 0, 176, 72, 72, 112, 64, 224,
+ 0, 0, 104, 144, 144, 112, 16, 56,
+ 0, 0, 176, 72, 72, 64, 224, 0,
+ 0, 0, 120, 128, 112, 8, 240, 0,
+ 64, 64, 240, 64, 64, 72, 48, 0,
+ 0, 0, 144, 144, 144, 144, 104, 0,
+ 0, 0, 136, 136, 136, 80, 32, 0,
+ 0, 0, 136, 136, 168, 216, 144, 0,
+ 0, 0, 136, 80, 32, 80, 136, 0,
+ 0, 0, 136, 136, 136, 112, 32, 192,
+ 0, 0, 248, 144, 32, 72, 248, 0,
+ 32, 80, 0, 96, 144, 144, 96, 0,
+ 0, 14, 8, 48, 8, 8, 14, 0,
+ 0, 8, 8, 8, 8, 8, 8, 0,
+ 0, 112, 16, 12, 16, 16, 112, 0,
+ 0, 0, 0, 0, 0, 0, 248, 0,
+ 252, 252, 252, 252, 252, 252, 252, 252,
+ 240, 240, 240, 240, 240, 240, 240, 240,
+ };
+ writeRecord(video_font, sizeof(video_font), GBVARS_VIDEOFONT_INDEX , GBVARS_SIMON);
+}
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+
+void Simon_addCharset() {
+ addCharset_russian_video_font();
+ addCharset_french_video_font();
+ addCharset_german_video_font();
+ addCharset_hebrew_video_font();
+ addCharset_italian_video_font();
+ addCharset_spanish_video_font();
+ addCharset_video_font();
+}
diff --git a/backends/platform/PalmOS/Src/builder/simon/bs_simon.c b/backends/platform/PalmOS/Src/builder/simon/bs_simon.c
new file mode 100644
index 0000000000..885a41f8e9
--- /dev/null
+++ b/backends/platform/PalmOS/Src/builder/simon/bs_simon.c
@@ -0,0 +1,377 @@
+#include <PalmOS.h>
+#include "b_globals.h"
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+
+typedef struct {
+#if 0 // original struct
+ const char *gme_filename;
+ const char *wav_filename;
+ const char *voc_filename;
+ const char *mp3_filename;
+ const char *vorbis_filename;
+ const char *voc_effects_filename;
+ const char *mp3_effects_filename;
+ const char *vorbis_effects_filename;
+ const char *gamepc_filename;
+ #else
+ const char gme_filename[12];
+ const char wav_filename[12];
+ const char voc_filename[12];
+ const char mp3_filename[12];
+ const char flac_filename[12];
+ const char vorbis_filename[12];
+ const char voc_effects_filename[12];
+ const char mp3_effects_filename[12];
+ const char vorbis_effects_filename[12];
+ const char flac_effects_filename[12];
+ const char gamepc_filename[12];
+ #endif
+} GameSpecificSettings;
+///////////////////////////////////////////////////////////////////
+static void addSimon_simon1_settings() {
+
+
+ GameSpecificSettings simon1_settings = {
+ "SIMON.GME", // gme_filename
+ "SIMON.WAV", // wav_filename
+ "SIMON.VOC", // voc_filename
+ "SIMON.MP3", // mp3_filename
+ "SIMON.OGG", // vorbis_filename
+ "SIMON.FLA", // flac_filename
+ "EFFECTS.VOC", // voc_effects_filename
+ "EFFECTS.MP3", // mp3_effects_filename
+ "EFFECTS.OGG", // vorbis_effects_filename
+ "EFFECTS.FLA", // flac_effects_filename
+ "GAMEPC", // gamepc_filename
+ };
+
+ writeRecord(&simon1_settings, sizeof(simon1_settings), GBVARS_SIMON1SETTINGS_INDEX, GBVARS_SIMON);
+}
+///////////////////////////////////////////////////////////////////
+static void addSimon_simon1acorn_settings() {
+
+
+ GameSpecificSettings simon1acorn_settings = {
+ "DATA", // gme_filename
+ "", // wav_filename
+ "SIMON", // voc_filename
+ "SIMON.MP3", // mp3_filename
+ "SIMON.OGG", // vorbis_filename
+ "SIMON.FLA", // flac_filename
+ "EFFECTS", // voc_effects_filename
+ "EFFECTS.MP3", // mp3_effects_filename
+ "EFFECTS.OGG", // vorbis_effects_filename
+ "EFFECTS.FLA", // flac_effects_filename
+ "GAMEBASE", // gamepc_filename
+};
+
+ writeRecord(&simon1acorn_settings, sizeof(simon1acorn_settings), GBVARS_SIMON1ACORNSETTINGS_INDEX, GBVARS_SIMON);
+}
+///////////////////////////////////////////////////////////////////
+static void addSimon_simon1amiga_settings() {
+
+
+ GameSpecificSettings simon1amiga_settings = {
+ "", // gme_filename
+ "", // wav_filename
+ "", // voc_filename
+ "SIMON.MP3", // mp3_filename
+ "SIMON.OGG", // vorbis_filename
+ "SIMON.FLA", // flac_filename
+ "", // voc_effects_filename
+ "", // mp3_effects_filename
+ "", // vorbis_effects_filename
+ "", // flac_effects_filename
+ "gameamiga", // gamepc_filename
+};
+
+
+ writeRecord(&simon1amiga_settings, sizeof(simon1amiga_settings), GBVARS_SIMON1AMIGASETTINGS_INDEX, GBVARS_SIMON);
+}
+///////////////////////////////////////////////////////////////////
+
+static void addSimon_simon1demo_settings() {
+
+
+ GameSpecificSettings simon1demo_settings = {
+ "", // gme_filename
+ "", // wav_filename
+ "", // voc_filename
+ "", // mp3_filename
+ "", // vorbis_filename
+ "", // flac_filename
+ "", // voc_effects_filename
+ "", // mp3_effects_filename
+ "", // vorbis_effects_filename
+ "", // flac_effects_filename
+ "GDEMO", // gamepc_filename
+};
+
+ writeRecord(&simon1demo_settings, sizeof(simon1demo_settings), GBVARS_SIMON1DEMOSETTINGS_INDEX, GBVARS_SIMON);
+}
+///////////////////////////////////////////////////////////////////
+static void addSimon_simon2win_settings() {
+
+
+ GameSpecificSettings simon2win_settings = {
+ "SIMON2.GME", // gme_filename
+ "SIMON2.WAV", // wav_filename
+ "SIMON2.VOC", // voc_filename
+ "SIMON2.MP3", // mp3_filename
+ "SIMON2.OGG", // vorbis_filename
+ "SIMON2.FLA", // flac_filename
+ "", // voc_effects_filename
+ "", // mp3_effects_filename
+ "", // vorbis_effects_filename
+ "", // flac_effects_filename
+ "GSPTR30", // gamepc_filename
+};
+
+
+ writeRecord(&simon2win_settings, sizeof(simon2win_settings), GBVARS_SIMON2WINSETTINGS_INDEX, GBVARS_SIMON);
+}
+///////////////////////////////////////////////////////////////////
+static void addSimon_simon2dos_settings() {
+
+
+ GameSpecificSettings simon2dos_settings = {
+ "SIMON2.GME", // gme_filename
+ "", // wav_filename
+ "", // voc_filename
+ "", // mp3_filename
+ "", // vorbis_filename
+ "", // flac_filename
+ "", // voc_effects_filename
+ "", // mp3_effects_filename
+ "", // vorbis_effects_filename
+ "", // flac_effects_filename
+ "GAME32", // gamepc_filename
+};
+
+ writeRecord(&simon2dos_settings, sizeof(simon2dos_settings), GBVARS_SIMON2DOSSETTINGS_INDEX, GBVARS_SIMON);
+}
+
+typedef unsigned char byte;
+static void addSimon_simon1_cursor() {
+
+
+ byte _simon1_cursor[256] = {
+ 0xe1,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xe1,0xe1,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xe1,0xe1,0xe1,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xe1,0xe1,0xe1,0xe1,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xe1,0xe1,0xe1,0xe1,0xe0,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xe1,0xff,0xff,0xe1,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xe1,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xe1,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xe1,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+};
+
+ writeRecord(&_simon1_cursor, sizeof(_simon1_cursor), GBVARS_SIMON1CURSOR_INDEX, GBVARS_SIMON);
+}
+/*
+static void addSimon_simon2_cursors() {
+
+
+ byte _simon2_cursors[10][256] = {
+ // cross hair
+ { 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xec,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xec,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xec,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xec,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xec,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xec,0xec,0xec,0xec,0xec,0xef,0xff,0xea,0xff,0xef,0xec,0xec,0xec,0xec,0xec,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xec,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xec,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xec,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xec,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xec,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
+ // examine
+ { 0xff,0xff,0xef,0xef,0xef,0xef,0xef,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xef,0xee,0xeb,0xe4,0xe4,0xe4,0xee,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xef,0xee,0xeb,0xee,0xef,0xef,0xee,0xec,0xee,0xef,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xef,0xeb,0xee,0xef,0xee,0xee,0xef,0xee,0xe4,0xef,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xef,0xeb,0xef,0xef,0xef,0xec,0xee,0xef,0xe4,0xef,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xef,0xeb,0xef,0xef,0xee,0xef,0xef,0xef,0xe4,0xef,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xef,0xeb,0xee,0xef,0xef,0xef,0xef,0xee,0xe4,0xef,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xef,0xee,0xeb,0xee,0xef,0xef,0xee,0xe4,0xee,0xef,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xef,0xee,0xeb,0xeb,0xeb,0xeb,0xee,0xe4,0xec,0xef,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xef,0xef,0xef,0xef,0xef,0xef,0xeb,0xe4,0xee,0xef,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xee,0xe4,0xeb,0xef,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xeb,0xe4,0xeb,0xef,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xeb,0xec,0xeb,0xef,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xeb,0xe4,0xef,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xef,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
+ // pick up
+ { 0xff,0xff,0xff,0xff,0xff,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xe5,0xe6,0xe6,0xe7,0xe7,0xe6,0xe6,0xe5,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xe5,0xe7,0xe7,0xe7,0xe7,0xe8,0xe8,0xe8,0xe8,0xe5,0xff,0xff,0xff,
+ 0xff,0xff,0xe5,0xe6,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe8,0xe9,0xe7,0xe5,0xff,0xff,
+ 0xff,0xe5,0xe6,0xe7,0xe6,0xe5,0xff,0xff,0xff,0xff,0xe5,0xe6,0xe8,0xe6,0xe5,0xff,
+ 0xff,0xe5,0xe7,0xe7,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xe5,0xe8,0xe7,0xe5,0xff,
+ 0xff,0xe5,0xe7,0xe7,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xe5,0xe7,0xe7,0xe5,0xff,
+ 0xff,0xef,0xeb,0xeb,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xeb,0xeb,0xef,0xff,
+ 0xff,0xef,0xee,0xeb,0xee,0xef,0xff,0xff,0xff,0xff,0xef,0xee,0xeb,0xee,0xef,0xff,
+ 0xff,0xff,0xef,0xeb,0xeb,0xef,0xff,0xff,0xff,0xff,0xef,0xeb,0xeb,0xef,0xff,0xff,
+ 0xff,0xff,0xef,0xee,0xe4,0xee,0xef,0xff,0xff,0xef,0xee,0xe4,0xee,0xef,0xff,0xff,
+ 0xff,0xff,0xff,0xef,0xe4,0xeb,0xef,0xff,0xff,0xef,0xeb,0xe4,0xef,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xeb,0xeb,0xeb,0xef,0xef,0xeb,0xeb,0xeb,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xef,0xee,0xee,0xee,0xee,0xe1,0xe1,0xef,0xff,0xff,0xff,0xe4,
+ 0xef,0xee,0xeb,0xeb,0xeb,0xeb,0xeb,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xeb,0xec,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe4 },
+ // give
+ { 0xff,0xff,0xff,0xff,0xff,0xe5,0xe7,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xe5,0xe7,0xe8,0xe7,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xe9,0xe7,0xe8,0xe8,0xe8,0xe7,0xe9,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xe5,0xe7,0xea,0xe8,0xe8,0xe8,0xea,0xe7,0xe5,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xe5,0xe7,0xe8,0xe8,0xea,0xe9,0xea,0xe8,0xe8,0xe7,0xe5,0xff,0xff,0xff,0xff,
+ 0xe5,0xe7,0xe9,0xe8,0xe8,0xe9,0xec,0xe9,0xe8,0xe8,0xe8,0xe7,0xe5,0xff,0xff,0xff,
+ 0xe5,0xe7,0xe7,0xe9,0xe8,0xec,0xe9,0xec,0xe8,0xe9,0xe7,0xe6,0xe5,0xff,0xff,0xff,
+ 0xe5,0xe7,0xe7,0xe8,0xec,0xe9,0xe9,0xe9,0xec,0xe7,0xe6,0xe6,0xe5,0xff,0xff,0xff,
+ 0xe5,0xe7,0xe7,0xea,0xe8,0xe9,0xe9,0xe9,0xe7,0xec,0xec,0xe4,0xe5,0xff,0xff,0xff,
+ 0xe5,0xe7,0xe7,0xe9,0xe7,0xe8,0xe9,0xe7,0xe6,0xec,0xe4,0xec,0xe4,0xef,0xff,0xff,
+ 0xe5,0xe6,0xe7,0xe9,0xe7,0xe7,0xe8,0xe6,0xe6,0xe4,0xec,0xe4,0xec,0xe4,0xef,0xff,
+ 0xff,0xe5,0xe6,0xe9,0xe7,0xe7,0xe8,0xe6,0xe6,0xe8,0xe4,0xec,0xe4,0xec,0xeb,0xff,
+ 0xff,0xff,0xe5,0xe9,0xe7,0xe7,0xe8,0xe6,0xe6,0xe8,0xe6,0xe4,0xec,0xeb,0xef,0xff,
+ 0xff,0xff,0xff,0xe8,0xe7,0xe7,0xe8,0xe6,0xe6,0xe7,0xff,0xef,0xeb,0xef,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xe5,0xe7,0xe8,0xe6,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xe5,0xe6,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
+ // talk
+ { 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xe5,0xe7,0xe8,0xe8,0xe8,0xe7,0xe6,0xe5,0xe5,0xe5,0xff,0xff,0xff,0xff,
+ 0xff,0xe5,0xe6,0xe9,0xea,0xe6,0xea,0xe9,0xe8,0xe9,0xe8,0xe7,0xe5,0xff,0xff,0xff,
+ 0xff,0xe5,0xe7,0xe5,0xef,0xe5,0xec,0xea,0xe5,0xea,0xec,0xe5,0xe9,0xe6,0xff,0xff,
+ 0xff,0xe5,0xe6,0xe5,0xef,0xef,0xef,0xe5,0xef,0xef,0xe5,0xef,0xef,0xe8,0xe5,0xff,
+ 0xff,0xe5,0xe9,0xea,0xe5,0xe8,0xe7,0xe6,0xe6,0xe8,0xe7,0xe5,0xec,0xe9,0xe5,0xff,
+ 0xff,0xe5,0xe9,0xe8,0xe5,0xe7,0xe8,0xe8,0xe9,0xe9,0xe8,0xe5,0xe9,0xe9,0xe5,0xff,
+ 0xff,0xe5,0xe6,0xec,0xea,0xe5,0xe6,0xe6,0xe7,0xe7,0xe6,0xe5,0xec,0xe8,0xe5,0xff,
+ 0xff,0xff,0xe5,0xe9,0xe8,0xe9,0xe5,0xe8,0xe5,0xe8,0xe5,0xe9,0xe9,0xe7,0xe5,0xff,
+ 0xff,0xff,0xe5,0xe7,0xe9,0xec,0xe8,0xec,0xe8,0xec,0xe8,0xec,0xe8,0xe5,0xff,0xff,
+ 0xff,0xff,0xff,0xe5,0xe6,0xe8,0xe9,0xe9,0xe9,0xe9,0xe9,0xe8,0xe5,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
+ // use
+ { 0xff,0xff,0xff,0xff,0xff,0xee,0xe1,0xeb,0xee,0xef,0xef,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xef,0xef,0xef,0xe4,0xeb,0xee,0xe5,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xeb,0xe4,0xe4,0xeb,0xe5,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xeb,0xe4,0xec,0xe4,0xef,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xeb,0xeb,0xe4,0xe4,0xee,0xef,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xee,0xeb,0xeb,0xeb,0xe1,0xef,0xee,0xef,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe5,0xe6,0xef,0xef,0xee,0xeb,0xeb,0xe4,0xee,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xe5,0xe6,0xff,0xff,0xff,0xef,0xeb,0xec,0xeb,0xef,
+ 0xff,0xff,0xff,0xff,0xff,0xe5,0xe6,0xe5,0xff,0xff,0xff,0xee,0xe4,0xeb,0xef,0xff,
+ 0xff,0xff,0xff,0xe5,0xe5,0xe6,0xe5,0xff,0xff,0xff,0xff,0xef,0xee,0xef,0xff,0xff,
+ 0xff,0xff,0xe5,0xe6,0xe8,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,
+ 0xff,0xe5,0xe6,0xe8,0xe6,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xe5,0xe6,0xe8,0xe6,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xe5,0xe6,0xe6,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xe5,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
+ // wear
+ { 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xef,0xeb,0xed,0xe4,0xe2,0xeb,0xee,0xee,0xee,0xef,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xef,0xe2,0xec,0xe2,0xe1,0xee,0xef,0xef,0xee,0xef,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xef,0xeb,0xed,0xeb,0xee,0xef,0xef,0xef,0xee,0xef,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xef,0xee,0xe4,0xeb,0xee,0xef,0xef,0xee,0xef,0xef,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xef,0xe4,0xeb,0xee,0xef,0xef,0xee,0xef,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xef,0xe2,0xeb,0xee,0xef,0xef,0xee,0xef,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xef,0xeb,0xe1,0xee,0xef,0xef,0xee,0xef,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xef,0xeb,0xe1,0xee,0xef,0xef,0xef,0xef,0xff,0xff,0xff,0xff,
+ 0xff,0xef,0xef,0xef,0xe1,0xe4,0xe4,0xe4,0xe1,0xeb,0xee,0xef,0xef,0xef,0xff,0xff,
+ 0xef,0xee,0xee,0xef,0xee,0xee,0xee,0xee,0xee,0xef,0xef,0xef,0xee,0xee,0xef,0xff,
+ 0xff,0xef,0xef,0xee,0xe1,0xe2,0xe4,0xe4,0xe4,0xeb,0xe1,0xee,0xef,0xef,0xff,0xff,
+ 0xff,0xff,0xff,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
+ // move
+ { 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xff,
+ 0xff,0xe1,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe1,0xff,
+ 0xff,0xe1,0xe3,0xe3,0xe3,0xed,0xe3,0xe3,0xe3,0xe3,0xed,0xe3,0xe3,0xe3,0xe1,0xff,
+ 0xff,0xe1,0xe3,0xe3,0xed,0xec,0xe3,0xe3,0xe3,0xe3,0xec,0xed,0xe3,0xe3,0xe1,0xff,
+ 0xff,0xe1,0xe3,0xed,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xed,0xe3,0xe1,0xff,
+ 0xff,0xe1,0xed,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xed,0xe1,0xff,
+ 0xff,0xe1,0xe3,0xed,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xec,0xed,0xe3,0xe1,0xff,
+ 0xff,0xe1,0xe3,0xe3,0xed,0xec,0xe3,0xe3,0xe3,0xe3,0xec,0xed,0xe3,0xe3,0xe1,0xff,
+ 0xff,0xe1,0xe3,0xe3,0xe3,0xed,0xe3,0xe3,0xe3,0xe3,0xed,0xe3,0xe3,0xe3,0xe1,0xff,
+ 0xff,0xe1,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe2,0xe1,0xff,
+ 0xff,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
+ // open
+ { 0xff,0xff,0xe5,0xe8,0xe8,0xe7,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xe5,0xe8,0xe7,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xe5,0xe7,0xe5,0xe7,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xe5,0xff,0xe5,0xe7,0xe6,0xe9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xe6,0xea,0xe6,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xe6,0xea,0xe6,0xe7,0xe5,0xff,0xe5,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xe6,0xea,0xe6,0xff,0xe5,0xe7,0xe5,0xe7,0xe5,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xe6,0xea,0xe6,0xff,0xff,0xff,0xe5,0xe7,0xe8,0xe5,0xff,0xff,0xff,
+ 0xff,0xe5,0xe6,0xea,0xe6,0xff,0xff,0xff,0xe5,0xe7,0xe8,0xe8,0xe5,0xff,0xff,0xff,
+ 0xff,0xe5,0xe9,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xe5,0xff,0xff,0xff,0xff,
+ 0xff,0xe5,0xe9,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xea,0xe5,0xff,0xff,0xff,0xff,
+ 0xff,0xe5,0xe9,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xe9,0xe5,0xff,0xff,0xff,0xff,
+ 0xff,0xe5,0xe9,0xe8,0xe8,0xe8,0xe8,0xe8,0xe7,0xe7,0xe9,0xe5,0xff,0xff,0xff,0xff,
+ 0xff,0xe5,0xe9,0xe6,0xe6,0xe6,0xe6,0xe6,0xe6,0xe5,0xe9,0xe5,0xff,0xff,0xff,0xff,
+ 0xff,0xe5,0xe9,0xe8,0xe8,0xe8,0xe8,0xe8,0xe8,0xe7,0xe9,0xe5,0xff,0xff,0xff,0xff,
+ 0xff,0xe5,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe9,0xe5,0xff,0xff,0xff,0xff },
+ // question mark
+ { 0xff,0xff,0xff,0xff,0xff,0xe5,0xe5,0xe5,0xe5,0xe5,0xe5,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xe5,0xe7,0xea,0xec,0xec,0xec,0xe9,0xe5,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xe5,0xe7,0xea,0xec,0xea,0xe9,0xea,0xec,0xe9,0xe5,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xe5,0xe9,0xec,0xe9,0xe8,0xe7,0xe8,0xea,0xec,0xe5,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xe5,0xe8,0xe9,0xe8,0xe5,0xe5,0xe8,0xe9,0xec,0xe5,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xe5,0xe5,0xe5,0xe5,0xe8,0xe9,0xec,0xe9,0xe5,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xe5,0xe9,0xec,0xec,0xe9,0xe5,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xe5,0xe8,0xec,0xea,0xe8,0xe5,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xe5,0xe9,0xec,0xe9,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xe5,0xe9,0xea,0xe9,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xe5,0xe7,0xe9,0xe7,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xe5,0xe5,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xe5,0xe8,0xe9,0xe8,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xe5,0xe9,0xec,0xe9,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xe5,0xe8,0xe9,0xe8,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xe5,0xe5,0xe5,0xff,0xff,0xff,0xff,0xff,0xff,0xff },
+};
+
+ writeRecord(&_simon2_cursors, sizeof(_simon2_cursors), GBVARS_SIMON2CURSORS_INDEX, GBVARS_SIMON);
+}*/
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+
+void addSimon() {
+ addSimon_simon1_settings();
+ addSimon_simon1acorn_settings();
+ addSimon_simon1amiga_settings();
+ addSimon_simon1demo_settings();
+ addSimon_simon2win_settings();
+ addSimon_simon2dos_settings();
+
+ addSimon_simon1_cursor();
+// addSimon_simon2_cursors();
+}
diff --git a/backends/platform/PalmOS/Src/builder/sky/sk_hufftext.c b/backends/platform/PalmOS/Src/builder/sky/sk_hufftext.c
new file mode 100644
index 0000000000..36c770eeda
--- /dev/null
+++ b/backends/platform/PalmOS/Src/builder/sky/sk_hufftext.c
@@ -0,0 +1,2031 @@
+#include <PalmOS.h>
+#include "b_globals.h"
+
+typedef struct {
+ unsigned char lChild;
+ unsigned char rChild;
+ unsigned char value;
+} HuffTree;
+
+static void addHufftext_huffTree_00109() {
+ HuffTree _huffTree_00109[] = {
+ { 1, 22, 0 },
+ { 2, 9, 0 },
+ { 3, 6, 0 },
+ { 4, 5, 0 },
+ { 0, 0, 0x20 },
+ { 0, 0, 0x65 },
+ { 7, 8, 0 },
+ { 0, 0, 0x74 },
+ { 0, 0, 0x6F },
+ { 10, 17, 0 },
+ { 11, 14, 0 },
+ { 12, 13, 0 },
+ { 0, 0, 0x2E },
+ { 0, 0, 0x61 },
+ { 15, 16, 0 },
+ { 0, 0, 0x00 },
+ { 0, 0, 0x73 },
+ { 18, 21, 0 },
+ { 19, 20, 0 },
+ { 0, 0, 0x6E },
+ { 0, 0, 0x68 },
+ { 0, 0, 0x69 },
+ { 23, 46, 0 },
+ { 24, 35, 0 },
+ { 25, 30, 0 },
+ { 26, 29, 0 },
+ { 27, 28, 0 },
+ { 0, 0, 0x45 },
+ { 0, 0, 0x49 },
+ { 0, 0, 0x72 },
+ { 31, 34, 0 },
+ { 32, 33, 0 },
+ { 0, 0, 0x54 },
+ { 0, 0, 0x75 },
+ { 0, 0, 0x6D },
+ { 36, 41, 0 },
+ { 37, 40, 0 },
+ { 38, 39, 0 },
+ { 0, 0, 0x6C },
+ { 0, 0, 0x79 },
+ { 0, 0, 0x4F },
+ { 42, 45, 0 },
+ { 43, 44, 0 },
+ { 0, 0, 0x41 },
+ { 0, 0, 0x53 },
+ { 0, 0, 0x4E },
+ { 47, 66, 0 },
+ { 48, 57, 0 },
+ { 49, 54, 0 },
+ { 50, 53, 0 },
+ { 51, 52, 0 },
+ { 0, 0, 0x52 },
+ { 0, 0, 0x64 },
+ { 0, 0, 0x27 },
+ { 55, 56, 0 },
+ { 0, 0, 0x44 },
+ { 0, 0, 0x4C },
+ { 58, 63, 0 },
+ { 59, 62, 0 },
+ { 60, 61, 0 },
+ { 0, 0, 0x67 },
+ { 0, 0, 0x43 },
+ { 0, 0, 0x63 },
+ { 64, 65, 0 },
+ { 0, 0, 0x48 },
+ { 0, 0, 0x21 },
+ { 67, 84, 0 },
+ { 68, 77, 0 },
+ { 69, 74, 0 },
+ { 70, 73, 0 },
+ { 71, 72, 0 },
+ { 0, 0, 0x55 },
+ { 0, 0, 0x77 },
+ { 0, 0, 0x66 },
+ { 75, 76, 0 },
+ { 0, 0, 0x50 },
+ { 0, 0, 0x4D },
+ { 78, 81, 0 },
+ { 79, 80, 0 },
+ { 0, 0, 0x62 },
+ { 0, 0, 0x57 },
+ { 82, 83, 0 },
+ { 0, 0, 0x3F },
+ { 0, 0, 0x47 },
+ { 85, 94, 0 },
+ { 86, 91, 0 },
+ { 87, 90, 0 },
+ { 88, 89, 0 },
+ { 0, 0, 0x59 },
+ { 0, 0, 0x2C },
+ { 0, 0, 0x70 },
+ { 92, 93, 0 },
+ { 0, 0, 0x42 },
+ { 0, 0, 0x6B },
+ { 95, 100, 0 },
+ { 96, 99, 0 },
+ { 97, 98, 0 },
+ { 0, 0, 0x76 },
+ { 0, 0, 0x46 },
+ { 0, 0, 0x4B },
+ { 101, 106, 0 },
+ { 102, 105, 0 },
+ { 103, 104, 0 },
+ { 0, 0, 0x2D },
+ { 0, 0, 0x56 },
+ { 0, 0, 0x4A },
+ { 107, 120, 0 },
+ { 108, 113, 0 },
+ { 109, 112, 0 },
+ { 110, 111, 0 },
+ { 0, 0, 0x3A },
+ { 0, 0, 0x58 },
+ { 0, 0, 0x6A },
+ { 114, 117, 0 },
+ { 115, 116, 0 },
+ { 0, 0, 0x60 },
+ { 0, 0, 0x5A },
+ { 118, 119, 0 },
+ { 0, 0, 0x78 },
+ { 0, 0, 0x30 },
+ { 121, 132, 0 },
+ { 122, 127, 0 },
+ { 123, 126, 0 },
+ { 124, 125, 0 },
+ { 0, 0, 0x32 },
+ { 0, 0, 0x31 },
+ { 0, 0, 0x51 },
+ { 128, 131, 0 },
+ { 129, 130, 0 },
+ { 0, 0, 0x33 },
+ { 0, 0, 0x39 },
+ { 0, 0, 0x71 },
+ { 133, 142, 0 },
+ { 134, 137, 0 },
+ { 135, 136, 0 },
+ { 0, 0, 0x34 },
+ { 0, 0, 0x38 },
+ { 138, 141, 0 },
+ { 139, 140, 0 },
+ { 0, 0, 0x35 },
+ { 0, 0, 0x7A },
+ { 0, 0, 0x26 },
+ { 143, 150, 0 },
+ { 144, 147, 0 },
+ { 145, 146, 0 },
+ { 0, 0, 0x36 },
+ { 0, 0, 0x29 },
+ { 148, 149, 0 },
+ { 0, 0, 0x28 },
+ { 0, 0, 0x37 },
+ { 151, 158, 0 },
+ { 152, 155, 0 },
+ { 153, 154, 0 },
+ { 0, 0, 0x24 },
+ { 0, 0, 0x22 },
+ { 156, 157, 0 },
+ { 0, 0, 0x2F },
+ { 0, 0, 0x3C },
+ { 159, 162, 0 },
+ { 160, 161, 0 },
+ { 0, 0, 0x3E },
+ { 0, 0, 0x25 },
+ { 163, 164, 0 },
+ { 0, 0, 0x23 },
+ { 165, 166, 0 },
+ { 0, 0, 0x5F },
+ { 0, 0, 0x7C }
+ };
+ writeRecord(_huffTree_00109, sizeof(_huffTree_00109), GBVARS_HUFFTREE_00109_INDEX , GBVARS_SKY);
+}
+
+static void addHufftext_huffTree_00267() {
+ HuffTree _huffTree_00267[] = {
+ { 1, 20, 0 },
+ { 2, 7, 0 },
+ { 3, 6, 0 },
+ { 4, 5, 0 },
+ { 0, 0, 0x20 },
+ { 0, 0, 0x65 },
+ { 0, 0, 0x73 },
+ { 8, 15, 0 },
+ { 9, 12, 0 },
+ { 10, 11, 0 },
+ { 0, 0, 0x6d },
+ { 0, 0, 0x61 },
+ { 13, 14, 0 },
+ { 0, 0, 0x0 },
+ { 0, 0, 0x6e },
+ { 16, 19, 0 },
+ { 17, 18, 0 },
+ { 0, 0, 0x69 },
+ { 0, 0, 0x74 },
+ { 0, 0, 0x75 },
+ { 21, 44, 0 },
+ { 22, 31, 0 },
+ { 23, 28, 0 },
+ { 24, 27, 0 },
+ { 25, 26, 0 },
+ { 0, 0, 0x2e },
+ { 0, 0, 0x72 },
+ { 0, 0, 0x45 },
+ { 29, 30, 0 },
+ { 0, 0, 0x6f },
+ { 0, 0, 0x68 },
+ { 32, 39, 0 },
+ { 33, 36, 0 },
+ { 34, 35, 0 },
+ { 0, 0, 0x44 },
+ { 0, 0, 0x67 },
+ { 37, 38, 0 },
+ { 0, 0, 0x49 },
+ { 0, 0, 0x79 },
+ { 40, 43, 0 },
+ { 41, 42, 0 },
+ { 0, 0, 0x53 },
+ { 0, 0, 0x64 },
+ { 0, 0, 0x6c },
+ { 45, 64, 0 },
+ { 46, 53, 0 },
+ { 47, 50, 0 },
+ { 48, 49, 0 },
+ { 0, 0, 0x54 },
+ { 0, 0, 0x4e },
+ { 51, 52, 0 },
+ { 0, 0, 0x63 },
+ { 0, 0, 0x52 },
+ { 54, 59, 0 },
+ { 55, 58, 0 },
+ { 56, 57, 0 },
+ { 0, 0, 0x41 },
+ { 0, 0, 0x4f },
+ { 0, 0, 0x4c },
+ { 60, 63, 0 },
+ { 61, 62, 0 },
+ { 0, 0, 0x48 },
+ { 0, 0, 0x43 },
+ { 0, 0, 0x55 },
+ { 65, 84, 0 },
+ { 66, 75, 0 },
+ { 67, 72, 0 },
+ { 68, 71, 0 },
+ { 69, 70, 0 },
+ { 0, 0, 0x62 },
+ { 0, 0, 0x21 },
+ { 0, 0, 0x27 },
+ { 73, 74, 0 },
+ { 0, 0, 0x77 },
+ { 0, 0, 0x66 },
+ { 76, 81, 0 },
+ { 77, 80, 0 },
+ { 78, 79, 0 },
+ { 0, 0, 0x47 },
+ { 0, 0, 0x4d },
+ { 0, 0, 0x2c },
+ { 82, 83, 0 },
+ { 0, 0, 0x57 },
+ { 0, 0, 0x42 },
+ { 85, 98, 0 },
+ { 86, 93, 0 },
+ { 87, 90, 0 },
+ { 88, 89, 0 },
+ { 0, 0, 0x3f },
+ { 0, 0, 0x50 },
+ { 91, 92, 0 },
+ { 0, 0, 0x6b },
+ { 0, 0, 0x70 },
+ { 94, 97, 0 },
+ { 95, 96, 0 },
+ { 0, 0, 0x76 },
+ { 0, 0, 0x46 },
+ { 0, 0, 0x4b },
+ { 99, 110, 0 },
+ { 100, 105, 0 },
+ { 101, 104, 0 },
+ { 102, 103, 0 },
+ { 0, 0, 0x56 },
+ { 0, 0, 0x59 },
+ { 0, 0, 0x7a },
+ { 106, 109, 0 },
+ { 107, 108, 0 },
+ { 0, 0, 0x2d },
+ { 0, 0, 0x23 },
+ { 0, 0, 0x4a },
+ { 111, 124, 0 },
+ { 112, 117, 0 },
+ { 113, 116, 0 },
+ { 114, 115, 0 },
+ { 0, 0, 0x5a },
+ { 0, 0, 0x28 },
+ { 0, 0, 0x29 },
+ { 118, 121, 0 },
+ { 119, 120, 0 },
+ { 0, 0, 0x6a },
+ { 0, 0, 0x2b },
+ { 122, 123, 0 },
+ { 0, 0, 0x2a },
+ { 0, 0, 0x71 },
+ { 125, 138, 0 },
+ { 126, 131, 0 },
+ { 127, 130, 0 },
+ { 128, 129, 0 },
+ { 0, 0, 0x7d },
+ { 0, 0, 0x3a },
+ { 0, 0, 0x60 },
+ { 132, 135, 0 },
+ { 133, 134, 0 },
+ { 0, 0, 0x30 },
+ { 0, 0, 0x32 },
+ { 136, 137, 0 },
+ { 0, 0, 0x31 },
+ { 0, 0, 0x51 },
+ { 139, 150, 0 },
+ { 140, 145, 0 },
+ { 141, 144, 0 },
+ { 142, 143, 0 },
+ { 0, 0, 0x58 },
+ { 0, 0, 0x78 },
+ { 0, 0, 0x33 },
+ { 146, 149, 0 },
+ { 147, 148, 0 },
+ { 0, 0, 0x39 },
+ { 0, 0, 0x34 },
+ { 0, 0, 0x3c },
+ { 151, 160, 0 },
+ { 152, 157, 0 },
+ { 153, 156, 0 },
+ { 154, 155, 0 },
+ { 0, 0, 0x38 },
+ { 0, 0, 0x5d },
+ { 0, 0, 0x3d },
+ { 158, 159, 0 },
+ { 0, 0, 0x26 },
+ { 0, 0, 0x35 },
+ { 161, 168, 0 },
+ { 162, 165, 0 },
+ { 163, 164, 0 },
+ { 0, 0, 0x36 },
+ { 0, 0, 0x2f },
+ { 166, 167, 0 },
+ { 0, 0, 0x37 },
+ { 0, 0, 0x24 },
+ { 169, 174, 0 },
+ { 170, 173, 0 },
+ { 171, 172, 0 },
+ { 0, 0, 0x3e },
+ { 0, 0, 0x25 },
+ { 0, 0, 0x5e },
+ { 175, 180, 0 },
+ { 176, 179, 0 },
+ { 177, 178, 0 },
+ { 0, 0, 0x22 },
+ { 0, 0, 0x40 },
+ { 0, 0, 0x5b },
+ { 181, 184, 0 },
+ { 182, 183, 0 },
+ { 0, 0, 0x5f },
+ { 0, 0, 0x7b },
+ { 185, 186, 0 },
+ { 0, 0, 0x5c },
+ { 0, 0, 0x7c },
+ };
+ writeRecord(_huffTree_00267, sizeof(_huffTree_00267), GBVARS_HUFFTREE_00267_INDEX , GBVARS_SKY);
+}
+
+static void addHufftext_huffTree_00288() {
+ HuffTree _huffTree_00288[] = {
+ { 1, 20, 0 },
+ { 2, 7, 0 },
+ { 3, 4, 0 },
+ { 0, 0, 0x20 },
+ { 5, 6, 0 },
+ { 0, 0, 0x65 },
+ { 0, 0, 0x73 },
+ { 8, 15, 0 },
+ { 9, 12, 0 },
+ { 10, 11, 0 },
+ { 0, 0, 0x6e },
+ { 0, 0, 0x69 },
+ { 13, 14, 0 },
+ { 0, 0, 0x74 },
+ { 0, 0, 0x61 },
+ { 16, 19, 0 },
+ { 17, 18, 0 },
+ { 0, 0, 0x2e },
+ { 0, 0, 0x0 },
+ { 0, 0, 0x45 },
+ { 21, 44, 0 },
+ { 22, 31, 0 },
+ { 23, 28, 0 },
+ { 24, 27, 0 },
+ { 25, 26, 0 },
+ { 0, 0, 0x72 },
+ { 0, 0, 0x6f },
+ { 0, 0, 0x75 },
+ { 29, 30, 0 },
+ { 0, 0, 0x6d },
+ { 0, 0, 0x68 },
+ { 32, 39, 0 },
+ { 33, 36, 0 },
+ { 34, 35, 0 },
+ { 0, 0, 0x49 },
+ { 0, 0, 0x6c },
+ { 37, 38, 0 },
+ { 0, 0, 0x53 },
+ { 0, 0, 0x52 },
+ { 40, 43, 0 },
+ { 41, 42, 0 },
+ { 0, 0, 0x64 },
+ { 0, 0, 0x4e },
+ { 0, 0, 0x54 },
+ { 45, 68, 0 },
+ { 46, 55, 0 },
+ { 47, 52, 0 },
+ { 48, 51, 0 },
+ { 49, 50, 0 },
+ { 0, 0, 0x63 },
+ { 0, 0, 0x41 },
+ { 0, 0, 0x4f },
+ { 53, 54, 0 },
+ { 0, 0, 0x44 },
+ { 0, 0, 0x4c },
+ { 56, 63, 0 },
+ { 57, 60, 0 },
+ { 58, 59, 0 },
+ { 0, 0, 0x43 },
+ { 0, 0, 0x67 },
+ { 61, 62, 0 },
+ { 0, 0, 0x55 },
+ { 0, 0, 0x27 },
+ { 64, 67, 0 },
+ { 65, 66, 0 },
+ { 0, 0, 0x79 },
+ { 0, 0, 0x48 },
+ { 0, 0, 0x70 },
+ { 69, 88, 0 },
+ { 70, 79, 0 },
+ { 71, 76, 0 },
+ { 72, 75, 0 },
+ { 73, 74, 0 },
+ { 0, 0, 0x21 },
+ { 0, 0, 0x4d },
+ { 0, 0, 0x62 },
+ { 77, 78, 0 },
+ { 0, 0, 0x76 },
+ { 0, 0, 0x2c },
+ { 80, 85, 0 },
+ { 81, 84, 0 },
+ { 82, 83, 0 },
+ { 0, 0, 0x50 },
+ { 0, 0, 0x66 },
+ { 0, 0, 0x3f },
+ { 86, 87, 0 },
+ { 0, 0, 0x47 },
+ { 0, 0, 0x42 },
+ { 89, 104, 0 },
+ { 90, 97, 0 },
+ { 91, 94, 0 },
+ { 92, 93, 0 },
+ { 0, 0, 0x77 },
+ { 0, 0, 0x57 },
+ { 95, 96, 0 },
+ { 0, 0, 0x46 },
+ { 0, 0, 0x56 },
+ { 98, 101, 0 },
+ { 99, 100, 0 },
+ { 0, 0, 0x6b },
+ { 0, 0, 0x7a },
+ { 102, 103, 0 },
+ { 0, 0, 0x4b },
+ { 0, 0, 0x2d },
+ { 105, 116, 0 },
+ { 106, 111, 0 },
+ { 107, 110, 0 },
+ { 108, 109, 0 },
+ { 0, 0, 0x4a },
+ { 0, 0, 0x2b },
+ { 0, 0, 0x71 },
+ { 112, 115, 0 },
+ { 113, 114, 0 },
+ { 0, 0, 0x59 },
+ { 0, 0, 0x6a },
+ { 0, 0, 0x5a },
+ { 117, 132, 0 },
+ { 118, 125, 0 },
+ { 119, 122, 0 },
+ { 120, 121, 0 },
+ { 0, 0, 0x23 },
+ { 0, 0, 0x51 },
+ { 123, 124, 0 },
+ { 0, 0, 0x28 },
+ { 0, 0, 0x29 },
+ { 126, 129, 0 },
+ { 127, 128, 0 },
+ { 0, 0, 0x3c },
+ { 0, 0, 0x78 },
+ { 130, 131, 0 },
+ { 0, 0, 0x3a },
+ { 0, 0, 0x2a },
+ { 133, 146, 0 },
+ { 134, 141, 0 },
+ { 135, 138, 0 },
+ { 136, 137, 0 },
+ { 0, 0, 0x58 },
+ { 0, 0, 0x7d },
+ { 139, 140, 0 },
+ { 0, 0, 0x3d },
+ { 0, 0, 0x60 },
+ { 142, 145, 0 },
+ { 143, 144, 0 },
+ { 0, 0, 0x5d },
+ { 0, 0, 0x30 },
+ { 0, 0, 0x32 },
+ { 147, 158, 0 },
+ { 148, 153, 0 },
+ { 149, 152, 0 },
+ { 150, 151, 0 },
+ { 0, 0, 0x31 },
+ { 0, 0, 0x33 },
+ { 0, 0, 0x39 },
+ { 154, 157, 0 },
+ { 155, 156, 0 },
+ { 0, 0, 0x2f },
+ { 0, 0, 0x34 },
+ { 0, 0, 0x5e },
+ { 159, 168, 0 },
+ { 160, 165, 0 },
+ { 161, 164, 0 },
+ { 162, 163, 0 },
+ { 0, 0, 0x38 },
+ { 0, 0, 0x3e },
+ { 0, 0, 0x26 },
+ { 166, 167, 0 },
+ { 0, 0, 0x35 },
+ { 0, 0, 0x40 },
+ { 169, 176, 0 },
+ { 170, 173, 0 },
+ { 171, 172, 0 },
+ { 0, 0, 0x36 },
+ { 0, 0, 0x5f },
+ { 174, 175, 0 },
+ { 0, 0, 0x5c },
+ { 0, 0, 0x37 },
+ { 177, 182, 0 },
+ { 178, 181, 0 },
+ { 179, 180, 0 },
+ { 0, 0, 0x5b },
+ { 0, 0, 0x24 },
+ { 0, 0, 0x7b },
+ { 183, 186, 0 },
+ { 184, 185, 0 },
+ { 0, 0, 0x25 },
+ { 0, 0, 0x9 },
+ { 187, 188, 0 },
+ { 0, 0, 0x22 },
+ { 0, 0, 0x7c },
+ };
+ writeRecord(_huffTree_00288, sizeof(_huffTree_00288), GBVARS_HUFFTREE_00288_INDEX , GBVARS_SKY);
+}
+
+static void addHufftext_huffTree_00303() {
+ HuffTree _huffTree_00303[] = {
+ { 1, 22, 0 },
+ { 2, 9, 0 },
+ { 3, 6, 0 },
+ { 4, 5, 0 },
+ { 0, 0, 0x20 },
+ { 0, 0, 0x65 },
+ { 7, 8, 0 },
+ { 0, 0, 0x74 },
+ { 0, 0, 0x73 },
+ { 10, 17, 0 },
+ { 11, 14, 0 },
+ { 12, 13, 0 },
+ { 0, 0, 0x6e },
+ { 0, 0, 0x61 },
+ { 15, 16, 0 },
+ { 0, 0, 0x69 },
+ { 0, 0, 0x2e },
+ { 18, 21, 0 },
+ { 19, 20, 0 },
+ { 0, 0, 0x6f },
+ { 0, 0, 0x0 },
+ { 0, 0, 0x45 },
+ { 23, 46, 0 },
+ { 24, 35, 0 },
+ { 25, 30, 0 },
+ { 26, 29, 0 },
+ { 27, 28, 0 },
+ { 0, 0, 0x72 },
+ { 0, 0, 0x75 },
+ { 0, 0, 0x68 },
+ { 31, 34, 0 },
+ { 32, 33, 0 },
+ { 0, 0, 0x49 },
+ { 0, 0, 0x6d },
+ { 0, 0, 0x6c },
+ { 36, 41, 0 },
+ { 37, 40, 0 },
+ { 38, 39, 0 },
+ { 0, 0, 0x54 },
+ { 0, 0, 0x53 },
+ { 0, 0, 0x52 },
+ { 42, 45, 0 },
+ { 43, 44, 0 },
+ { 0, 0, 0x64 },
+ { 0, 0, 0x4e },
+ { 0, 0, 0x41 },
+ { 47, 70, 0 },
+ { 48, 59, 0 },
+ { 49, 54, 0 },
+ { 50, 53, 0 },
+ { 51, 52, 0 },
+ { 0, 0, 0x63 },
+ { 0, 0, 0x4f },
+ { 0, 0, 0x44 },
+ { 55, 58, 0 },
+ { 56, 57, 0 },
+ { 0, 0, 0x4c },
+ { 0, 0, 0x43 },
+ { 0, 0, 0x79 },
+ { 60, 65, 0 },
+ { 61, 64, 0 },
+ { 62, 63, 0 },
+ { 0, 0, 0x67 },
+ { 0, 0, 0x27 },
+ { 0, 0, 0x55 },
+ { 66, 69, 0 },
+ { 67, 68, 0 },
+ { 0, 0, 0x48 },
+ { 0, 0, 0x21 },
+ { 0, 0, 0x70 },
+ { 71, 88, 0 },
+ { 72, 81, 0 },
+ { 73, 78, 0 },
+ { 74, 77, 0 },
+ { 75, 76, 0 },
+ { 0, 0, 0x4d },
+ { 0, 0, 0x62 },
+ { 0, 0, 0x3f },
+ { 79, 80, 0 },
+ { 0, 0, 0x76 },
+ { 0, 0, 0x66 },
+ { 82, 85, 0 },
+ { 83, 84, 0 },
+ { 0, 0, 0x50 },
+ { 0, 0, 0x2c },
+ { 86, 87, 0 },
+ { 0, 0, 0x77 },
+ { 0, 0, 0x47 },
+ { 89, 102, 0 },
+ { 90, 95, 0 },
+ { 91, 94, 0 },
+ { 92, 93, 0 },
+ { 0, 0, 0x42 },
+ { 0, 0, 0x57 },
+ { 0, 0, 0x6b },
+ { 96, 99, 0 },
+ { 97, 98, 0 },
+ { 0, 0, 0x46 },
+ { 0, 0, 0x56 },
+ { 100, 101, 0 },
+ { 0, 0, 0x59 },
+ { 0, 0, 0x4b },
+ { 103, 114, 0 },
+ { 104, 109, 0 },
+ { 105, 108, 0 },
+ { 106, 107, 0 },
+ { 0, 0, 0x2d },
+ { 0, 0, 0x7a },
+ { 0, 0, 0x4a },
+ { 110, 113, 0 },
+ { 111, 112, 0 },
+ { 0, 0, 0x71 },
+ { 0, 0, 0x2b },
+ { 0, 0, 0x6a },
+ { 115, 132, 0 },
+ { 116, 123, 0 },
+ { 117, 120, 0 },
+ { 118, 119, 0 },
+ { 0, 0, 0x5a },
+ { 0, 0, 0x23 },
+ { 121, 122, 0 },
+ { 0, 0, 0x51 },
+ { 0, 0, 0x78 },
+ { 124, 129, 0 },
+ { 125, 128, 0 },
+ { 126, 127, 0 },
+ { 0, 0, 0x3a },
+ { 0, 0, 0x29 },
+ { 0, 0, 0x28 },
+ { 130, 131, 0 },
+ { 0, 0, 0x3c },
+ { 0, 0, 0x58 },
+ { 133, 148, 0 },
+ { 134, 141, 0 },
+ { 135, 138, 0 },
+ { 136, 137, 0 },
+ { 0, 0, 0x2a },
+ { 0, 0, 0x60 },
+ { 139, 140, 0 },
+ { 0, 0, 0x7d },
+ { 0, 0, 0x3d },
+ { 142, 145, 0 },
+ { 143, 144, 0 },
+ { 0, 0, 0x32 },
+ { 0, 0, 0x30 },
+ { 146, 147, 0 },
+ { 0, 0, 0x5d },
+ { 0, 0, 0x31 },
+ { 149, 160, 0 },
+ { 150, 155, 0 },
+ { 151, 154, 0 },
+ { 152, 153, 0 },
+ { 0, 0, 0x7e },
+ { 0, 0, 0x33 },
+ { 0, 0, 0x7f },
+ { 156, 159, 0 },
+ { 157, 158, 0 },
+ { 0, 0, 0x39 },
+ { 0, 0, 0x34 },
+ { 0, 0, 0x2f },
+ { 161, 172, 0 },
+ { 162, 167, 0 },
+ { 163, 166, 0 },
+ { 164, 165, 0 },
+ { 0, 0, 0x38 },
+ { 0, 0, 0x5e },
+ { 0, 0, 0x26 },
+ { 168, 171, 0 },
+ { 169, 170, 0 },
+ { 0, 0, 0x35 },
+ { 0, 0, 0x36 },
+ { 0, 0, 0x3e },
+ { 173, 182, 0 },
+ { 174, 179, 0 },
+ { 175, 178, 0 },
+ { 176, 177, 0 },
+ { 0, 0, 0x40 },
+ { 0, 0, 0x37 },
+ { 0, 0, 0x5f },
+ { 180, 181, 0 },
+ { 0, 0, 0x5c },
+ { 0, 0, 0x24 },
+ { 183, 190, 0 },
+ { 184, 187, 0 },
+ { 185, 186, 0 },
+ { 0, 0, 0x5b },
+ { 0, 0, 0x80 },
+ { 188, 189, 0 },
+ { 0, 0, 0x81 },
+ { 0, 0, 0x22 },
+ { 191, 194, 0 },
+ { 192, 193, 0 },
+ { 0, 0, 0x25 },
+ { 0, 0, 0x82 },
+ { 195, 196, 0 },
+ { 0, 0, 0x7b },
+ { 197, 198, 0 },
+ { 0, 0, 0x9 },
+ { 0, 0, 0x7c },
+ };
+ writeRecord(_huffTree_00303, sizeof(_huffTree_00303), GBVARS_HUFFTREE_00303_INDEX , GBVARS_SKY);
+}
+
+static void addHufftext_huffTree_00331() {
+ HuffTree _huffTree_00331[] = {
+ { 1, 20, 0 },
+ { 2, 7, 0 },
+ { 3, 4, 0 },
+ { 0, 0, 0x20 },
+ { 5, 6, 0 },
+ { 0, 0, 0x65 },
+ { 0, 0, 0x61 },
+ { 8, 15, 0 },
+ { 9, 12, 0 },
+ { 10, 11, 0 },
+ { 0, 0, 0x6f },
+ { 0, 0, 0x73 },
+ { 13, 14, 0 },
+ { 0, 0, 0x74 },
+ { 0, 0, 0x6e },
+ { 16, 19, 0 },
+ { 17, 18, 0 },
+ { 0, 0, 0x2e },
+ { 0, 0, 0x69 },
+ { 0, 0, 0x72 },
+ { 21, 44, 0 },
+ { 22, 31, 0 },
+ { 23, 28, 0 },
+ { 24, 27, 0 },
+ { 25, 26, 0 },
+ { 0, 0, 0x0 },
+ { 0, 0, 0x45 },
+ { 0, 0, 0x75 },
+ { 29, 30, 0 },
+ { 0, 0, 0x6d },
+ { 0, 0, 0x41 },
+ { 32, 39, 0 },
+ { 33, 36, 0 },
+ { 34, 35, 0 },
+ { 0, 0, 0x6c },
+ { 0, 0, 0x49 },
+ { 37, 38, 0 },
+ { 0, 0, 0x64 },
+ { 0, 0, 0x52 },
+ { 40, 43, 0 },
+ { 41, 42, 0 },
+ { 0, 0, 0x4e },
+ { 0, 0, 0x53 },
+ { 0, 0, 0x54 },
+ { 45, 68, 0 },
+ { 46, 55, 0 },
+ { 47, 52, 0 },
+ { 48, 51, 0 },
+ { 49, 50, 0 },
+ { 0, 0, 0x4f },
+ { 0, 0, 0x68 },
+ { 0, 0, 0x63 },
+ { 53, 54, 0 },
+ { 0, 0, 0x44 },
+ { 0, 0, 0x67 },
+ { 56, 63, 0 },
+ { 57, 60, 0 },
+ { 58, 59, 0 },
+ { 0, 0, 0x4c },
+ { 0, 0, 0x43 },
+ { 61, 62, 0 },
+ { 0, 0, 0x70 },
+ { 0, 0, 0x55 },
+ { 64, 67, 0 },
+ { 65, 66, 0 },
+ { 0, 0, 0x21 },
+ { 0, 0, 0x79 },
+ { 0, 0, 0x4d },
+ { 69, 88, 0 },
+ { 70, 79, 0 },
+ { 71, 76, 0 },
+ { 72, 75, 0 },
+ { 73, 74, 0 },
+ { 0, 0, 0x50 },
+ { 0, 0, 0x76 },
+ { 0, 0, 0x48 },
+ { 77, 78, 0 },
+ { 0, 0, 0x3f },
+ { 0, 0, 0x62 },
+ { 80, 85, 0 },
+ { 81, 84, 0 },
+ { 82, 83, 0 },
+ { 0, 0, 0x27 },
+ { 0, 0, 0x66 },
+ { 0, 0, 0x2c },
+ { 86, 87, 0 },
+ { 0, 0, 0x47 },
+ { 0, 0, 0x42 },
+ { 89, 108, 0 },
+ { 90, 99, 0 },
+ { 91, 96, 0 },
+ { 92, 95, 0 },
+ { 93, 94, 0 },
+ { 0, 0, 0x56 },
+ { 0, 0, 0x6b },
+ { 0, 0, 0x46 },
+ { 97, 98, 0 },
+ { 0, 0, 0x71 },
+ { 0, 0, 0x2a },
+ { 100, 105, 0 },
+ { 101, 104, 0 },
+ { 102, 103, 0 },
+ { 0, 0, 0x77 },
+ { 0, 0, 0x4b },
+ { 0, 0, 0x2d },
+ { 106, 107, 0 },
+ { 0, 0, 0x57 },
+ { 0, 0, 0x4a },
+ { 109, 126, 0 },
+ { 110, 117, 0 },
+ { 111, 114, 0 },
+ { 112, 113, 0 },
+ { 0, 0, 0x7a },
+ { 0, 0, 0x2b },
+ { 115, 116, 0 },
+ { 0, 0, 0x59 },
+ { 0, 0, 0x6a },
+ { 118, 123, 0 },
+ { 119, 122, 0 },
+ { 120, 121, 0 },
+ { 0, 0, 0x85 },
+ { 0, 0, 0x29 },
+ { 0, 0, 0x51 },
+ { 124, 125, 0 },
+ { 0, 0, 0x5a },
+ { 0, 0, 0x7e },
+ { 127, 148, 0 },
+ { 128, 137, 0 },
+ { 129, 134, 0 },
+ { 130, 133, 0 },
+ { 131, 132, 0 },
+ { 0, 0, 0x8b },
+ { 0, 0, 0x3c },
+ { 0, 0, 0x8a },
+ { 135, 136, 0 },
+ { 0, 0, 0x7f },
+ { 0, 0, 0x3a },
+ { 138, 143, 0 },
+ { 139, 142, 0 },
+ { 140, 141, 0 },
+ { 0, 0, 0x87 },
+ { 0, 0, 0x23 },
+ { 0, 0, 0x78 },
+ { 144, 147, 0 },
+ { 145, 146, 0 },
+ { 0, 0, 0x58 },
+ { 0, 0, 0x91 },
+ { 0, 0, 0x83 },
+ { 149, 168, 0 },
+ { 150, 159, 0 },
+ { 151, 156, 0 },
+ { 152, 155, 0 },
+ { 153, 154, 0 },
+ { 0, 0, 0x88 },
+ { 0, 0, 0x60 },
+ { 0, 0, 0x32 },
+ { 157, 158, 0 },
+ { 0, 0, 0x30 },
+ { 0, 0, 0x31 },
+ { 160, 165, 0 },
+ { 161, 164, 0 },
+ { 162, 163, 0 },
+ { 0, 0, 0x28 },
+ { 0, 0, 0x2f },
+ { 0, 0, 0x5d },
+ { 166, 167, 0 },
+ { 0, 0, 0x3d },
+ { 0, 0, 0x86 },
+ { 169, 184, 0 },
+ { 170, 177, 0 },
+ { 171, 174, 0 },
+ { 172, 173, 0 },
+ { 0, 0, 0x5e },
+ { 0, 0, 0x33 },
+ { 175, 176, 0 },
+ { 0, 0, 0x39 },
+ { 0, 0, 0x34 },
+ { 178, 181, 0 },
+ { 179, 180, 0 },
+ { 0, 0, 0x7d },
+ { 0, 0, 0x38 },
+ { 182, 183, 0 },
+ { 0, 0, 0x5c },
+ { 0, 0, 0x22 },
+ { 185, 198, 0 },
+ { 186, 193, 0 },
+ { 187, 190, 0 },
+ { 188, 189, 0 },
+ { 0, 0, 0x3e },
+ { 0, 0, 0x26 },
+ { 191, 192, 0 },
+ { 0, 0, 0x8d },
+ { 0, 0, 0x7b },
+ { 194, 197, 0 },
+ { 195, 196, 0 },
+ { 0, 0, 0x35 },
+ { 0, 0, 0x36 },
+ { 0, 0, 0x8f },
+ { 199, 210, 0 },
+ { 200, 205, 0 },
+ { 201, 204, 0 },
+ { 202, 203, 0 },
+ { 0, 0, 0x8e },
+ { 0, 0, 0x8c },
+ { 0, 0, 0x37 },
+ { 206, 209, 0 },
+ { 207, 208, 0 },
+ { 0, 0, 0x89 },
+ { 0, 0, 0x24 },
+ { 0, 0, 0x92 },
+ { 211, 218, 0 },
+ { 212, 215, 0 },
+ { 213, 214, 0 },
+ { 0, 0, 0x5b },
+ { 0, 0, 0x80 },
+ { 216, 217, 0 },
+ { 0, 0, 0x81 },
+ { 0, 0, 0x40 },
+ { 219, 222, 0 },
+ { 220, 221, 0 },
+ { 0, 0, 0x5f },
+ { 0, 0, 0x82 },
+ { 223, 224, 0 },
+ { 0, 0, 0x25 },
+ { 225, 226, 0 },
+ { 0, 0, 0x9 },
+ { 227, 228, 0 },
+ { 0, 0, 0x3b },
+ { 0, 0, 0x7c },
+ };
+ writeRecord(_huffTree_00331, sizeof(_huffTree_00331), GBVARS_HUFFTREE_00331_INDEX , GBVARS_SKY);
+}
+
+static void addHufftext_huffTree_00348() {
+ HuffTree _huffTree_00348[] = {
+ { 1, 20, 0 },
+ { 2, 7, 0 },
+ { 3, 4, 0 },
+ { 0, 0, 0x20 },
+ { 5, 6, 0 },
+ { 0, 0, 0x65 },
+ { 0, 0, 0x61 },
+ { 8, 15, 0 },
+ { 9, 12, 0 },
+ { 10, 11, 0 },
+ { 0, 0, 0x6F },
+ { 0, 0, 0x73 },
+ { 13, 14, 0 },
+ { 0, 0, 0x74 },
+ { 0, 0, 0x6E },
+ { 16, 19, 0 },
+ { 17, 18, 0 },
+ { 0, 0, 0x2E },
+ { 0, 0, 0x69 },
+ { 0, 0, 0x72 },
+ { 21, 44, 0 },
+ { 22, 31, 0 },
+ { 23, 28, 0 },
+ { 24, 27, 0 },
+ { 25, 26, 0 },
+ { 0, 0, 0x00 },
+ { 0, 0, 0x45 },
+ { 0, 0, 0x75 },
+ { 29, 30, 0 },
+ { 0, 0, 0x6D },
+ { 0, 0, 0x41 },
+ { 32, 39, 0 },
+ { 33, 36, 0 },
+ { 34, 35, 0 },
+ { 0, 0, 0x6C },
+ { 0, 0, 0x49 },
+ { 37, 38, 0 },
+ { 0, 0, 0x64 },
+ { 0, 0, 0x52 },
+ { 40, 43, 0 },
+ { 41, 42, 0 },
+ { 0, 0, 0x4E },
+ { 0, 0, 0x53 },
+ { 0, 0, 0x54 },
+ { 45, 68, 0 },
+ { 46, 55, 0 },
+ { 47, 52, 0 },
+ { 48, 51, 0 },
+ { 49, 50, 0 },
+ { 0, 0, 0x4F },
+ { 0, 0, 0x68 },
+ { 0, 0, 0x63 },
+ { 53, 54, 0 },
+ { 0, 0, 0x44 },
+ { 0, 0, 0x67 },
+ { 56, 63, 0 },
+ { 57, 60, 0 },
+ { 58, 59, 0 },
+ { 0, 0, 0x4C },
+ { 0, 0, 0x43 },
+ { 61, 62, 0 },
+ { 0, 0, 0x70 },
+ { 0, 0, 0x55 },
+ { 64, 67, 0 },
+ { 65, 66, 0 },
+ { 0, 0, 0x21 },
+ { 0, 0, 0x79 },
+ { 0, 0, 0x4D },
+ { 69, 88, 0 },
+ { 70, 79, 0 },
+ { 71, 76, 0 },
+ { 72, 75, 0 },
+ { 73, 74, 0 },
+ { 0, 0, 0x50 },
+ { 0, 0, 0x76 },
+ { 0, 0, 0x48 },
+ { 77, 78, 0 },
+ { 0, 0, 0x3F },
+ { 0, 0, 0x62 },
+ { 80, 85, 0 },
+ { 81, 84, 0 },
+ { 82, 83, 0 },
+ { 0, 0, 0x27 },
+ { 0, 0, 0x66 },
+ { 0, 0, 0x2C },
+ { 86, 87, 0 },
+ { 0, 0, 0x47 },
+ { 0, 0, 0x42 },
+ { 89, 108, 0 },
+ { 90, 99, 0 },
+ { 91, 96, 0 },
+ { 92, 95, 0 },
+ { 93, 94, 0 },
+ { 0, 0, 0x56 },
+ { 0, 0, 0x6B },
+ { 0, 0, 0x46 },
+ { 97, 98, 0 },
+ { 0, 0, 0x71 },
+ { 0, 0, 0x77 },
+ { 100, 105, 0 },
+ { 101, 104, 0 },
+ { 102, 103, 0 },
+ { 0, 0, 0x4B },
+ { 0, 0, 0x2D },
+ { 0, 0, 0x57 },
+ { 106, 107, 0 },
+ { 0, 0, 0x4A },
+ { 0, 0, 0x2A },
+ { 109, 128, 0 },
+ { 110, 117, 0 },
+ { 111, 114, 0 },
+ { 112, 113, 0 },
+ { 0, 0, 0x7A },
+ { 0, 0, 0x59 },
+ { 115, 116, 0 },
+ { 0, 0, 0x6A },
+ { 0, 0, 0x2B },
+ { 118, 123, 0 },
+ { 119, 122, 0 },
+ { 120, 121, 0 },
+ { 0, 0, 0x51 },
+ { 0, 0, 0x29 },
+ { 0, 0, 0x85 },
+ { 124, 127, 0 },
+ { 125, 126, 0 },
+ { 0, 0, 0x5A },
+ { 0, 0, 0x8B },
+ { 0, 0, 0x3C },
+ { 129, 150, 0 },
+ { 130, 139, 0 },
+ { 131, 136, 0 },
+ { 132, 135, 0 },
+ { 133, 134, 0 },
+ { 0, 0, 0x95 },
+ { 0, 0, 0x7E },
+ { 0, 0, 0x8A },
+ { 137, 138, 0 },
+ { 0, 0, 0x87 },
+ { 0, 0, 0x3A },
+ { 140, 145, 0 },
+ { 141, 144, 0 },
+ { 142, 143, 0 },
+ { 0, 0, 0x7F },
+ { 0, 0, 0x5D },
+ { 0, 0, 0x23 },
+ { 146, 149, 0 },
+ { 147, 148, 0 },
+ { 0, 0, 0x78 },
+ { 0, 0, 0x58 },
+ { 0, 0, 0x91 },
+ { 151, 172, 0 },
+ { 152, 163, 0 },
+ { 153, 158, 0 },
+ { 154, 157, 0 },
+ { 155, 156, 0 },
+ { 0, 0, 0x88 },
+ { 0, 0, 0x60 },
+ { 0, 0, 0x32 },
+ { 159, 162, 0 },
+ { 160, 161, 0 },
+ { 0, 0, 0x30 },
+ { 0, 0, 0x83 },
+ { 0, 0, 0x31 },
+ { 164, 169, 0 },
+ { 165, 168, 0 },
+ { 166, 167, 0 },
+ { 0, 0, 0x2F },
+ { 0, 0, 0x28 },
+ { 0, 0, 0x3D },
+ { 170, 171, 0 },
+ { 0, 0, 0x86 },
+ { 0, 0, 0x5E },
+ { 173, 190, 0 },
+ { 174, 181, 0 },
+ { 175, 178, 0 },
+ { 176, 177, 0 },
+ { 0, 0, 0x33 },
+ { 0, 0, 0x39 },
+ { 179, 180, 0 },
+ { 0, 0, 0x98 },
+ { 0, 0, 0x34 },
+ { 182, 187, 0 },
+ { 183, 186, 0 },
+ { 184, 185, 0 },
+ { 0, 0, 0x7D },
+ { 0, 0, 0x38 },
+ { 0, 0, 0x5C },
+ { 188, 189, 0 },
+ { 0, 0, 0x22 },
+ { 0, 0, 0x9B },
+ { 191, 206, 0 },
+ { 192, 199, 0 },
+ { 193, 196, 0 },
+ { 194, 195, 0 },
+ { 0, 0, 0x26 },
+ { 0, 0, 0x8D },
+ { 197, 198, 0 },
+ { 0, 0, 0x35 },
+ { 0, 0, 0x36 },
+ { 200, 203, 0 },
+ { 201, 202, 0 },
+ { 0, 0, 0x92 },
+ { 0, 0, 0x8F },
+ { 204, 205, 0 },
+ { 0, 0, 0x8E },
+ { 0, 0, 0x93 },
+ { 207, 222, 0 },
+ { 208, 215, 0 },
+ { 209, 212, 0 },
+ { 210, 211, 0 },
+ { 0, 0, 0x8C },
+ { 0, 0, 0x37 },
+ { 213, 214, 0 },
+ { 0, 0, 0x99 },
+ { 0, 0, 0x24 },
+ { 216, 219, 0 },
+ { 217, 218, 0 },
+ { 0, 0, 0x80 },
+ { 0, 0, 0x81 },
+ { 220, 221, 0 },
+ { 0, 0, 0x40 },
+ { 0, 0, 0x5B },
+ { 223, 232, 0 },
+ { 224, 229, 0 },
+ { 225, 228, 0 },
+ { 226, 227, 0 },
+ { 0, 0, 0x9A },
+ { 0, 0, 0x5F },
+ { 0, 0, 0x3E },
+ { 230, 231, 0 },
+ { 0, 0, 0x96 },
+ { 0, 0, 0x82 },
+ { 233, 238, 0 },
+ { 234, 237, 0 },
+ { 235, 236, 0 },
+ { 0, 0, 0x25 },
+ { 0, 0, 0x09 },
+ { 0, 0, 0x9C },
+ { 239, 240, 0 },
+ { 0, 0, 0x97 },
+ { 241, 242, 0 },
+ { 0, 0, 0x7B },
+ { 243, 244, 0 },
+ { 0, 0, 0x94 },
+ { 0, 0, 0x7C },
+ };
+
+ writeRecord(_huffTree_00348, sizeof(_huffTree_00348), GBVARS_HUFFTREE_00348_INDEX , GBVARS_SKY);
+}
+
+static void addHufftext_huffTree_00365() {
+ HuffTree _huffTree_00365[] = {
+ { 1, 20, 0 },
+ { 2, 7, 0 },
+ { 3, 4, 0 },
+ { 0, 0, 0x20 },
+ { 5, 6, 0 },
+ { 0, 0, 0x65 },
+ { 0, 0, 0x61 },
+ { 8, 15, 0 },
+ { 9, 12, 0 },
+ { 10, 11, 0 },
+ { 0, 0, 0x6F },
+ { 0, 0, 0x73 },
+ { 13, 14, 0 },
+ { 0, 0, 0x74 },
+ { 0, 0, 0x6E },
+ { 16, 19, 0 },
+ { 17, 18, 0 },
+ { 0, 0, 0x2E },
+ { 0, 0, 0x69 },
+ { 0, 0, 0x72 },
+ { 21, 44, 0 },
+ { 22, 31, 0 },
+ { 23, 28, 0 },
+ { 24, 27, 0 },
+ { 25, 26, 0 },
+ { 0, 0, 0x00 },
+ { 0, 0, 0x45 },
+ { 0, 0, 0x75 },
+ { 29, 30, 0 },
+ { 0, 0, 0x6D },
+ { 0, 0, 0x41 },
+ { 32, 39, 0 },
+ { 33, 36, 0 },
+ { 34, 35, 0 },
+ { 0, 0, 0x6C },
+ { 0, 0, 0x49 },
+ { 37, 38, 0 },
+ { 0, 0, 0x64 },
+ { 0, 0, 0x52 },
+ { 40, 43, 0 },
+ { 41, 42, 0 },
+ { 0, 0, 0x4E },
+ { 0, 0, 0x53 },
+ { 0, 0, 0x54 },
+ { 45, 68, 0 },
+ { 46, 55, 0 },
+ { 47, 52, 0 },
+ { 48, 51, 0 },
+ { 49, 50, 0 },
+ { 0, 0, 0x4F },
+ { 0, 0, 0x68 },
+ { 0, 0, 0x63 },
+ { 53, 54, 0 },
+ { 0, 0, 0x44 },
+ { 0, 0, 0x67 },
+ { 56, 63, 0 },
+ { 57, 60, 0 },
+ { 58, 59, 0 },
+ { 0, 0, 0x4C },
+ { 0, 0, 0x43 },
+ { 61, 62, 0 },
+ { 0, 0, 0x70 },
+ { 0, 0, 0x55 },
+ { 64, 67, 0 },
+ { 65, 66, 0 },
+ { 0, 0, 0x21 },
+ { 0, 0, 0x79 },
+ { 0, 0, 0x4D },
+ { 69, 88, 0 },
+ { 70, 79, 0 },
+ { 71, 76, 0 },
+ { 72, 75, 0 },
+ { 73, 74, 0 },
+ { 0, 0, 0x50 },
+ { 0, 0, 0x76 },
+ { 0, 0, 0x48 },
+ { 77, 78, 0 },
+ { 0, 0, 0x3F },
+ { 0, 0, 0x62 },
+ { 80, 85, 0 },
+ { 81, 84, 0 },
+ { 82, 83, 0 },
+ { 0, 0, 0x27 },
+ { 0, 0, 0x66 },
+ { 0, 0, 0x2C },
+ { 86, 87, 0 },
+ { 0, 0, 0x47 },
+ { 0, 0, 0x42 },
+ { 89, 108, 0 },
+ { 90, 99, 0 },
+ { 91, 96, 0 },
+ { 92, 95, 0 },
+ { 93, 94, 0 },
+ { 0, 0, 0x56 },
+ { 0, 0, 0x6B },
+ { 0, 0, 0x46 },
+ { 97, 98, 0 },
+ { 0, 0, 0x71 },
+ { 0, 0, 0x77 },
+ { 100, 105, 0 },
+ { 101, 104, 0 },
+ { 102, 103, 0 },
+ { 0, 0, 0x4B },
+ { 0, 0, 0x2D },
+ { 0, 0, 0x57 },
+ { 106, 107, 0 },
+ { 0, 0, 0x4A },
+ { 0, 0, 0x2A },
+ { 109, 128, 0 },
+ { 110, 117, 0 },
+ { 111, 114, 0 },
+ { 112, 113, 0 },
+ { 0, 0, 0x7A },
+ { 0, 0, 0x59 },
+ { 115, 116, 0 },
+ { 0, 0, 0x6A },
+ { 0, 0, 0x2B },
+ { 118, 123, 0 },
+ { 119, 122, 0 },
+ { 120, 121, 0 },
+ { 0, 0, 0x51 },
+ { 0, 0, 0x85 },
+ { 0, 0, 0x29 },
+ { 124, 127, 0 },
+ { 125, 126, 0 },
+ { 0, 0, 0x5A },
+ { 0, 0, 0x8B },
+ { 0, 0, 0x3C },
+ { 129, 150, 0 },
+ { 130, 139, 0 },
+ { 131, 136, 0 },
+ { 132, 135, 0 },
+ { 133, 134, 0 },
+ { 0, 0, 0x95 },
+ { 0, 0, 0x7E },
+ { 0, 0, 0x8A },
+ { 137, 138, 0 },
+ { 0, 0, 0x87 },
+ { 0, 0, 0x3A },
+ { 140, 145, 0 },
+ { 141, 144, 0 },
+ { 142, 143, 0 },
+ { 0, 0, 0x7F },
+ { 0, 0, 0x5D },
+ { 0, 0, 0x23 },
+ { 146, 149, 0 },
+ { 147, 148, 0 },
+ { 0, 0, 0x78 },
+ { 0, 0, 0x58 },
+ { 0, 0, 0x91 },
+ { 151, 172, 0 },
+ { 152, 163, 0 },
+ { 153, 158, 0 },
+ { 154, 157, 0 },
+ { 155, 156, 0 },
+ { 0, 0, 0x88 },
+ { 0, 0, 0x60 },
+ { 0, 0, 0x32 },
+ { 159, 162, 0 },
+ { 160, 161, 0 },
+ { 0, 0, 0x30 },
+ { 0, 0, 0x83 },
+ { 0, 0, 0x31 },
+ { 164, 169, 0 },
+ { 165, 168, 0 },
+ { 166, 167, 0 },
+ { 0, 0, 0x2F },
+ { 0, 0, 0x28 },
+ { 0, 0, 0x3D },
+ { 170, 171, 0 },
+ { 0, 0, 0x86 },
+ { 0, 0, 0x5E },
+ { 173, 190, 0 },
+ { 174, 181, 0 },
+ { 175, 178, 0 },
+ { 176, 177, 0 },
+ { 0, 0, 0x33 },
+ { 0, 0, 0x39 },
+ { 179, 180, 0 },
+ { 0, 0, 0x98 },
+ { 0, 0, 0x34 },
+ { 182, 187, 0 },
+ { 183, 186, 0 },
+ { 184, 185, 0 },
+ { 0, 0, 0x7D },
+ { 0, 0, 0x38 },
+ { 0, 0, 0x5C },
+ { 188, 189, 0 },
+ { 0, 0, 0x22 },
+ { 0, 0, 0x90 },
+ { 191, 206, 0 },
+ { 192, 199, 0 },
+ { 193, 196, 0 },
+ { 194, 195, 0 },
+ { 0, 0, 0x26 },
+ { 0, 0, 0x8D },
+ { 197, 198, 0 },
+ { 0, 0, 0x35 },
+ { 0, 0, 0x36 },
+ { 200, 203, 0 },
+ { 201, 202, 0 },
+ { 0, 0, 0x92 },
+ { 0, 0, 0x8F },
+ { 204, 205, 0 },
+ { 0, 0, 0x8E },
+ { 0, 0, 0x93 },
+ { 207, 220, 0 },
+ { 208, 213, 0 },
+ { 209, 212, 0 },
+ { 210, 211, 0 },
+ { 0, 0, 0x8C },
+ { 0, 0, 0x37 },
+ { 0, 0, 0x80 },
+ { 214, 217, 0 },
+ { 215, 216, 0 },
+ { 0, 0, 0x81 },
+ { 0, 0, 0x99 },
+ { 218, 219, 0 },
+ { 0, 0, 0x24 },
+ { 0, 0, 0x40 },
+ { 221, 230, 0 },
+ { 222, 227, 0 },
+ { 223, 226, 0 },
+ { 224, 225, 0 },
+ { 0, 0, 0x5B },
+ { 0, 0, 0x9A },
+ { 0, 0, 0x5F },
+ { 228, 229, 0 },
+ { 0, 0, 0x3E },
+ { 0, 0, 0x96 },
+ { 231, 236, 0 },
+ { 232, 235, 0 },
+ { 233, 234, 0 },
+ { 0, 0, 0x82 },
+ { 0, 0, 0x25 },
+ { 0, 0, 0x09 },
+ { 237, 240, 0 },
+ { 238, 239, 0 },
+ { 0, 0, 0x9C },
+ { 0, 0, 0x97 },
+ { 241, 242, 0 },
+ { 0, 0, 0x7B },
+ { 243, 244, 0 },
+ { 0, 0, 0x94 },
+ { 0, 0, 0x7C },
+ };
+ writeRecord(_huffTree_00365, sizeof(_huffTree_00365), GBVARS_HUFFTREE_00365_INDEX , GBVARS_SKY);
+}
+
+static void addHufftext_huffTree_00368() {
+ HuffTree _huffTree_00368[] = {
+ { 1, 20, 0 },
+ { 2, 7, 0 },
+ { 3, 4, 0 },
+ { 0, 0, 0x20 },
+ { 5, 6, 0 },
+ { 0, 0, 0x65 },
+ { 0, 0, 0x61 },
+ { 8, 15, 0 },
+ { 9, 12, 0 },
+ { 10, 11, 0 },
+ { 0, 0, 0x6F },
+ { 0, 0, 0x73 },
+ { 13, 14, 0 },
+ { 0, 0, 0x74 },
+ { 0, 0, 0x6E },
+ { 16, 19, 0 },
+ { 17, 18, 0 },
+ { 0, 0, 0x2E },
+ { 0, 0, 0x69 },
+ { 0, 0, 0x72 },
+ { 21, 44, 0 },
+ { 22, 31, 0 },
+ { 23, 28, 0 },
+ { 24, 27, 0 },
+ { 25, 26, 0 },
+ { 0, 0, 0x00 },
+ { 0, 0, 0x45 },
+ { 0, 0, 0x75 },
+ { 29, 30, 0 },
+ { 0, 0, 0x6D },
+ { 0, 0, 0x41 },
+ { 32, 39, 0 },
+ { 33, 36, 0 },
+ { 34, 35, 0 },
+ { 0, 0, 0x6C },
+ { 0, 0, 0x49 },
+ { 37, 38, 0 },
+ { 0, 0, 0x64 },
+ { 0, 0, 0x52 },
+ { 40, 43, 0 },
+ { 41, 42, 0 },
+ { 0, 0, 0x4E },
+ { 0, 0, 0x53 },
+ { 0, 0, 0x54 },
+ { 45, 68, 0 },
+ { 46, 55, 0 },
+ { 47, 52, 0 },
+ { 48, 51, 0 },
+ { 49, 50, 0 },
+ { 0, 0, 0x4F },
+ { 0, 0, 0x68 },
+ { 0, 0, 0x63 },
+ { 53, 54, 0 },
+ { 0, 0, 0x44 },
+ { 0, 0, 0x67 },
+ { 56, 63, 0 },
+ { 57, 60, 0 },
+ { 58, 59, 0 },
+ { 0, 0, 0x4C },
+ { 0, 0, 0x43 },
+ { 61, 62, 0 },
+ { 0, 0, 0x70 },
+ { 0, 0, 0x55 },
+ { 64, 67, 0 },
+ { 65, 66, 0 },
+ { 0, 0, 0x21 },
+ { 0, 0, 0x79 },
+ { 0, 0, 0x4D },
+ { 69, 88, 0 },
+ { 70, 79, 0 },
+ { 71, 76, 0 },
+ { 72, 75, 0 },
+ { 73, 74, 0 },
+ { 0, 0, 0x50 },
+ { 0, 0, 0x76 },
+ { 0, 0, 0x48 },
+ { 77, 78, 0 },
+ { 0, 0, 0x3F },
+ { 0, 0, 0x62 },
+ { 80, 85, 0 },
+ { 81, 84, 0 },
+ { 82, 83, 0 },
+ { 0, 0, 0x27 },
+ { 0, 0, 0x66 },
+ { 0, 0, 0x2C },
+ { 86, 87, 0 },
+ { 0, 0, 0x47 },
+ { 0, 0, 0x42 },
+ { 89, 108, 0 },
+ { 90, 99, 0 },
+ { 91, 96, 0 },
+ { 92, 95, 0 },
+ { 93, 94, 0 },
+ { 0, 0, 0x56 },
+ { 0, 0, 0x6B },
+ { 0, 0, 0x46 },
+ { 97, 98, 0 },
+ { 0, 0, 0x71 },
+ { 0, 0, 0x77 },
+ { 100, 105, 0 },
+ { 101, 104, 0 },
+ { 102, 103, 0 },
+ { 0, 0, 0x4B },
+ { 0, 0, 0x2D },
+ { 0, 0, 0x57 },
+ { 106, 107, 0 },
+ { 0, 0, 0x4A },
+ { 0, 0, 0x2A },
+ { 109, 128, 0 },
+ { 110, 117, 0 },
+ { 111, 114, 0 },
+ { 112, 113, 0 },
+ { 0, 0, 0x7A },
+ { 0, 0, 0x59 },
+ { 115, 116, 0 },
+ { 0, 0, 0x6A },
+ { 0, 0, 0x2B },
+ { 118, 123, 0 },
+ { 119, 122, 0 },
+ { 120, 121, 0 },
+ { 0, 0, 0x51 },
+ { 0, 0, 0x85 },
+ { 0, 0, 0x29 },
+ { 124, 127, 0 },
+ { 125, 126, 0 },
+ { 0, 0, 0x5A },
+ { 0, 0, 0x8B },
+ { 0, 0, 0x3C },
+ { 129, 152, 0 },
+ { 130, 139, 0 },
+ { 131, 136, 0 },
+ { 132, 135, 0 },
+ { 133, 134, 0 },
+ { 0, 0, 0x95 },
+ { 0, 0, 0x7E },
+ { 0, 0, 0x8A },
+ { 137, 138, 0 },
+ { 0, 0, 0x87 },
+ { 0, 0, 0x3A },
+ { 140, 145, 0 },
+ { 141, 144, 0 },
+ { 142, 143, 0 },
+ { 0, 0, 0x7F },
+ { 0, 0, 0x23 },
+ { 0, 0, 0x78 },
+ { 146, 149, 0 },
+ { 147, 148, 0 },
+ { 0, 0, 0x58 },
+ { 0, 0, 0x5D },
+ { 150, 151, 0 },
+ { 0, 0, 0x91 },
+ { 0, 0, 0x88 },
+ { 153, 174, 0 },
+ { 154, 165, 0 },
+ { 155, 160, 0 },
+ { 156, 159, 0 },
+ { 157, 158, 0 },
+ { 0, 0, 0x5F },
+ { 0, 0, 0x60 },
+ { 0, 0, 0x32 },
+ { 161, 164, 0 },
+ { 162, 163, 0 },
+ { 0, 0, 0x30 },
+ { 0, 0, 0x83 },
+ { 0, 0, 0x31 },
+ { 166, 171, 0 },
+ { 167, 170, 0 },
+ { 168, 169, 0 },
+ { 0, 0, 0x2F },
+ { 0, 0, 0x28 },
+ { 0, 0, 0x3D },
+ { 172, 173, 0 },
+ { 0, 0, 0x86 },
+ { 0, 0, 0x5E },
+ { 175, 190, 0 },
+ { 176, 183, 0 },
+ { 177, 180, 0 },
+ { 178, 179, 0 },
+ { 0, 0, 0x33 },
+ { 0, 0, 0x39 },
+ { 181, 182, 0 },
+ { 0, 0, 0x98 },
+ { 0, 0, 0x34 },
+ { 184, 187, 0 },
+ { 185, 186, 0 },
+ { 0, 0, 0x7D },
+ { 0, 0, 0x38 },
+ { 188, 189, 0 },
+ { 0, 0, 0x5C },
+ { 0, 0, 0x22 },
+ { 191, 206, 0 },
+ { 192, 199, 0 },
+ { 193, 196, 0 },
+ { 194, 195, 0 },
+ { 0, 0, 0x90 },
+ { 0, 0, 0x26 },
+ { 197, 198, 0 },
+ { 0, 0, 0x8D },
+ { 0, 0, 0x35 },
+ { 200, 203, 0 },
+ { 201, 202, 0 },
+ { 0, 0, 0x36 },
+ { 0, 0, 0x3E },
+ { 204, 205, 0 },
+ { 0, 0, 0x93 },
+ { 0, 0, 0x8C },
+ { 207, 220, 0 },
+ { 208, 215, 0 },
+ { 209, 212, 0 },
+ { 210, 211, 0 },
+ { 0, 0, 0x37 },
+ { 0, 0, 0x80 },
+ { 213, 214, 0 },
+ { 0, 0, 0x81 },
+ { 0, 0, 0x8E },
+ { 216, 219, 0 },
+ { 217, 218, 0 },
+ { 0, 0, 0x8F },
+ { 0, 0, 0x99 },
+ { 0, 0, 0x24 },
+ { 221, 230, 0 },
+ { 222, 227, 0 },
+ { 223, 226, 0 },
+ { 224, 225, 0 },
+ { 0, 0, 0x92 },
+ { 0, 0, 0x40 },
+ { 0, 0, 0x5B },
+ { 228, 229, 0 },
+ { 0, 0, 0x9A },
+ { 0, 0, 0x96 },
+ { 231, 236, 0 },
+ { 232, 235, 0 },
+ { 233, 234, 0 },
+ { 0, 0, 0x82 },
+ { 0, 0, 0x25 },
+ { 0, 0, 0x09 },
+ { 237, 240, 0 },
+ { 238, 239, 0 },
+ { 0, 0, 0x9C },
+ { 0, 0, 0x97 },
+ { 241, 242, 0 },
+ { 0, 0, 0x7B },
+ { 243, 244, 0 },
+ { 0, 0, 0x94 },
+ { 0, 0, 0x7C },
+ };
+ writeRecord(_huffTree_00368, sizeof(_huffTree_00368), GBVARS_HUFFTREE_00368_INDEX , GBVARS_SKY);
+}
+
+static void addHufftext_huffTree_00372() {
+ HuffTree _huffTree_00372[] = {
+ { 1, 20, 0 },
+ { 2, 7, 0 },
+ { 3, 4, 0 },
+ { 0, 0, ' ' },
+ { 5, 6, 0 },
+ { 0, 0, 'e' },
+ { 0, 0, 'a' },
+ { 8, 15, 0 },
+ { 9, 12, 0 },
+ { 10, 11, 0 },
+ { 0, 0, 'o' },
+ { 0, 0, 's' },
+ { 13, 14, 0 },
+ { 0, 0, 't' },
+ { 0, 0, 'n' },
+ { 16, 19, 0 },
+ { 17, 18, 0 },
+ { 0, 0, '.' },
+ { 0, 0, 'i' },
+ { 0, 0, 'r' },
+ { 21, 44, 0 },
+ { 22, 31, 0 },
+ { 23, 28, 0 },
+ { 24, 27, 0 },
+ { 25, 26, 0 },
+ { 0, 0, 0 },
+ { 0, 0, 'E' },
+ { 0, 0, 'u' },
+ { 29, 30, 0 },
+ { 0, 0, 'm' },
+ { 0, 0, 'A' },
+ { 32, 39, 0 },
+ { 33, 36, 0 },
+ { 34, 35, 0 },
+ { 0, 0, 'l' },
+ { 0, 0, 'I' },
+ { 37, 38, 0 },
+ { 0, 0, 'd' },
+ { 0, 0, 'R' },
+ { 40, 43, 0 },
+ { 41, 42, 0 },
+ { 0, 0, 'N' },
+ { 0, 0, 'S' },
+ { 0, 0, 'T' },
+ { 45, 68, 0 },
+ { 46, 55, 0 },
+ { 47, 52, 0 },
+ { 48, 51, 0 },
+ { 49, 50, 0 },
+ { 0, 0, 'O' },
+ { 0, 0, 'h' },
+ { 0, 0, 'c' },
+ { 53, 54, 0 },
+ { 0, 0, 'D' },
+ { 0, 0, 'g' },
+ { 56, 63, 0 },
+ { 57, 60, 0 },
+ { 58, 59, 0 },
+ { 0, 0, 'L' },
+ { 0, 0, 'C' },
+ { 61, 62, 0 },
+ { 0, 0, 'p' },
+ { 0, 0, 'U' },
+ { 64, 67, 0 },
+ { 65, 66, 0 },
+ { 0, 0, '!' },
+ { 0, 0, 'y' },
+ { 0, 0, 'M' },
+ { 69, 88, 0 },
+ { 70, 79, 0 },
+ { 71, 76, 0 },
+ { 72, 75, 0 },
+ { 73, 74, 0 },
+ { 0, 0, 'P' },
+ { 0, 0, 'v' },
+ { 0, 0, 'H' },
+ { 77, 78, 0 },
+ { 0, 0, '?' },
+ { 0, 0, 'b' },
+ { 80, 85, 0 },
+ { 81, 84, 0 },
+ { 82, 83, 0 },
+ { 0, 0, 39 },
+ { 0, 0, 'f' },
+ { 0, 0, ',' },
+ { 86, 87, 0 },
+ { 0, 0, 'G' },
+ { 0, 0, 'B' },
+ { 89, 108, 0 },
+ { 90, 99, 0 },
+ { 91, 96, 0 },
+ { 92, 95, 0 },
+ { 93, 94, 0 },
+ { 0, 0, 'V' },
+ { 0, 0, 'k' },
+ { 0, 0, 'F' },
+ { 97, 98, 0 },
+ { 0, 0, 'q' },
+ { 0, 0, 'w' },
+ { 100, 105, 0 },
+ { 101, 104, 0 },
+ { 102, 103, 0 },
+ { 0, 0, 'K' },
+ { 0, 0, '-' },
+ { 0, 0, 'W' },
+ { 106, 107, 0 },
+ { 0, 0, 'J' },
+ { 0, 0, '*' },
+ { 109, 128, 0 },
+ { 110, 117, 0 },
+ { 111, 114, 0 },
+ { 112, 113, 0 },
+ { 0, 0, 'z' },
+ { 0, 0, 'Y' },
+ { 115, 116, 0 },
+ { 0, 0, 'j' },
+ { 0, 0, '+' },
+ { 118, 123, 0 },
+ { 119, 122, 0 },
+ { 120, 121, 0 },
+ { 0, 0, 'Q' },
+ { 0, 0, 133 },
+ { 0, 0, ')' },
+ { 124, 127, 0 },
+ { 125, 126, 0 },
+ { 0, 0, 'Z' },
+ { 0, 0, 139 },
+ { 0, 0, '<' },
+ { 129, 150, 0 },
+ { 130, 139, 0 },
+ { 131, 136, 0 },
+ { 132, 135, 0 },
+ { 133, 134, 0 },
+ { 0, 0, 149 },
+ { 0, 0, 126 },
+ { 0, 0, 138 },
+ { 137, 138, 0 },
+ { 0, 0, 135 },
+ { 0, 0, ':' },
+ { 140, 145, 0 },
+ { 141, 144, 0 },
+ { 142, 143, 0 },
+ { 0, 0, 127 },
+ { 0, 0, ']' },
+ { 0, 0, '#' },
+ { 146, 149, 0 },
+ { 147, 148, 0 },
+ { 0, 0, 'x' },
+ { 0, 0, 'X' },
+ { 0, 0, 145 },
+ { 151, 172, 0 },
+ { 152, 163, 0 },
+ { 153, 158, 0 },
+ { 154, 157, 0 },
+ { 155, 156, 0 },
+ { 0, 0, 136 },
+ { 0, 0, '`' },
+ { 0, 0, '2' },
+ { 159, 162, 0 },
+ { 160, 161, 0 },
+ { 0, 0, '0' },
+ { 0, 0, 131 },
+ { 0, 0, '1' },
+ { 164, 169, 0 },
+ { 165, 168, 0 },
+ { 166, 167, 0 },
+ { 0, 0, '/' },
+ { 0, 0, '(' },
+ { 0, 0, '=' },
+ { 170, 171, 0 },
+ { 0, 0, 134 },
+ { 0, 0, '^' },
+ { 173, 190, 0 },
+ { 174, 181, 0 },
+ { 175, 178, 0 },
+ { 176, 177, 0 },
+ { 0, 0, '3' },
+ { 0, 0, '9' },
+ { 179, 180, 0 },
+ { 0, 0, 152 },
+ { 0, 0, '4' },
+ { 182, 187, 0 },
+ { 183, 186, 0 },
+ { 184, 185, 0 },
+ { 0, 0, '}' },
+ { 0, 0, '8' },
+ { 0, 0, '\\' },
+ { 188, 189, 0 },
+ { 0, 0, '"' },
+ { 0, 0, 144 },
+ { 191, 206, 0 },
+ { 192, 199, 0 },
+ { 193, 196, 0 },
+ { 194, 195, 0 },
+ { 0, 0, '&' },
+ { 0, 0, 141 },
+ { 197, 198, 0 },
+ { 0, 0, '5' },
+ { 0, 0, '6' },
+ { 200, 203, 0 },
+ { 201, 202, 0 },
+ { 0, 0, 146 },
+ { 0, 0, 143 },
+ { 204, 205, 0 },
+ { 0, 0, 142 },
+ { 0, 0, 147 },
+ { 207, 220, 0 },
+ { 208, 213, 0 },
+ { 209, 212, 0 },
+ { 210, 211, 0 },
+ { 0, 0, 140 },
+ { 0, 0, '7' },
+ { 0, 0, 128 },
+ { 214, 217, 0 },
+ { 215, 216, 0 },
+ { 0, 0, 129 },
+ { 0, 0, 153 },
+ { 218, 219, 0 },
+ { 0, 0, '$' },
+ { 0, 0, '@' },
+ { 221, 230, 0 },
+ { 222, 227, 0 },
+ { 223, 226, 0 },
+ { 224, 225, 0 },
+ { 0, 0, '[' },
+ { 0, 0, 154 },
+ { 0, 0, '_' },
+ { 228, 229, 0 },
+ { 0, 0, '>' },
+ { 0, 0, 150 },
+ { 231, 236, 0 },
+ { 232, 235, 0 },
+ { 233, 234, 0 },
+ { 0, 0, 130 },
+ { 0, 0, '%' },
+ { 0, 0, 9 },
+ { 237, 240, 0 },
+ { 238, 239, 0 },
+ { 0, 0, 156 },
+ { 0, 0, 151 },
+ { 241, 242, 0 },
+ { 0, 0, '{' },
+ { 243, 244, 0 },
+ { 0, 0, 148 },
+ { 0, 0, '!' },
+ };
+ writeRecord(_huffTree_00372, sizeof(_huffTree_00372), GBVARS_HUFFTREE_00372_INDEX , GBVARS_SKY);
+}
+
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////
+
+void Sky_addHufftext() {
+ addHufftext_huffTree_00109();
+ addHufftext_huffTree_00267();
+ addHufftext_huffTree_00288();
+ addHufftext_huffTree_00303();
+ addHufftext_huffTree_00331();
+ addHufftext_huffTree_00348();
+ addHufftext_huffTree_00365();
+ addHufftext_huffTree_00368();
+ addHufftext_huffTree_00372();
+}
diff --git a/backends/platform/PalmOS/Src/builder/sword1/sw1_staticres.c b/backends/platform/PalmOS/Src/builder/sword1/sw1_staticres.c
new file mode 100644
index 0000000000..92860a843c
--- /dev/null
+++ b/backends/platform/PalmOS/Src/builder/sword1/sw1_staticres.c
@@ -0,0 +1,3576 @@
+#include <PalmOS.h>
+#include "b_globals.h"
+
+#include "sw1_staticres.h"
+
+#define MAX_ROOMS_PER_FX 7
+
+#define FX_SPOT 1
+#define FX_LOOP 2
+#define FX_RANDOM 3
+
+typedef struct {
+ int32 roomNo, leftVol, rightVol;
+} RoomVol;
+
+typedef struct {
+ uint32 sampleId, type, delay;
+ RoomVol roomVolList[MAX_ROOMS_PER_FX];
+} FxDef;
+
+static void addStaticres_fxList() {
+ FxDef _fxList[312] = {
+ // 0
+ {
+ 0, // sampleId
+ 0, // type (FX_LOOP, FX_RANDOM or FX_SPOT)
+ 0, // delay (random chance for FX_RANDOM sound fx)
+ { // roomVolList
+ {0,0,0}, // {roomNo,leftVol,rightVol}
+ },
+ },
+ //------------------------
+ // 1 Newton's cradle. Anim=NEWTON.
+ {
+ FX_NEWTON, // sampleId
+ FX_SPOT, // type
+ 7, // delay (or random chance)
+ { // roomVolList
+ {45,4,2}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 2
+ {
+ FX_TRAFFIC2, // sampleId
+ FX_LOOP, // type
+ 0, // delay (or random chance)
+ { // roomVolList
+ {1,12,12}, // {roomNo,leftVol,rightVol}
+ {2,1,1},
+ {3,1,1},
+ {4,13,13},
+ {5,1,1},
+ {8,7,7},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 3
+ {
+ FX_HORN1, // sampleId
+ FX_RANDOM, // type
+ 1200, // delay (or random chance)
+ { // roomVolList
+ {1,3,3}, // {roomNo,leftVol,rightVol}
+ {3,1,1},
+ {4,1,1},
+ {5,2,2},
+ {8,4,4},
+ {18,2,3},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 4
+ {
+ FX_HORN2, // sampleId
+ FX_RANDOM, // type
+ 1200, // delay (or random chance)
+ { // roomVolList
+ {1,4,4}, // {roomNo,leftVol,rightVol}
+ {3,2,2},
+ {4,3,3},
+ {5,2,2},
+ {8,4,4},
+ {18,1,1},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 5
+ {
+ FX_HORN3, // sampleId
+ FX_RANDOM, // type
+ 1200, // delay (or random chance)
+ { // roomVolList
+ {1,4,4}, // {roomNo,leftVol,rightVol}
+ {2,4,4},
+ {3,2,2},
+ {4,3,3},
+ {5,2,2},
+ {8,4,4},
+ {18,1,1},
+ },
+ },
+ //------------------------
+ // 6
+ {
+ FX_CAMERA1, // sampleId
+ FX_SPOT, // type
+ 25, // delay (or random chance)
+ { // roomVolList
+ {1,8,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 7
+ {
+ FX_CAMERA2, // sampleId
+ FX_SPOT, // type
+ 25, // delay (or random chance)
+ { // roomVolList
+ {1,8,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 8
+ {
+ FX_CAMERA3, // sampleId
+ FX_SPOT, // type
+ 25, // delay (or random chance)
+ { // roomVolList
+ {1,8,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 9
+ {
+ FX_SWATER1, // sampleId
+ FX_LOOP, // type
+ 0, // delay (or random chance)
+ { // roomVolList
+ {7,12,12}, // {roomNo,leftVol,rightVol}
+ {6,12,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 10 Mad dogs in Spain, triggered by George going around the corner in the villa hall.
+ // In 56 and 57, the dogs will continue barking after George has either been ejected or sneaked up stairs
+ // for a couple of loops before stopping.
+ {
+ FX_DOGS56, // sampleId
+ FX_LOOP, // type
+ 0, // delay (or random chance)
+ { // roomVolList
+ {60,16,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0} // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 11
+ {
+ FX_DRIP1, // sampleId
+ FX_RANDOM, // type
+ 20, // delay (or random chance)
+ { // roomVolList
+ {7,15,15}, // {roomNo,leftVol,rightVol}
+ {6,8,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 12
+ {
+ FX_DRIP2, // sampleId
+ FX_RANDOM, // type
+ 30, // delay (or random chance)
+ { // roomVolList
+ {7,15,15}, // {roomNo,leftVol,rightVol}
+ {6,8,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 13
+ {
+ FX_DRIP3, // sampleId
+ FX_RANDOM, // type
+ 40, // delay (or random chance)
+ { // roomVolList
+ {7,15,15}, // {roomNo,leftVol,rightVol}
+ {6,8,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 14
+ {
+ FX_TWEET1, // sampleId
+ FX_SPOT, // type
+ 10, // delay (or random chance)
+ { // roomVolList
+ {1,5,5}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 15
+ {
+ FX_TWEET2, // sampleId
+ FX_SPOT, // type
+ 10, // delay (or random chance)
+ { // roomVolList
+ {1,5,5}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 16
+ {
+ FX_TWEET3, // sampleId
+ FX_SPOT, // type
+ 10, // delay (or random chance)
+ { // roomVolList
+ {1,5,5}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 17
+ {
+ FX_TWEET4, // sampleId
+ FX_SPOT, // type
+ 10, // delay (or random chance)
+ { // roomVolList
+ {1,5,5}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 18
+ {
+ FX_TWEET5, // sampleId
+ FX_SPOT, // type
+ 10, // delay (or random chance)
+ { // roomVolList
+ {1,5,5}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 19 Tied to large bird flying up screen anim
+ {
+ FX_CAW1, // sampleId
+ FX_SPOT, // type
+ 20, // delay (or random chance)
+ { // roomVolList
+ {1,5,5}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ //------------------------
+ // 20 George picking the canopy up: GEOCAN
+ {
+ FX_CANUP, // sampleId
+ FX_SPOT, // type
+ 5, // delay (or random chance) *
+ { // roomVolList
+ {1,10,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 21 George dropping the canopy: GEOCAN
+ {
+ FX_CANDO, // sampleId
+ FX_SPOT, // type
+ 52, // delay (or random chance) *
+ { // roomVolList
+ {1,10,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 22 George dusts himself down: GEOCAN
+ {
+ FX_DUST, // sampleId
+ FX_SPOT, // type
+ 58, // delay (or random chance) *
+ { // roomVolList
+ {1,10,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 23 George picks up the paper and opens it: GEOPAP
+ {
+ FX_PAP1, // sampleId
+ FX_SPOT, // type
+ 23, // delay (or random chance) *
+ { // roomVolList
+ {1,10,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 24 George puts the paper away: GEOPAP2
+ {
+ FX_PAP2, // sampleId
+ FX_SPOT, // type
+ 3, // delay (or random chance) *
+ { // roomVolList
+ {1,10,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 25 George gives the paper away: GEOWRK8
+ {
+ FX_PAP3, // sampleId
+ FX_SPOT, // type
+ 13, // delay (or random chance) *
+ { // roomVolList
+ {4,14,12}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 26 Workman examines paper: WRKOPN - it's now just WRKPPR
+ {
+ FX_PAP4, // sampleId
+ FX_SPOT, // type
+ 15, // delay (or random chance) *
+ { // roomVolList
+ {4,14,12}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 27 Workman puts paper down: WRKOPN (REVERSED) - now just WRKCLM
+ {
+ FX_PAP5, // sampleId
+ FX_SPOT, // type
+ 2, // delay (or random chance)*
+ { // roomVolList
+ {4,14,12}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 28 Pickaxe sound 1:, Screen 4 - WRKDIG
+ {
+ FX_PICK1, // sampleId
+ FX_SPOT, // type
+ 11, // delay (or random chance) *
+ { // roomVolList
+ {4,10,10},
+ {0,0,0} // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 29 Pickaxe sound 2:, Screen 4 - WRKDIG
+ {
+ FX_PICK2, // sampleId
+ FX_SPOT, // type
+ 11, // delay (or random chance) *
+ { // roomVolList
+ {4,10,10},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ //------------------------
+ // 30 Pickaxe sound 3:, Screen 4 - WRKDIG
+ {
+ FX_PICK3, // sampleId
+ FX_SPOT, // type
+ 11, // delay (or random chance) *
+ { // roomVolList
+ {4,10,10},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 31 Pickaxe sound 4:, Screen 4 - WRKDIG
+ {
+ FX_PICK4, // sampleId
+ FX_SPOT, // type
+ 11, // delay (or random chance) *
+ { // roomVolList
+ {4,10,10},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 32 Shorting light: FLICKER
+ {
+ FX_LIGHT, // sampleId
+ FX_SPOT, // type
+ 1, // delay (or random chance) *
+ { // roomVolList
+ {3,15,15}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 33 Cat leaps out of bin and runs: CATJMP!
+ {
+ FX_CAT, // sampleId
+ FX_SPOT, // type
+ 20, // delay (or random chance) *
+ { // roomVolList
+ {2,10,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 34 George rocks plastic crate: GEOCRT
+ {
+ FX_CRATE, // sampleId
+ FX_SPOT, // type
+ 10, // delay (or random chance) *
+ { // roomVolList
+ {2,8,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 35 George tries to climb drainpipe: GEOCLM02
+ {
+ FX_DRAIN, // sampleId
+ FX_SPOT, // type
+ 9, // delay (or random chance) *
+ { // roomVolList
+ {2,10,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 36 George removes manhole cover: GEOMAN8
+ {
+ FX_HOLE, // sampleId
+ FX_SPOT, // type
+ 19, // delay (or random chance) ?
+ { // roomVolList
+ {2,12,11}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 37 Brandy bottle put down: CHNDRN
+ {
+ FX_BOTDN, // sampleId
+ FX_SPOT, // type
+ 43, // delay (or random chance) *
+ { // roomVolList
+ {3,8,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 38 Brandy bottle picked up: GEOBOT3
+ {
+ FX_BOTUP, // sampleId
+ FX_SPOT, // type
+ 9, // delay (or random chance) *
+ { // roomVolList
+ {3,10,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 39 Chantelle gulps on brandy: CHNDRN
+ {
+ FX_GULP, // sampleId
+ FX_SPOT, // type
+ 23, // delay (or random chance) *
+ { // roomVolList
+ {3,4,3}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 40 Chantelle picked up off the floor: GEOCHN
+ {
+ FX_PIKUP, // sampleId
+ FX_SPOT, // type
+ 28, // delay (or random chance) *
+ { // roomVolList
+ {3,11,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 41 George searches Plantard's body: GEOCPS
+ {
+ FX_BODY, // sampleId
+ FX_SPOT, // type
+ 10, // delay (or random chance) *
+ { // roomVolList
+ {3,10,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 42 Moue cocks handgun. MOUENT
+ {
+ FX_PISTOL, // sampleId
+ FX_SPOT, // type
+ 23, // delay (or random chance) *
+ { // roomVolList
+ {4,4,7}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 43 George rummages in toolbox: GEOTBX
+ {
+ FX_TBOX, // sampleId
+ FX_SPOT, // type
+ 12, // delay (or random chance) *
+ { // roomVolList
+ {4,12,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 44 rat squeak 1
+ {
+ FX_RAT1, // sampleId
+ FX_RANDOM, // type
+ 193, // delay (or random chance)
+ { // roomVolList
+ {6,5,7}, // {roomNo,leftVol,rightVol}
+ {7,5,3},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 45 rat squeak 2
+ {
+ FX_RAT2, // sampleId
+ FX_RANDOM, // type
+ 201, // delay (or random chance)
+ { // roomVolList
+ {6,3,5}, // {roomNo,leftVol,rightVol}
+ {7,4,6},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 46 George climbs down ladder:
+ {
+ FX_LADD1, // sampleId
+ FX_SPOT, // type
+ 10, // delay (or random chance)
+ { // roomVolList
+ {6,10,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 47 Rushing water loop
+ {
+ FX_SWATER3, // sampleId
+ FX_LOOP, // type
+ 0, // delay (or random chance)
+ { // roomVolList
+ {6,10,11}, // {roomNo,leftVol,rightVol}
+ {7,12,11},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 48 Left hand bin being opened: GEOCAT?
+ {
+ FX_BIN3, // sampleId
+ FX_SPOT, // type
+ 12, // delay (or random chance)
+ { // roomVolList
+ {2,12,11}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 49 Middle bin being opened: GEOBIN
+ {
+ FX_BIN2, // sampleId
+ FX_SPOT, // type
+ 12, // delay (or random chance)
+ { // roomVolList
+ {2,11,11}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 50 Right hand bin being opened: GEOLID?
+ {
+ FX_BIN1, // sampleId
+ FX_SPOT, // type
+ 12, // delay (or random chance)
+ { // roomVolList
+ {2,10,11}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 51 Passing car sound
+ {
+ FX_CARS, // sampleId
+ FX_RANDOM, // type
+ 120, // delay (or random chance)
+ { // roomVolList
+ {10,8,1},
+ {12,7,7},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 52 Passing car sound
+ {
+ FX_FIESTA, // sampleId
+ FX_RANDOM, // type
+ 127, // delay (or random chance)
+ { // roomVolList
+ {10,8,1},
+ {12,7,7},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 53 Passing car sound
+ {
+ FX_CARLTON , // sampleId
+ FX_RANDOM, // type
+ 119, // delay (or random chance)
+ { // roomVolList
+ {10,8,1},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 54 Bird
+ {
+ FX_BIRD, // sampleId
+ FX_RANDOM, // type
+ 500, // delay (or random chance)
+ { // roomVolList
+ {9,10,10}, // {roomNo,leftVol,rightVol}
+ {10,2,1},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 55 George tries the door: GEOTRY
+ {
+ FX_DOORTRY, // sampleId
+ FX_SPOT, // type
+ 7, // delay (or random chance)
+ { // roomVolList
+ {9,9,9}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 56 George opens the door: GEODOOR9
+ {
+ FX_FLATDOOR, // sampleId
+ FX_SPOT, // type
+ 10, // delay (or random chance)
+ { // roomVolList
+ {9,9,9}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 57 George picks the 'phone up: GEOPHN10
+ {
+ FX_FONEUP, // sampleId
+ FX_SPOT, // type
+ 15, // delay (or random chance)
+ { // roomVolList
+ {10,9,9}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 58 George puts the 'phone down: GEPDWN10
+ {
+ FX_FONEDN, // sampleId
+ FX_SPOT, // type
+ 4, // delay (or random chance)
+ { // roomVolList
+ {10,9,9}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 59 Albert opens the door: ALBOPEN
+ {
+ FX_ALBOP, // sampleId
+ FX_SPOT, // type
+ 13, // delay (or random chance)
+ { // roomVolList
+ {5,10,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ //------------------------
+ // 60 Albert closes the door: ALBCLOSE
+ {
+ FX_ALBCLO, // sampleId
+ FX_SPOT, // type
+ 20, // delay (or random chance)
+ { // roomVolList
+ {5,9,9}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 61 George enter Nico's flat. GEOENT10
+ {
+ FX_NICOPEN, // sampleId
+ FX_SPOT, // type
+ 1, // delay (or random chance)
+ { // roomVolList
+ {10,7,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 62 George leaves Nico's. GEOLVS10
+ {
+ FX_NICLOSE, // sampleId
+ FX_SPOT, // type
+ 13, // delay (or random chance)
+ { // roomVolList
+ {10,7,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 63 Another bird for the street.
+ {
+ FX_BIRD2, // sampleId
+ FX_RANDOM, // type
+ 500, // WAS 15 (TOO LATE)
+ { // roomVolList
+ {9,10,10}, // {roomNo,leftVol,rightVol}
+ {10,2,1},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 64 George sits in the chair: GEOCHR
+ {
+ FX_GEOCHAIR, // sampleId
+ FX_SPOT, // type
+ 14, // delay (or random chance)
+ { // roomVolList
+ {10,5,5}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 65 George sits on the couch: GEOCCH
+ {
+ FX_GEOCCH, // sampleId
+ FX_SPOT, // type
+ 14, // delay (or random chance)
+ { // roomVolList
+ {10,5,5}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 66 George gets up from the chair: GEOCHR9
+ {
+ FX_GEOCHR9, // sampleId
+ FX_SPOT, // type
+ 5, // delay (or random chance)
+ { // roomVolList
+ {10,3,3}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 67 George is electrocuted: COSSHK
+ {
+ FX_SHOCK1, // sampleId
+ FX_SPOT, // type
+ 19, // delay (or random chance)
+ { // roomVolList
+ {11,10,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 68 George plays record: GEOWIND
+ {
+ FX_GRAMOFON, // sampleId
+ FX_SPOT, // type
+ 0, // delay (or random chance)
+ { // roomVolList
+ {11,11,13}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 69 George is frisked: GORFRK
+ {
+ FX_FRISK, // sampleId
+ FX_SPOT, // type
+ 6, // delay (or random chance)
+ { // roomVolList
+ {12,8,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 70 Traffic sound
+ {
+ FX_TRAFFIC3, // sampleId
+ FX_LOOP, // type
+ 0, // delay (or random chance)
+ { // roomVolList
+ {11,5,4},
+ {12,1,1},
+ {16,4,4},
+ {18,2,3},
+ {46,4,3},
+ {0,0,0}, // NULL-TERMINATOR
+ }
+ },
+ //------------------------
+ // 71 Latvian reading: LATRDS
+ {
+ FX_PAPER6, // sampleId
+ FX_SPOT, // type
+ 8, // delay (or random chance)
+ { // roomVolList
+ {13,8,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 72 Deskbell
+ {
+ FX_DESKBELL, // sampleId
+ FX_SPOT, // type
+ 0, // delay (or random chance)
+ { // roomVolList
+ {13,10,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 73 George picks up hotel 'phone: GEOTEL
+ {
+ FX_PHONEUP2, // sampleId
+ FX_SPOT, // type
+ 10, // delay (or random chance)
+ { // roomVolList
+ {13,8,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 74 George puts down hotel 'phone: GEOTEL9
+ {
+ FX_PHONEDN2, // sampleId
+ FX_SPOT, // type
+ 10, // delay (or random chance)
+ { // roomVolList
+ {13,8,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 75 George tries doors in corridor: GEODOR
+ {
+ FX_TRYDOR14, // sampleId
+ FX_SPOT, // type
+ 10, // delay (or random chance)
+ { // roomVolList
+ {14,8,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 76 George opens bedside cabinet: BEDDOR
+ {
+ FX_CABOPEN, // sampleId
+ FX_SPOT, // type
+ 11, // delay (or random chance)
+ { // roomVolList
+ {15,10,14}, // {roomNo,leftVol,rightVol}
+ {17,10,14},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 77 George closes bedside cabinet: BEDDOR (reversed)
+ {
+ FX_CABCLOSE, // sampleId
+ FX_SPOT, // type
+ 5, // delay (or random chance)
+ { // roomVolList
+ {15,10,14}, // {roomNo,leftVol,rightVol}
+ {17,10,14},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 78 George opens the window: WINDOW
+ {
+ FX_WINDOPEN, // sampleId
+ FX_SPOT, // type
+ 19, // delay (or random chance)
+ { // roomVolList
+ {15,8,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 79 George goes right along the ledge: GEOIRW
+ {
+ FX_LEDGE1, // sampleId
+ FX_SPOT, // type
+ 1, // delay (or random chance)
+ { // roomVolList
+ {16,12,12}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ //------------------------
+ // 80 George goes left along the ledge: GEOILW
+ {
+ FX_LEDGE2, // sampleId
+ FX_SPOT, // type
+ 1, // delay (or random chance)
+ { // roomVolList
+ {16,12,12}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 81 Pigeon noises
+ {
+ FX_COO, // sampleId
+ FX_RANDOM, // type
+ 80, // delay (or random chance)
+ { // roomVolList
+ {16,7,9}, // {roomNo,leftVol,rightVol}
+ {46,5,4},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 82 Pigeon noises
+ {
+ FX_COO2, // sampleId
+ FX_RANDOM, // type
+ 60, // delay (or random chance)
+ { // roomVolList
+ {15,3,4}, // {roomNo,leftVol,rightVol}
+ {16,8,5}, // {roomNo,leftVol,rightVol}
+ {17,3,4},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 83 George picks up and opens case: GEOBFC
+ {
+ FX_BRIEFON, // sampleId
+ FX_SPOT, // type
+ 16, // delay (or random chance)
+ { // roomVolList
+ {17,12,12}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 84 George closes and puts down case: GEOBFC (reversed)
+ {
+ FX_BRIEFOFF, // sampleId
+ FX_SPOT, // type
+ 12, // delay (or random chance)
+ { // roomVolList
+ {17,12,12}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 85 George gets into wardrobe. GEOWRB2 Attention, James. This is new as of 15/7/96
+ {
+ FX_WARDIN, // sampleId
+ FX_SPOT, // type
+ 6, // delay (or random chance)
+ { // roomVolList
+ {17,4,4}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 86 George gets out of wardrobe. GEOWRB2 (Reversed). Attention, James. This is new as of 15/7/96
+ {
+ FX_WARDOUT, // sampleId
+ FX_SPOT, // type
+ 41, // delay (or random chance)
+ { // roomVolList
+ {17,4,4}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 87 George jumps in through window: GEOWIN2
+ {
+ FX_JUMPIN, // sampleId
+ FX_SPOT, // type
+ 7, // delay (or random chance)
+ { // roomVolList
+ {15,8,10},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 88 George climbs in: GEOWIN2/GEOWIN8
+ {
+ FX_CLIMBIN, // sampleId
+ FX_SPOT, // type
+ 0, // delay (or random chance)
+ { // roomVolList
+ {17,8,16}, // {roomNo,leftVol,rightVol}
+ {15,8,16},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 89 George climbs out: GEOWIN1/GEOWIN9
+ {
+ FX_CLIMBOUT, // sampleId
+ FX_SPOT, // type
+ 17, // delay (or random chance)
+ { // roomVolList
+ {17,9,10}, // {roomNo,leftVol,rightVol}
+ {15,9,10},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 90 George picks the 'phone up: GEOTEL18
+ {
+ FX_FONEUP, // sampleId
+ FX_SPOT, // type
+ 10, // delay (or random chance)
+ { // roomVolList
+ {18,4,3}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 91 George puts the 'phone down: GEOTL18A
+ {
+ FX_FONEDN, // sampleId
+ FX_SPOT, // type
+ 11, // delay (or random chance)
+ { // roomVolList
+ {18,4,3}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 92 George tries to get keys. GEOKEY
+ {
+ FX_KEY13, // sampleId
+ FX_SPOT, // type
+ 8, // delay (or random chance)
+ { // roomVolList
+ {13,3,2}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 93 George manages to get keys. GEOKEY13
+ {
+ FX_KEY13, // sampleId
+ FX_SPOT, // type
+ 9, // delay (or random chance)
+ { // roomVolList
+ {13,3,2}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 94 George electrocutes Maguire: MAGSHK
+ {
+ FX_SHOCK2, // sampleId
+ FX_SPOT, // type
+ 8, // delay (or random chance)
+ { // roomVolList
+ {19,9,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 95 George opens dray door : GEOTRP8
+ {
+ FX_TRAPOPEN, // sampleId
+ FX_SPOT, // type
+ 20, // delay (or random chance)
+ { // roomVolList
+ {19,10,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 96 George breaks switch : Which anim?
+ {
+ FX_SWITCH19, // sampleId
+ FX_SPOT, // type
+ 10, // delay (or random chance)
+ { // roomVolList
+ {19,10,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 97 Leary pulls pint: LESPMP
+ {
+ FX_PULLPINT, // sampleId
+ FX_SPOT, // type
+ 6, // delay (or random chance)
+ { // roomVolList
+ {20,10,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 98 Glasswasher fuse blows (and the glass washer grinds to a halt)
+ {
+ FX_FUSE20, // sampleId
+ FX_SPOT, // type
+ 0, // delay (or random chance)
+ { // roomVolList
+ {20,8,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 99 Fitz leaps to his feet: FTZSTD
+ {
+ FX_FITZUP, // sampleId
+ FX_SPOT, // type
+ 5, // delay (or random chance)
+ { // roomVolList
+ {20,8,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ //------------------------
+ // 100 Fitz runs for it: FTZRUN
+ {
+ FX_FITZRUN, // sampleId
+ FX_SPOT, // type
+ 15, // delay (or random chance)
+ { // roomVolList
+ {20,12,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 101 George pulls lever: GEOLVR & GEOLVR26
+ {
+ FX_LEVER, // sampleId
+ FX_SPOT, // type
+ 26, // delay (or random chance)
+ { // roomVolList
+ {21,8,10}, // {roomNo,leftVol,rightVol}
+ {26,8,10},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 102 George pulls lever: GEOLVR8 & GEOLVR08
+ {
+ FX_LEVER2, // sampleId
+ FX_SPOT, // type
+ 9, // delay (or random chance)
+ { // roomVolList
+ {21,8,10}, // {roomNo,leftVol,rightVol}
+ {26,8,10},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 103 George opens tap: No idea what the anim is
+ {
+ FX_TAP, // sampleId
+ FX_SPOT, // type
+ 10, // delay (or random chance)
+ { // roomVolList
+ {21,8,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 104 George closes tap: No idea what this anim is either
+ {
+ FX_TAP2, // sampleId
+ FX_SPOT, // type
+ 10, // delay (or random chance)
+ { // roomVolList
+ {21,8,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 105 Bar flap: FLPOPN
+ {
+ FX_BARFLAP, // sampleId
+ FX_SPOT, // type
+ 1, // delay (or random chance)
+ { // roomVolList
+ {20,6,6}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 106 Farmer leaves: FRMWLK
+ {
+ FX_FARMERGO, // sampleId
+ FX_SPOT, // type
+ 11, // delay (or random chance)
+ { // roomVolList
+ {22,6,9}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 107 George climbs haystack: GEOCLM
+ {
+ FX_CLIMBHAY, // sampleId
+ FX_SPOT, // type
+ 11, // delay (or random chance)
+ { // roomVolList
+ {22,14,14}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 108 George drives sewer key into wall: GEOKEY23
+ {
+ FX_KEYSTEP, // sampleId
+ FX_SPOT, // type
+ 39, // delay (or random chance)
+ { // roomVolList
+ {23,8,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 109 George climbs over wall: GEOCLM23
+ {
+ FX_CASTLWAL, // sampleId
+ FX_SPOT, // type
+ 17, // delay (or random chance)
+ { // roomVolList
+ {23,8,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ //------------------------
+ // 110 George falls from wall: GEOTRY23
+ {
+ FX_CLIMBFAL, // sampleId
+ FX_SPOT, // type
+ 43, // delay (or random chance)
+ { // roomVolList
+ {23,12,12}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 111 Goat chewing: GOTEAT
+ {
+ FX_GOATCHEW, // sampleId
+ FX_SPOT, // type
+ 1, // delay (or random chance)
+ { // roomVolList
+ {24,10,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 112 George moves plough: GEOPLW
+ {
+ FX_PLOUGH, // sampleId
+ FX_SPOT, // type
+ 8, // delay (or random chance)
+ { // roomVolList
+ {24,10,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 113 George drops slab: STNFALL
+ {
+ FX_SLABFALL, // sampleId
+ FX_SPOT, // type
+ 6, // delay (or random chance)
+ { // roomVolList
+ {25,10,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 114 George picks up slab: GEOSTN8
+ {
+ FX_SLABUP, // sampleId
+ FX_SPOT, // type
+ 29, // delay (or random chance)
+ { // roomVolList
+ {25,10,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 115 Secret door opens: ALTOPN
+ {
+ FX_SECDOR25, // sampleId
+ FX_SPOT, // type
+ 17, // delay (or random chance)
+ { // roomVolList
+ {25,10,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 116 George wrings out cloth: GEOTWL25
+ {
+ FX_WRING, // sampleId
+ FX_SPOT, // type
+ 24, // delay (or random chance)
+ { // roomVolList
+ {25,10,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 117 Rat running across barrels: RATJMP
+ {
+ FX_RAT3A, // sampleId
+ FX_SPOT, // type
+ 1, // delay (or random chance)
+ { // roomVolList
+ {26,8,5}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 118 Rat running across barrels: RATJMP
+ {
+ FX_RAT3B, // sampleId
+ FX_SPOT, // type
+ 8, // delay (or random chance)
+ { // roomVolList
+ {26,7,6}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 119 Rat running across barrels: RATJMP
+ {
+ FX_RAT3C, // sampleId
+ FX_SPOT, // type
+ 26, // delay (or random chance)
+ { // roomVolList
+ {26,8,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ //------------------------
+ // 120 Irish bird song 1:
+ {
+ FX_EIRBIRD1, // sampleId
+ FX_RANDOM, // type
+ 720, // delay (or random chance)
+ { // roomVolList
+ {19,6,8}, // {roomNo,leftVol,rightVol}
+ {21,2,3},
+ {22,8,5},
+ {23,6,5},
+ {24,8,8},
+ {0,0,0}, // NULL-TERMINATOR
+ }
+ },
+ //------------------------
+ // 121 Irish bird song 2:
+ {
+ FX_EIRBIRD2, // sampleId
+ FX_RANDOM, // type
+ 720, // delay (or random chance)
+ { // roomVolList
+ {19,8,6}, // {roomNo,leftVol,rightVol}
+ {21,2,3},
+ {22,6,8},
+ {23,5,5},
+ {24,8,8},
+ {0,0,0}, // NULL-TERMINATOR
+ }
+ },
+ //------------------------
+ // 122 Irish bird song 3:
+ {
+ FX_EIRBIRD3, // sampleId
+ FX_RANDOM, // type
+ 720, // delay (or random chance)
+ { // roomVolList
+ {19,8,8}, // {roomNo,leftVol,rightVol}
+ {21,3,4},
+ {22,8,8},
+ {23,5,6},
+ {24,6,8},
+ {0,0,0}, // NULL-TERMINATOR
+ }
+ },
+ //------------------------
+ // 123 Rat 3D:
+ {
+ FX_RAT3D, // sampleId
+ FX_RANDOM, // type
+ 600, // delay (or random chance)
+ { // roomVolList
+ {26,2,3}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ }
+ },
+ //------------------------
+ // 124 Wind atop the battlements
+ {
+ FX_WIND, // sampleId
+ FX_LOOP, // type
+ 0, // delay (or random chance)
+ { // roomVolList
+ {23,6,6}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ }
+ },
+ //------------------------
+ // 125 Glasswasher in the pub (Room 20) *JEL* Stops after fuse blows and starts when george fixes it.
+ {
+ FX_WASHER, // sampleId
+ FX_LOOP, // type
+ 0, // delay (or random chance)
+ { // roomVolList
+ {20,4,4}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ }
+ },
+ //------------------------
+ // 126 Running tap in the cellar: (Room 21) *JEL* Only when the tap is on.
+ {
+ FX_CELTAP, // sampleId
+ FX_LOOP, // type
+ 0, // delay (or random chance)
+ { // roomVolList
+ {21,3,3}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ }
+ },
+ //------------------------
+ // 127 Lopez's hose. Basically a loop but stops when George cuts the water supply. Replaces MUTTER1.
+ {
+ FX_HOSE57, // sampleId
+ FX_LOOP, // type
+ 0, // delay (or random chance)
+ { // roomVolList
+ {57,3,1}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ }
+ },
+ //------------------------
+ // 128 Lopez's hose being switched off. Anim GARD05. Replaces MUTTER2.
+ {
+ FX_HOSE57B, // sampleId
+ FX_SPOT, // type
+ 1, // delay (or random chance)
+ { // roomVolList
+ {57,3,2}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ }
+ },
+ //------------------------
+ // 129 Nejo bouncing the ball off the door. NEJ8
+ {
+ FX_BALLPLAY, // sampleId
+ FX_SPOT, // type
+ 13, // delay (or random chance)
+ { // roomVolList
+ {45,5,1}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ }
+ },
+ //------------------------
+ //------------------------
+ // 130 Cricket loop for Syrian desert Only audible in 55 when the cave door is open.
+ {
+ FX_CRICKET, // sampleId
+ FX_LOOP, // type
+ 0, // delay (or random chance)
+ { // roomVolList
+ {54,8,8}, // {roomNo,leftVol,rightVol}
+ {55,3,5},
+ {0,0,0}, // NULL-TERMINATOR
+ }
+ },
+ //------------------------
+ // 131 Display case shatters: GEOTOTB
+ {
+ FX_SMASHGLA, // sampleId
+ FX_SPOT, // type
+ 35, // delay (or random chance)
+ { // roomVolList
+ {29,16,12}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ }
+ },
+ //------------------------
+ // 132 Burglar alarm: Once the case is smashed (see 131)
+ {
+ FX_ALARM, // sampleId
+ FX_LOOP, // type
+ 0, // delay (or random chance)
+ { // roomVolList
+ {28,12,12}, // {roomNo,leftVol,rightVol}
+ {29,16,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ }
+ },
+ //------------------------
+ // 133 Guido fires: GUIGUN
+ {
+ FX_GUN1, // sampleId
+ FX_SPOT, // type
+ 7, // delay (or random chance)
+ { // roomVolList
+ {29,16,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ }
+ },
+ //------------------------
+ // 134 Guido knocked down: NICPUS1
+ {
+ FX_GUI_HIT, // sampleId
+ FX_SPOT, // type
+ 40, // delay (or random chance)
+ { // roomVolList
+ {29,10,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ }
+ },
+ //------------------------
+ // 135 Museum exterior ambience
+ {
+ FX_MUESEXT, // sampleId
+ FX_LOOP, // type
+ 0, // delay (or random chance)
+ { // roomVolList
+ {27,10,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ }
+ },
+ //------------------------
+ // 136 Cat gets nowty: CAT3
+ {
+ FX_STALLCAT, // sampleId
+ FX_SPOT, // type
+ 1, // delay (or random chance)
+ { // roomVolList
+ {45,10,6}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ }
+ },
+ //------------------------
+ // 137 Cat gets very nowty: CAT5
+ {
+ FX_CATHIT, // sampleId
+ FX_SPOT, // type
+ 4, // delay (or random chance)
+ { // roomVolList
+ {45,10,6}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ }
+ },
+ //------------------------
+ // 138 Desert wind: Only audible in 55 when the cave door is open.
+ {
+ FX_SYRIWIND, // sampleId
+ FX_RANDOM, // type
+ 720, // delay (or random chance)
+ { // roomVolList
+ {54,10,10}, // {roomNo,leftVol,rightVol}
+ {55,5,7},
+ {0,0,0}, // NULL-TERMINATOR
+ }
+ },
+ //------------------------
+ // 139 Bell on Nejo's stall: GEOSYR7
+ {
+ FX_STALLBEL, // sampleId
+ FX_SPOT, // type
+ 7, // delay (or random chance)
+ { // roomVolList
+ {45,10,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ }
+ },
+ //------------------------
+ //------------------------
+ // 140 George electrocutes Khan: GEOSYR40
+ {
+ FX_SHOCK3, // sampleId
+ FX_SPOT, // type
+ 6, // delay (or random chance)
+ { // roomVolList
+ {54,10,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 141 George thumps Khan: GEOSYR40
+ {
+ FX_THUMP1, // sampleId
+ FX_SPOT, // type
+ 22, // delay (or random chance)
+ { // roomVolList
+ {54,12,12}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 142 Khan hits the floor: KHS9
+ {
+ FX_KHANDOWN, // sampleId
+ FX_SPOT, // type
+ 24, // delay (or random chance)
+ { // roomVolList
+ {54,8,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 143 Hospital ambience
+ {
+ FX_HOSPNOIS, // sampleId
+ FX_LOOP, // type
+ 0, // delay (or random chance)
+ { // roomVolList
+ {32,6,4}, // {roomNo,leftVol,rightVol}
+ {33,7,7},
+ {34,3,4},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 144 Mr Shiny switched on: DOMPLG (Start FX_SHINY)
+ {
+ FX_SHINYON, // sampleId
+ FX_SPOT, // type
+ 0, // delay (or random chance)
+ { // roomVolList
+ {33,12,14}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 145 Mr Shiny running
+ {
+ FX_SHINY, // sampleId
+ FX_LOOP, // type
+ 0, // delay (or random chance)
+ { // roomVolList
+ {32,4,3}, // {roomNo,leftVol,rightVol}
+ {33,12,14},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 146 Mr Shiny switched off: GEOPLG33 (Turn off FX_SHINY at the same time)
+ {
+ FX_SHINYOFF, // sampleId
+ FX_SPOT, // type
+ 0, // delay (or random chance)
+ { // roomVolList
+ {33,12,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 147 Benoir takes blood pressure: BENBP1 or BENBP2
+ {
+ FX_BLOODPRE, // sampleId
+ FX_SPOT, // type
+ 39, // delay (or random chance)
+ { // roomVolList
+ {34,14,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 148 George takes blood pressure: GEOBP1 or GEOBP2
+ {
+ FX_BLOODPRE, // sampleId
+ FX_SPOT, // type
+ 62, // delay (or random chance)
+ { // roomVolList
+ {34,14,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 149 Goat baas as it attacks: GOTCR and GOTCL
+ {
+ FX_GOATBAA, // sampleId
+ FX_SPOT, // type
+ 1, // delay (or random chance)
+ { // roomVolList
+ {24,12,12}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ //------------------------
+ // 150 Goat peeved at being trapped: GOTPLW (I'd advise triggering this anim randomly if you haven't done that)
+ {
+ FX_GOATDOH, // sampleId
+ FX_SPOT, // type
+ 7, // delay (or random chance)
+ { // roomVolList
+ {24,7,6}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 151 George triggers the Irish secret door: GEOPUT
+ {
+ FX_TRIGER25, // sampleId
+ FX_SPOT, // type
+ 35, // delay (or random chance)
+ { // roomVolList
+ {25,6,5}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 152 George winds up gramophone: GEOWIND
+ {
+ FX_WINDUP11, // sampleId
+ FX_SPOT, // type
+ 16, // delay (or random chance)
+ { // roomVolList
+ {11,7,7}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 153 Marib ambience
+ {
+ FX_MARIB, // sampleId
+ FX_LOOP, // type
+ 0, // delay (or random chance)
+ { // roomVolList
+ {45,7,7}, // {roomNo,leftVol,rightVol}
+ {47,5,5},
+ {50,5,4},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 154 Statuette breaks: STA2
+ {
+ FX_STATBREK, // sampleId
+ FX_SPOT, // type
+ 10, // delay (or random chance)
+ { // roomVolList
+ {45,7,4}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 155 George opens toilet door: CUBDOR50
+ {
+ FX_CUBDOR, // sampleId
+ FX_SPOT, // type
+ 6, // delay (or random chance)
+ { // roomVolList
+ {50,6,6}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 156 Crowd goes, "Ooh!": CRO36APP
+ {
+ FX_OOH, // sampleId
+ FX_SPOT, // type
+ 1, // delay (or random chance)
+ { // roomVolList
+ {36,6,7}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 157 Phone rings: When Nico calls back in room 41. Loops until the guard answers it.
+ {
+ FX_PHONCALL, // sampleId
+ FX_LOOP, // type
+ 0, // delay (or random chance)
+ { // roomVolList
+ {41,16,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 158 Phone picked up in 41: GUA41ANS
+ {
+ FX_FONEUP41, // sampleId
+ FX_SPOT, // type
+ 18, // delay (or random chance)
+ { // roomVolList
+ {41,5,6}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 159 George turns thermostat: GEO41THE (another dummy). Also used on the reverse.
+ {
+ FX_THERMO1, // sampleId
+ FX_SPOT, // type
+ 10, // delay (or random chance)
+ { // roomVolList
+ {41,6,5}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 160 Low echoing rumble of large church
+ {
+ FX_CHURCHFX, // sampleId
+ FX_LOOP, // type
+ 0, // delay (or random chance)
+ { // roomVolList
+ {38,5,5}, // {roomNo,leftVol,rightVol}
+ {48,5,5}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 161 George drys hand: GEO43HAN
+ {
+ FX_DRIER1, // sampleId
+ FX_SPOT, // type
+ 9, // delay (or random chance)
+ { // roomVolList
+ {43,16,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 162 George jumps in through window: GEOWIN8
+ {
+ FX_JUMPIN, // sampleId
+ FX_SPOT, // type
+ 49, // delay (or random chance)
+ { // roomVolList
+ {17,8,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 163 Khan fires: KHS12
+ {
+ FX_SHOTKHAN, // sampleId
+ FX_SPOT, // type
+ 30, // delay (or random chance)
+ { // roomVolList
+ {54,5,5}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 164 Khan fires: KHS5
+ {
+ FX_SHOTKHAN, // sampleId
+ FX_SPOT, // type
+ 5, // delay (or random chance)
+ { // roomVolList
+ {54,5,5}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 165 George falls: GEOSYR37
+ {
+ FX_GEOFAL54, // sampleId
+ FX_SPOT, // type
+ 25, // delay (or random chance)
+ { // roomVolList
+ {54,5,5}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 166 George falls after going for the gun (GEOSYR42)
+ {
+ FX_GEOFAL54, // sampleId
+ FX_SPOT, // type
+ 46, // delay (or random chance)
+ { // roomVolList
+ {54,5,5}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 167 Pickaxe sound 5: Screen 1 - WRKDIG01
+ {
+ FX_PICK5, // sampleId
+ FX_SPOT, // type
+ 9, // delay (or random chance) *
+ { // roomVolList
+ {1,3,3}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 168 George climbs ladder in 7: GEOASC07
+ {
+ FX_SEWLADU7, // sampleId
+ FX_SPOT, // type
+ 7, // delay (or random chance) *
+ { // roomVolList
+ {7,8,9}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 169 George picks keys up in Alamut: GEOKEYS1
+ {
+ FX_KEYS49, // sampleId
+ FX_SPOT, // type
+ 9, // delay (or random chance) *
+ { // roomVolList
+ {49,8,7}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ //------------------------
+ // 170 George puts down keys up in Alamut: GEOKEYS2
+ {
+ FX_KEYS49, // sampleId
+ FX_SPOT, // type
+ 7, // delay (or random chance) *
+ { // roomVolList
+ {49,8,7}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 171 George unlocks toilet door: GEOSYR43
+ {
+ FX_UNLOCK49, // sampleId
+ FX_SPOT, // type
+ 16, // delay (or random chance) *
+ { // roomVolList
+ {49,6,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 172 George breaks the toilet chain. GEOSYR48
+ {
+ FX_WCCHAIN, // sampleId
+ FX_SPOT, // type
+ 10, // delay (or random chance) *
+ { // roomVolList
+ {50,6,7}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 173 George breaks the branch of the cliff edge tree. GEOSYR20
+ {
+ FX_BREKSTIK, // sampleId
+ FX_SPOT, // type
+ 16, // delay (or random chance) *
+ { // roomVolList
+ {54,6,6}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 174 George climbs down the cliff face. GEOSYR23
+ {
+ FX_CLIMBDWN, // sampleId
+ FX_SPOT, // type
+ 6, // delay (or random chance) *
+ { // roomVolList
+ {54,6,7}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 175 George pulls ring: GEOSYR26
+ {
+ FX_RINGPULL, // sampleId
+ FX_SPOT, // type
+ 1, // delay (or random chance) *
+ { // roomVolList
+ {54,7,4}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 176 Bull's Head door opens: SECDOR
+ {
+ FX_SECDOR54, // sampleId
+ FX_SPOT, // type
+ 1, // delay (or random chance) *
+ { // roomVolList
+ {54,7,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 177 Inside Bull's Head door opens: DOOR55 (and its reverse).
+ {
+ FX_SECDOR55, // sampleId
+ FX_SPOT, // type
+ 1, // delay (or random chance) *
+ { // roomVolList
+ {55,4,12}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 178 Ayub opens door. AYU1
+ {
+ FX_AYUBDOOR, // sampleId
+ FX_SPOT, // type
+ 1, // delay (or random chance) *
+ { // roomVolList
+ {45,8,3}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 179 George knocks at the door in location 4: GEONOK followed by reverse of GEONOK
+ {
+ FX_KNOKKNOK, // sampleId
+ FX_SPOT, // type
+ 13, // delay (or random chance) *
+ { // roomVolList
+ {4,16,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 180 George knocks at the door in location 5: GEONOK05
+ {
+ FX_KNOKKNOK, // sampleId
+ FX_SPOT, // type
+ 8, // delay (or random chance) *
+ { // roomVolList
+ {5,8,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 181 Those pesky Irish birds turn up in Spain, too.
+ {
+ FX_SPNBIRD1, // sampleId
+ FX_RANDOM, // type
+ 720, // delay (or random chance) *
+ { // roomVolList
+ {57,1,4},
+ {58,8,4},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 182 Those pesky Irish birds turn up in Spain, too.
+ {
+ FX_SPNBIRD2, // sampleId
+ FX_RANDOM, // type
+ 697, // delay (or random chance) *
+ { // roomVolList
+ {57,4,8}, // {roomNo,leftVol,rightVol}
+ {58,4,1},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 183 The secret door in the well: SECDOR61 anim
+ {
+ FX_SECDOR61, // sampleId
+ FX_SPOT, // type
+ 1, // delay (or random chance) *
+ { // roomVolList
+ {61,4,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 184 Spanish countryside ambience
+ {
+ FX_SPAIN, // sampleId
+ FX_LOOP, // type
+ 0, // delay (or random chance) *
+ { // roomVolList
+ {57,1,2}, //
+ {58,2,2}, //
+ {60,1,1}, //
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 185 Spanish well ambience
+ {
+ FX_WELLDRIP, // sampleId
+ FX_LOOP, // type
+ 0, // delay (or random chance) *
+ { // roomVolList
+ {61,4,4}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 186 Fish falls on George's head: GEOTOT29
+ {
+ FX_FISHFALL, // sampleId
+ FX_SPOT, // type
+ 60, // delay (or random chance) *
+ { // roomVolList
+ {29,10,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 187 Hospital exterior ambience
+ {
+ FX_HOSPEXT, // sampleId
+ FX_LOOP, // type
+ 0, // delay (or random chance) *
+ { // roomVolList
+ {31,3,4}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 188 Hospital exterior gravel footstep #1
+ {
+ FX_GRAVEL1, // sampleId
+ FX_SPOT, // type
+ 0, // delay (or random chance) *
+ { // roomVolList
+ {31,16,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 189 Hospital exterior gravel footstep #2
+ {
+ FX_GRAVEL2, // sampleId
+ FX_SPOT, // type
+ 0, // delay (or random chance) *
+ { // roomVolList
+ {31,16,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ //------------------------
+ // 190 George opens sarcophagus: GEOSAR
+ {
+ FX_SARCO28A, // sampleId
+ FX_SPOT, // type
+ 26, // delay (or random chance) *
+ { // roomVolList
+ {28,6,6}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 191 George closes sarcophagus: GEOSAR2
+ {
+ FX_SARCO28B, // sampleId
+ FX_SPOT, // type
+ 24, // delay (or random chance) *
+ { // roomVolList
+ {28,3,3}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 192 Guard opens sarcophagus: MUSOPN
+ {
+ FX_SARCO28C, // sampleId
+ FX_SPOT, // type
+ 14, // delay (or random chance) *
+ { // roomVolList
+ {28,3,3}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 193 George peeks out of sarcophagus: GEOPEEK
+ {
+ FX_SARCO29, // sampleId
+ FX_SPOT, // type
+ 4, // delay (or random chance) *
+ { // roomVolList
+ {29,5,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 194 The rope drops into the room: ROPE29
+ {
+ FX_ROPEDOWN, // sampleId
+ FX_SPOT, // type
+ 3, // delay (or random chance) *
+ { // roomVolList
+ {29,3,3}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 195 George pushes the totem pole: GEOTOT29
+ {
+ FX_TOTEM29A, // sampleId
+ FX_SPOT, // type
+ 30, // delay (or random chance) *
+ { // roomVolList
+ {29,12,12}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 196 George pushes the totem pole over: GEOTOTB
+ {
+ FX_TOTEM29B, // sampleId
+ FX_SPOT, // type
+ 1, // delay (or random chance) *
+ { // roomVolList
+ {29,16,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 197 George rocks the totem pole in museum hours: TOTEM28
+ {
+ FX_TOTEM28A, // sampleId
+ FX_SPOT, // type
+ 8, // delay (or random chance) *
+ { // roomVolList
+ {28,4,4}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 198 Ambient sound for Montfauçon Square
+ {
+ FX_MONTAMB, // sampleId
+ FX_LOOP, // type
+ 0, // delay (or random chance) *
+ { // roomVolList
+ {36,6,6}, // {roomNo,leftVol,rightVol}
+ {40,6,6},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 199 Ambient sound churchyard.
+ {
+ FX_WIND71, // sampleId
+ FX_RANDOM, // type
+ 720, // delay (or random chance) *
+ { // roomVolList
+ {71,10,10}, // {roomNo,leftVol,rightVol}
+ {72,7,7},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 200 Owl cry #1 in churchyard
+ {
+ FX_OWL71A, // sampleId
+ FX_RANDOM, // type
+ 720, // delay (or random chance) *
+ { // roomVolList
+ {71,8,8}, // {roomNo,leftVol,rightVol}
+ {72,6,4},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 201 Owl cry #2 in churchyard
+ {
+ FX_OWL71B, // sampleId
+ FX_RANDOM, // type
+ 1080, // delay (or random chance) *
+ { // roomVolList
+ {71,8,8}, // {roomNo,leftVol,rightVol}
+ {72,7,6},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 202 Air conditioner in the museum
+ {
+ FX_AIRCON28, // sampleId
+ FX_LOOP, // type
+ 0, // delay (or random chance) *
+ { // roomVolList
+ {28,6,6}, // {roomNo,leftVol,rightVol}
+ {29,3,3},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 203 George breaks the handle off in the church tower. GEOWND72
+ {
+ FX_COG72A, // sampleId
+ FX_SPOT, // type
+ 5, // delay (or random chance) *
+ { // roomVolList
+ {72,10,10},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 204 Countess' room ambience
+ {
+ FX_AMBIEN56, // sampleId
+ FX_LOOP, // type
+ 0, // delay (or random chance) *
+ { // roomVolList
+ {56,3,2}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 205 Musical effect for George drinking beer. GEODRN20
+ {
+ FX_DRINK, // sampleId
+ FX_SPOT, // type
+ 17, // delay (or random chance) *
+ { // roomVolList
+ {20,12,12}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 206 Torch thrown through the air. GEOTHROW
+ {
+ FX_TORCH73, // sampleId
+ FX_SPOT, // type
+ 14, // delay (or random chance) *
+ { // roomVolList
+ {73,16,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 207 Internal train ambience.
+ {
+ FX_TRAININT, // sampleId
+ FX_LOOP, // type
+ 0, // delay (or random chance) *
+ { // roomVolList
+ {63,3,3}, // {roomNo,leftVol,rightVol}
+ {65,2,2},
+ {66,2,2},
+ {67,2,2},
+ {69,2,2},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 208 Countess' clock. PENDULUM. Note: Trigger the sound effect on alternate runs of the pendulum animation.
+ {
+ FX_PENDULUM, // sampleId
+ FX_SPOT, // type
+ 6, // delay (or random chance) *
+ { // roomVolList
+ {56,2,2}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 209 Compartment door. DOOR65
+ {
+ FX_DOOR65, // sampleId
+ FX_SPOT, // type
+ 1, // delay (or random chance) *
+ { // roomVolList
+ {65,3,3}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ //------------------------
+ // 210 Opening window. GEOOPN1
+ {
+ FX_WINDOW66, // sampleId
+ FX_SPOT, // type
+ 8, // delay (or random chance) *
+ { // roomVolList
+ {66,5,5}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 211 Wind rip by the open window. Triggered at the end of effect 210.
+ {
+ FX_WIND66, // sampleId
+ FX_LOOP, // type
+ 0, // delay (or random chance) *
+ { // roomVolList
+ {66,5,5}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 212 George electrocutes himself on the pantograph. Fool. GEOSHK64
+ {
+ FX_SHOCK63, // sampleId
+ FX_SPOT, // type
+ 11, // delay (or random chance) *
+ { // roomVolList
+ {63,12,14}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 213 The train brakes violently. GEOSTP69
+ {
+ FX_BRAKES, // sampleId
+ FX_SPOT, // type
+ 13, // delay (or random chance) *
+ { // roomVolList
+ {69,16,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 214 The train ticks over. From the end of BRAKE.
+ {
+ FX_TICK69, // sampleId
+ FX_LOOP, // type
+ 0, // delay (or random chance) *
+ { // roomVolList
+ {69,8,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 215 Eklund shoot Khan. FIGHT69
+ {
+ FX_EKSHOOT, // sampleId
+ FX_SPOT, // type
+ 120, // delay (or random chance) *
+ { // roomVolList
+ {69,12,12}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 216 Eklund shoots George. GEODIE69
+ {
+ FX_EKSHOOT, // sampleId
+ FX_SPOT, // type
+ 21, // delay (or random chance) *
+ { // roomVolList
+ {69,12,12}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 217 Khan pulls the door open. FIGHT69
+ {
+ FX_DOOR69, // sampleId
+ FX_SPOT, // type
+ 42, // delay (or random chance) *
+ { // roomVolList
+ {69,8,12}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 218 Wind shriek. Loops from the end of DOOR69 wav to the beginning of BRAKES.
+ {
+ FX_WIND66, // sampleId
+ FX_LOOP, // type
+ 0, // delay (or random chance) *
+ { // roomVolList
+ {69,8,12}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 219 Brakes releasing pressure. Only after BRAKE has been run.
+ {
+ FX_PNEUMO69, // sampleId
+ FX_RANDOM, // type
+ 720, // delay (or random chance) *
+ { // roomVolList
+ {69,8,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 220 External train sound. Played while George is on the top of the train.
+ {
+ FX_TRAINEXT, // sampleId
+ FX_LOOP, // type
+ 0, // delay (or random chance) *
+ { // roomVolList
+ {63,8,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 221 The passing train. FIGHT69
+ {
+ FX_TRNPASS, // sampleId
+ FX_SPOT, // type
+ 102, // delay (or random chance) *
+ { // roomVolList
+ {69,4,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 222 George descends into sewer. GEODESO6
+ {
+ FX_LADD2, // sampleId
+ FX_SPOT, // type
+ 1, // delay (or random chance) *
+ { // roomVolList
+ {6,4,4}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 223 George ascends into alley. GEOASC06
+ {
+ FX_LADD3, // sampleId
+ FX_SPOT, // type
+ 10, // delay (or random chance) *
+ { // roomVolList
+ {6,4,4}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 224 George replaces manhole cover. GEOMAN9
+ {
+ FX_COVERON2, // sampleId
+ FX_SPOT, // type
+ 19, // delay (or random chance) *
+ { // roomVolList
+ {2,12,11}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 225 Montfaucon sewer ambience.
+ {
+ FX_AMBIEN37, // sampleId
+ FX_LOOP, // type
+ 0, // delay (or random chance) *
+ { // roomVolList
+ {37,5,5}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 226 George's winning smile. GEOJMP72.
+ {
+ FX_PING, // sampleId
+ FX_SPOT, // type
+ 26, // delay (or random chance) *
+ { // roomVolList
+ {72,10,14}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 227 George starts to open the manhole. GEO36KNE
+ {
+ FX_MANOP36, // sampleId
+ FX_SPOT, // type
+ 19, // delay (or random chance) *
+ { // roomVolList
+ {36,4,6}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 228 George opens the manhole. GEO36OPE
+ {
+ FX_PULLUP36, // sampleId
+ FX_SPOT, // type
+ 9, // delay (or random chance) *
+ { // roomVolList
+ {36,4,6}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 229 George replaces the manhole cover. GEO36CLO
+ {
+ FX_REPLCE36, // sampleId
+ FX_SPOT, // type
+ 20, // delay (or random chance) *
+ { // roomVolList
+ {36,4,6}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ //------------------------
+ // 230 George knocks at righthand arch. GEO37TA3
+ {
+ FX_KNOCK37, // sampleId
+ FX_SPOT, // type
+ 20, // delay (or random chance) *
+ { // roomVolList
+ {37,6,12}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 231 George knocks at middle or lefthand arch. GEO37TA1 or GEO37TA2.
+ {
+ FX_KNOCK37B, // sampleId
+ FX_SPOT, // type
+ 20, // delay (or random chance) *
+ { // roomVolList
+ {37,4,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 232 George winds the chain down HOO37LBO
+ {
+ FX_CHAIN37, // sampleId
+ FX_SPOT, // type
+ 14, // delay (or random chance) *
+ { // roomVolList
+ {37,6,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 233 George winds the chain up. HOO37LBO (In reverse)
+ {
+ FX_CHAIN37B, // sampleId
+ FX_SPOT, // type
+ 1, // delay (or random chance) *
+ { // roomVolList
+ {37,6,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 234 George breaks hole in door. GEO37TA4
+ {
+ FX_HOLE37, // sampleId
+ FX_SPOT, // type
+ 11, // delay (or random chance) *
+ { // roomVolList
+ {37,6,12}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 235 Plaster door collapses. DOR37COL
+ {
+ FX_DOOR37, // sampleId
+ FX_SPOT, // type
+ 23, // delay (or random chance) *
+ { // roomVolList
+ {37,8,15}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 236 Barge winch. GEO37TUL (If it runs more than once, trigger the effect on frame one. Incidentally, this is a reversible so the effect must launch on frame one of the .cdr version as well. )
+ {
+ FX_WINCH37, // sampleId
+ FX_SPOT, // type
+ 1, // delay (or random chance) *
+ { // roomVolList
+ {37,16,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 237 George places chess piece. GEOSPA17
+ {
+ FX_CHESS, // sampleId
+ FX_SPOT, // type
+ 23, // delay (or random chance) *
+ { // roomVolList
+ {59,4,4}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 238 Piano loop for the upstairs hotel corridor.
+ {
+ FX_PIANO14, // sampleId
+ FX_LOOP, // type
+ 0, // delay (or random chance) *
+ { // roomVolList
+ {14,2,2}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 239 Door opens in church tower. PANEL72
+ {
+ FX_SECDOR72, // sampleId
+ FX_SPOT, // type
+ 1, // delay (or random chance) *
+ { // roomVolList
+ {72,8,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ //------------------------
+ // 240 George rummages through debris. Tied to the end of the whichever crouch is used. Use either this one or RUMMAGE2 alternatively or randomly. Same kind of schtick as the pick axe noises, I suppose.
+ {
+ FX_RUMMAGE1, // sampleId
+ FX_SPOT, // type
+ 9, // delay (or random chance) *
+ { // roomVolList
+ {72,8,6}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 241 George rummages through debris. See above for notes.
+ {
+ FX_RUMMAGE2, // sampleId
+ FX_SPOT, // type
+ 9, // delay (or random chance) *
+ { // roomVolList
+ {72,8,6}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 242 Gust of wind in the graveyard.
+ {
+ FX_GUST71, // sampleId
+ FX_RANDOM, // type
+ 1080, // delay (or random chance) *
+ { // roomVolList
+ {71,3,3}, // {roomNo,leftVol,rightVol}
+ {72,2,1},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 243 Violin ambience for Ireland.
+ {
+ FX_VIOLIN19, // sampleId
+ FX_LOOP, // type
+ 0, // delay (or random chance) *
+ { // roomVolList
+ {19,3,3}, // {roomNo,leftVol,rightVol}
+ {21,2,2},
+ {26,2,2},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 244 Footstep #1 for underground locations. Same schtick as for 188 and 189.
+ {
+ FX_SEWSTEP1, // sampleId
+ FX_SPOT, // type
+ 0, // delay (or random chance) *
+ { // roomVolList
+ {6,8,8}, // {roomNo,leftVol,rightVol}
+ {7,8,8},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 245 Footstep #2 for underground locations. Same schtick as for 188 and 189.
+ {
+ FX_SEWSTEP2, // sampleId
+ FX_SPOT, // type
+ 0, // delay (or random chance) *
+ { // roomVolList
+ {6,16,16}, // {roomNo,leftVol,rightVol}
+ {7,16,16},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 246 Nico's carabiner as she descends into the museum. NICPUS1
+ {
+ FX_CARABINE, // sampleId
+ FX_SPOT, // type
+ 4, // delay (or random chance) *
+ { // roomVolList
+ {29,8,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 247 Rosso is shot (with a piece of field artillery). ROSSHOT
+ {
+ FX_GUN79, // sampleId
+ FX_SPOT, // type
+ 2, // delay (or random chance) *
+ { // roomVolList
+ {79,16,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 248 George is hit by the thrown stilletto. GEODIE1
+ {
+ FX_DAGGER1, // sampleId
+ FX_SPOT, // type
+ 2, // delay (or random chance) *
+ { // roomVolList
+ {73,12,12}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 249 George is hit by the thrown stilletto after walking forward. GEODIE2
+ {
+ FX_DAGGER1, // sampleId
+ FX_SPOT, // type
+ 9, // delay (or random chance) *
+ { // roomVolList
+ {73,12,12}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ //------------------------
+ // 250 Can hits the well water. The cue is in GAR2SC57.TXT immediately after the line, "over: Lopez threw the can away. It seemed to fall an awfully long way."
+ {
+ FX_CANFALL, // sampleId
+ FX_SPOT, // type
+ 4, // delay (or random chance) *
+ { // roomVolList
+ {57,16,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 251 Mad, fizzing damp and ancient gunpowder after the application of a torch.
+ {
+ FX_GUNPOWDR, // sampleId
+ FX_LOOP, // type
+ 0, // delay (or random chance) *
+ { // roomVolList
+ {73,12,12}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 252 Maguire whistling. MAGSLK. Plays while Maguire is idling, stops abruptly when he does something else.
+ {
+ FX_WHISTLE, // sampleId
+ FX_LOOP, // type
+ 0, // delay (or random chance) *
+ { // roomVolList
+ {19,2,5}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 253 George is hit by the goat. GEOHITR and GEOHITL.
+ {
+ FX_GEOGOAT, // sampleId
+ FX_SPOT, // type
+ 11, // delay (or random chance) *
+ { // roomVolList
+ {24,10,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 254 Manager says, "Hello". MAN2
+ {
+ FX_MANG1, // sampleId
+ FX_SPOT, // type
+ 7, // delay (or random chance) *
+ { // roomVolList
+ {49,6,5}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 255 Manager says, Don't go in there!" MAN3
+ {
+ FX_MANG2, // sampleId
+ FX_SPOT, // type
+ 11, // delay (or random chance) *
+ { // roomVolList
+ {49,6,5}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 256 Manager says, "Here are the keys." MAN4
+ {
+ FX_MANG3, // sampleId
+ FX_SPOT, // type
+ 6, // delay (or random chance) *
+ { // roomVolList
+ {49,6,5}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 257 George pulls the lion's tooth. GEOSPA26
+ {
+ FX_TOOTHPUL, // sampleId
+ FX_SPOT, // type
+ 19, // delay (or random chance) *
+ { // roomVolList
+ {61,8,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 258 George escapes the lion. LION1
+ {
+ FX_LIONFALL, // sampleId
+ FX_SPOT, // type
+ 7, // delay (or random chance) *
+ { // roomVolList
+ {61,8,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 259 George gets flattened. LION2
+ {
+ FX_LIONFAL2, // sampleId
+ FX_SPOT, // type
+ 4, // delay (or random chance) *
+ { // roomVolList
+ {61,8,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 260 Rosso dies. ROSSFALL
+ {
+ FX_ROSSODIE, // sampleId
+ FX_SPOT, // type
+ 1, // delay (or random chance) *
+ { // roomVolList
+ {74,16,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 261 Eklund chokes George. FIGHT79
+ {
+ FX_CHOKE1, // sampleId
+ FX_SPOT, // type
+ 9, // delay (or random chance) *
+ { // roomVolList
+ {79,16,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 262 Eklund chokes George some more. FIGHT79
+ {
+ FX_CHOKE2, // sampleId
+ FX_SPOT, // type
+ 54, // delay (or random chance) *
+ { // roomVolList
+ {79,16,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 263 Eklund dies. FIGHT79
+ {
+ FX_FIGHT2, // sampleId
+ FX_SPOT, // type
+ 44, // delay (or random chance) *
+ { // roomVolList
+ {79,16,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 264 George hears museum break-in. GEOSUR29
+ {
+ FX_DOOR29, // sampleId
+ FX_SPOT, // type
+ 10, // delay (or random chance) *
+ { // roomVolList
+ {94,14,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 265 George hits the floor having been shot. GEODED.
+ {
+ FX_GDROP29, // sampleId
+ FX_SPOT, // type
+ 27, // delay (or random chance) *
+ { // roomVolList
+ {29,10,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 266 George hits the floor having been stunned. GEOFISH
+ {
+ FX_GDROP29, // sampleId
+ FX_SPOT, // type
+ 27, // delay (or random chance) *
+ { // roomVolList
+ {29,10,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 267 Fitz being knocked down as heard from inside the pub. Triggered from the script, I think. This is just a stopgap until Hackenbacker do the full version for the Smacker, then I'll sample the requisite bit and put it in here.
+ {
+ FX_FITZHIT, // sampleId
+ FX_SPOT, // type
+ 1, // delay (or random chance) *
+ { // roomVolList
+ {20,16,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 268 Gendarme shoots lock off. GENSHOT
+ {
+ FX_GUN34, // sampleId
+ FX_SPOT, // type
+ 1, // delay (or random chance) *
+ { // roomVolList
+ {34,16,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 269 ECG alarm, Marquet in trouble. Start looping imeediately before George says, "Thanks, Bunny".
+ // Incidentally, James, please switch off Mr Shiney permanently when George first gets into Marquet's room. He gets in the way when they're figuring out that Eklund's an imposter.
+ {
+ FX_PULSE2, // sampleId
+ FX_LOOP, // type
+ 1, // delay (or random chance) *
+ { // roomVolList
+ {30,16,16}, // {roomNo,leftVol,rightVol}
+ {34,12,12}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ //------------------------
+ // 270 ECG alarm, Marquet dead. Switch off the previous effect and replace with this immediately before the gendarme says, "Stand back, messieurs."
+ {
+ FX_PULSE3, // sampleId
+ FX_LOOP, // type
+ 1, // delay (or random chance) *
+ { // roomVolList
+ {30,16,16}, // {roomNo,leftVol,rightVol}
+ {34,13,13},
+ {35,13,13},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 271 Door closing. GEOENT15
+ {
+ FX_DORCLOSE, // sampleId
+ FX_SPOT, // type
+ 4, // delay (or random chance) *
+ { // roomVolList
+ {15,12,12}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 272 Cupboard opening. GEOCOT
+ {
+ FX_CUPBOPEN, // sampleId
+ FX_SPOT, // type
+ 8, // delay (or random chance) *
+ { // roomVolList
+ {33,12,12}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 273 Cupboard closing. GEOCOT
+ {
+ FX_CUPBCLOS, // sampleId
+ FX_SPOT, // type
+ 33, // delay (or random chance) *
+ { // roomVolList
+ {33,12,12}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 274 Closing door when George leaves hotel room. GEOLVS15 and GEODOR17 (they're identical).
+ {
+ FX_DORCLOSE, // sampleId
+ FX_SPOT, // type
+ 44, // delay (or random chance) *
+ { // roomVolList
+ {15,12,12}, // {roomNo,leftVol,rightVol}
+ {17,12,12},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 275 Closing door when George leaves the pub. DOROPN20 (Reversed)
+ {
+ FX_DORCLOSE20,// sampleId
+ FX_SPOT, // type
+ 11, // delay (or random chance) *
+ { // roomVolList
+ {20,12,12}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 276 Nico call for a cab. NICPHN10
+ {
+ FX_PHONICO1, // sampleId
+ FX_SPOT, // type
+ 15, // delay (or random chance) *
+ { // roomVolList
+ {10,12,12}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 277 Nico puts down the phone. NICDWN10
+ {
+ FX_FONEDN, // sampleId
+ FX_SPOT, // type
+ 6, // delay (or random chance) *
+ { // roomVolList
+ {10,12,12}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 278 Painter puts down the phone. PAI41HAN
+ {
+ FX_FONEDN41, // sampleId
+ FX_SPOT, // type
+ 5, // delay (or random chance) *
+ { // roomVolList
+ {41,12,12}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 279 Mechanical hum of heating system in the dig lobby.
+ {
+ FX_AIRCON41, // sampleId
+ FX_LOOP, // type
+ 0, // delay (or random chance) *
+ { // roomVolList
+ {41,6,6}, // {roomNo,leftVol,rightVol}
+ {43,8,8},
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ //------------------------
+ // 280 The Sword is Reforged (Grandmaster gets zapped) GMPOWER
+ {
+ FX_REFORGE1, // sampleId
+ FX_SPOT, // type
+ 1, // delay (or random chance) *
+ { // roomVolList
+ {78,16,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 281 The Sword is Reforged (G&N gawp at the spectacle) There's no anim I know of to tie it to unless the flickering blue light is one.
+ {
+ FX_REFORGE2, // sampleId
+ FX_SPOT, // type
+ 1, // delay (or random chance) *
+ { // roomVolList
+ {75,12,12}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 282 The Sword is Reforged (We watch over G&N's heads as the Grandmaster gets zapped) GMWRIT74
+ {
+ FX_REFORGE2, // sampleId
+ FX_SPOT, // type
+ 1, // delay (or random chance) *
+ { // roomVolList
+ {74,14,14}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 283 The Sword is Reforged (Grandmaster finishes being zapped) GMWRITH
+ {
+ FX_REFORGE4, // sampleId
+ FX_SPOT, // type
+ 1, // delay (or random chance) *
+ { // roomVolList
+ {78,16,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 284 Baphomet Cavern Ambience
+ {
+ FX_BAPHAMB, // sampleId
+ FX_LOOP, // type
+ 0, // delay (or random chance) *
+ { // roomVolList
+ {74,6,8}, // {roomNo,leftVol,rightVol}
+ {75,7,8}, // {roomNo,leftVol,rightVol}
+ {76,8,8}, // {roomNo,leftVol,rightVol}
+ {77,8,8}, // {roomNo,leftVol,rightVol}
+ {78,8,8}, // {roomNo,leftVol,rightVol}
+ {79,7,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 285 Duane's Happy-Snappy Camera. XDNEPHO3 and XDNEPHO5.
+ {
+ FX_CAMERA45, // sampleId
+ FX_SPOT, // type
+ 30, // delay (or random chance) *
+ { // roomVolList
+ {45,4,4}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 286 Grand Master strikes the floor with his cane. GMENTER
+ {
+ FX_STAFF, // sampleId
+ FX_SPOT, // type
+ 28, // delay (or random chance) *
+ { // roomVolList
+ {73,8,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 287 George descends ladder in 7: GEOASC07 (Reversed) This used to be handled by effect #46 but it didn't fit at all.
+ {
+ FX_SEWLADD7, // sampleId
+ FX_SPOT, // type
+ 1, // delay (or random chance) *
+ { // roomVolList
+ {7,8,9}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 288 Sam kicks the recalcitrant Mr. Shiny. DOMKIK
+ {
+ FX_KIKSHINY, // sampleId
+ FX_SPOT, // type
+ 16, // delay (or random chance) *
+ { // roomVolList
+ {33,9,9}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 289 Gust of wind outside bombed cafe. LVSFLY
+ {
+ FX_LVSFLY, // sampleId
+ FX_SPOT, // type
+ 1, // delay (or random chance) *
+ { // roomVolList
+ {1,16,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 290 Ron's disgusting No.1 Sneeze. Either this or the next effect (randomly chosen) is used for the following animations, RONSNZ & RONSNZ2
+ {
+ FX_SNEEZE1, // sampleId
+ FX_SPOT, // type
+ 11, // delay (or random chance) *
+ { // roomVolList
+ {20,10,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 291 Ron's disgusting No.2 Sneeze. Either this or the previous effect (randomly chosen) is used for the following animations, RONSNZ & RONSNZ2
+ {
+ FX_SNEEZE2, // sampleId
+ FX_SPOT, // type
+ 11, // delay (or random chance) *
+ { // roomVolList
+ {20,10,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 292 Dripping tap in the pub cellar. TAPDRP
+ {
+ FX_DRIPIRE, // sampleId
+ FX_SPOT, // type
+ 9, // delay (or random chance) *
+ { // roomVolList
+ {21,4,4}, // {roomNo,leftVol,rightVol}
+ {26,4,4}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 293 Dripping tap in the pub cellar. TAPDRP
+ {
+ FX_DRIPIRE2, // sampleId
+ FX_SPOT, // type
+ 9, // delay (or random chance) *
+ { // roomVolList
+ {21,4,4}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 294 Dripping tap in the excavation toilet. (see WATER43 - but it's looped anyway, not triggered with anim)
+ {
+ FX_TAPDRIP, // sampleId
+ FX_SPOT, // type
+ 6, // delay (or random chance) *
+ { // roomVolList
+ {43,8,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 295 George closes the mausoleum window. GEOSPA23
+ {
+ FX_WINDOW59, // sampleId
+ FX_SPOT, // type
+ 24, // delay (or random chance) *
+ { // roomVolList
+ {59,10,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 296 George opens the mausoleum window, the feebleminded loon. GEOSPA23 reversed.
+ {
+ FX_WINDOW59, // sampleId
+ FX_SPOT, // type
+ 14, // delay (or random chance) *
+ { // roomVolList
+ {59,10,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 297 When George & Nico hear chanting from sc73
+ {
+ FX_CHANT, // sampleId
+ FX_SPOT, // type
+ 10, // delay (or random chance) *
+ { // roomVolList
+ {73,2,4}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 298 EKFIGHT
+ {
+ FX_FIGHT1, // sampleId
+ FX_SPOT, // type
+ 31, // delay (or random chance) *
+ { // roomVolList
+ {74,16,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 299 Small van passes, left to right. CARA9 and CARC9
+ {
+ FX_LITEVEHR, // sampleId
+ FX_SPOT, // type
+ 1, // delay (or random chance) *
+ { // roomVolList
+ {9,16,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 300 Small van passes, right to left to right. CARB9
+ {
+ FX_LITEVEHL, // sampleId
+ FX_SPOT, // type
+ 1, // delay (or random chance) *
+ { // roomVolList
+ {9,16,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 301 Truck passes, left to right. TRUCKA9 and TRUCKB9
+ {
+ FX_HVYVEHR, // sampleId
+ FX_SPOT, // type
+ 1, // delay (or random chance) *
+ { // roomVolList
+ {9,14,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 302 Truck passes, right to left. TRUCKC9
+ {
+ FX_HVYVEHL, // sampleId
+ FX_SPOT, // type
+ 1, // delay (or random chance) *
+ { // roomVolList
+ {9,14,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 303 With anim FIGHT69
+ {
+ FX_FIGHT69, // sampleId
+ FX_SPOT, // type
+ 78, // delay (or random chance) *
+ { // roomVolList
+ {69,12,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 304 With anim GEODIE1 in sc73
+ {
+ FX_GDROP73, // sampleId
+ FX_SPOT, // type
+ 14, // delay (or random chance) *
+ { // roomVolList
+ {73,12,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 305 With anim GEODIE2 in sc73
+ {
+ FX_GDROP73, // sampleId
+ FX_SPOT, // type
+ 21, // delay (or random chance) *
+ { // roomVolList
+ {73,12,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 306 With anim GEODES25
+ {
+ FX_LADDWN25, // sampleId
+ FX_SPOT, // type
+ 0, // delay (or random chance) *
+ { // roomVolList
+ {25,12,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 307 With anim GEOASC25
+ {
+ FX_LADDUP25, // sampleId
+ FX_SPOT, // type
+ 8, // delay (or random chance) *
+ { // roomVolList
+ {25,12,8}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 308 With anim GKSWORD in sc76
+ {
+ FX_GKSWORD, // sampleId
+ FX_SPOT, // type
+ 9, // delay (or random chance) *
+ { // roomVolList
+ {76,10,10}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 309 With anim GEO36KNE in sc36
+ {
+ FX_KEYIN, // sampleId
+ FX_SPOT, // type
+ 18, // delay (or random chance) *
+ { // roomVolList
+ {36,14,14}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 310 With anim GEO36ENT in sc36
+ {
+ FX_COVDWN, // sampleId
+ FX_SPOT, // type
+ 85, // delay (or random chance) *
+ { // roomVolList
+ {36,14,14}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ // 311 With anim SECDOR59 in sc59
+ {
+ FX_SECDOR59, // sampleId
+ FX_SPOT, // type
+ 0, // delay (or random chance) *
+ { // roomVolList
+ {59,16,16}, // {roomNo,leftVol,rightVol}
+ {0,0,0}, // NULL-TERMINATOR
+ },
+ },
+ //------------------------
+ };
+
+ writeRecord(_fxList, sizeof(_fxList), GBVARS_FXLIST_INDEX , GBVARS_SWORD1);
+}
+
+void Sword1_addStaticres() {
+ addStaticres_fxList();
+}
diff --git a/backends/platform/PalmOS/Src/builder/sword1/sw1_staticres.h b/backends/platform/PalmOS/Src/builder/sword1/sw1_staticres.h
new file mode 100644
index 0000000000..796e3d10ed
--- /dev/null
+++ b/backends/platform/PalmOS/Src/builder/sword1/sw1_staticres.h
@@ -0,0 +1,5201 @@
+#ifndef SWORDRES_H
+#define SWORDRES_H
+
+//namespace Sword1 {
+
+// scripts
+ // standard
+#define SCRIPT0 0x01000000
+ // 1 entities in TXTs, 1 in datafiles.
+ // megas
+#define SCRIPT128 0x01010000
+#define SCRIPT129 0x01010001
+#define SCRIPT130 0x01010002
+#define SCRIPT131 0x01010003
+#define SCRIPT133 0x01010004
+#define SCRIPT134 0x01010005
+#define SCRIPT145 0x01010006
+#define SCRIPT146 0x01010007
+ // 8 entities in TXTs, 8 in datafiles.
+ // maps
+#define SCRIPT80 0x01020000
+#define SCRIPT86 0x01020001
+#define SCRIPT90 0x01020002
+ // 3 entities in TXTs, 3 in datafiles.
+ // paris1
+#define SCRIPT1 0x01030000
+#define SCRIPT2 0x01030001
+#define SCRIPT3 0x01030002
+#define SCRIPT4 0x01030003
+#define SCRIPT5 0x01030004
+#define SCRIPT6 0x01030005
+#define SCRIPT7 0x01030006
+#define SCRIPT8 0x01030007
+ // 8 entities in TXTs, 8 in datafiles.
+ // paris2
+#define SCRIPT9 0x01040000
+#define SCRIPT10 0x01040001
+#define SCRIPT11 0x01040002
+#define SCRIPT12 0x01040003
+#define SCRIPT13 0x01040004
+#define SCRIPT14 0x01040005
+#define SCRIPT15 0x01040006
+#define SCRIPT16 0x01040007
+#define SCRIPT17 0x01040008
+#define SCRIPT18 0x01040009
+#define SCRIPT46 0x0104000A
+ // 11 entities in TXTs, 11 in datafiles.
+ // paris3
+#define SCRIPT27 0x01050000
+#define SCRIPT28 0x01050001
+#define SCRIPT29 0x01050002
+#define SCRIPT31 0x01050003
+#define SCRIPT32 0x01050004
+#define SCRIPT33 0x01050005
+#define SCRIPT34 0x01050006
+#define SCRIPT35 0x01050007
+ // 8 entities in TXTs, 8 in datafiles.
+ // paris4
+#define SCRIPT36 0x01060000
+#define SCRIPT37 0x01060001
+#define SCRIPT38 0x01060002
+#define SCRIPT39 0x01060003
+#define SCRIPT40 0x01060004
+#define SCRIPT41 0x01060005
+#define SCRIPT42 0x01060006
+#define SCRIPT43 0x01060007
+#define SCRIPT48 0x01060008
+ // 9 entities in TXTs, 9 in datafiles.
+ // ireland
+#define SCRIPT19 0x01070000
+#define SCRIPT20 0x01070001
+#define SCRIPT21 0x01070002
+#define SCRIPT22 0x01070003
+#define SCRIPT23 0x01070004
+#define SCRIPT24 0x01070005
+#define SCRIPT25 0x01070006
+#define SCRIPT26 0x01070007
+ // 8 entities in TXTs, 8 in datafiles.
+ // spain
+#define SCRIPT56 0x01080000
+#define SCRIPT57 0x01080001
+#define SCRIPT58 0x01080002
+#define SCRIPT59 0x01080003
+#define SCRIPT60 0x01080004
+#define SCRIPT61 0x01080005
+#define SCRIPT62 0x01080006
+ // 7 entities in TXTs, 7 in datafiles.
+ // syria
+#define SCRIPT45 0x01090000
+#define SCRIPT47 0x01090001
+#define SCRIPT49 0x01090002
+#define SCRIPT50 0x01090003
+#define SCRIPT54 0x01090004
+#define SCRIPT55 0x01090005
+ // 6 entities in TXTs, 6 in datafiles.
+ // train
+#define SCRIPT63 0x010A0000
+#define SCRIPT65 0x010A0001
+#define SCRIPT66 0x010A0002
+#define SCRIPT67 0x010A0003
+#define SCRIPT69 0x010A0004
+ // 5 entities in TXTs, 5 in datafiles.
+ // scotland
+#define SCRIPT71 0x010B0000
+#define SCRIPT72 0x010B0001
+#define SCRIPT73 0x010B0002
+#define SCRIPT74 0x010B0003
+ // 4 entities in TXTs, 4 in datafiles.
+// compacts
+ // standard
+#define TEXT_OBS 0x02000000
+ // 1 entities in TXTs, 1 in datafiles.
+ // megas
+#define MEGA_GEO 0x02010000
+#define GEO_TLK_TABLE 0x02010001
+#define WHT_TLK_TABLE 0x02010002
+#define GEO_SHRUG_TABLE 0x02010003
+#define GEO_GIVE_TABLE 0x02010004
+#define GEO_GIVER_TABLE 0x02010005
+#define GEO_CROUCH_TABLE 0x02010006
+#define GEO_CROUCHR_TABLE 0x02010007
+#define GEO_PICKUP_TABLE 0x02010008
+#define GEO_RELAX_TABLE 0x02010009
+#define GEO_RELAXR_TABLE 0x0201000A
+#define GEO_HAIR_TABLE 0x0201000B
+#define GEO_BLINK_TABLE 0x0201000C
+#define GEOPHN_TABLE 0x0201000D
+#define GEO_GAUGE_TABLE 0x0201000E
+#define GEO_SHOW_TABLE 0x0201000F
+#define GEO_SHOWR_TABLE 0x02010010
+#define GEOSTA_TABLE 0x02010011
+#define GEOMON_TABLE 0x02010012
+#define MEGA_DUANE 0x02010013
+#define DUA5_TABLE 0x02010014
+#define DUA6_TABLE 0x02010015
+#define DUA7_TABLE 0x02010016
+#define DUA8_TABLE 0x02010017
+#define DUA9_TABLE 0x02010018
+#define MEGA_NICO 0x02010019
+#define NIC_TLK_TABLE 0x0201001A
+#define NIC_PHOTO_TABLE 0x0201001B
+#define NICPHN_TABLE 0x0201001C
+#define MEGA_MUS 0x0201001D
+#define MUS_TLK_TABLE 0x0201001E
+#define MEGA_BENOIR 0x0201001F
+#define BEN_GAUGE_TABLE 0x02010020
+#define BEN_TLK_TABLE 0x02010021
+#define MEGA_ROSSO 0x02010022
+#define MEGA_MOUE 0x02010023
+#define MEGA_ALBERT 0x02010024
+ // 37 entities in TXTs, 37 in datafiles.
+ // maps
+#define COMP80 0x02020000
+#define COMP86 0x02020001
+#define COMP90 0x02020002
+#define COMP91 0x02020003
+#define COMP99 0x02020004
+ // 5 entities in TXTs, 5 in datafiles.
+ // paris1
+#define COMP1 0x02030000
+#define COMP2 0x02030001
+#define COMP3 0x02030002
+#define COMP4 0x02030003
+#define COMP5 0x02030004
+#define COMP6 0x02030005
+#define COMP7 0x02030006
+#define COMP8 0x02030007
+ // 8 entities in TXTs, 8 in datafiles.
+ // paris2
+#define COMP9 0x02040000
+#define COMP10 0x02040001
+#define COMP11 0x02040002
+#define COMP12 0x02040003
+#define COMP13 0x02040004
+#define COMP14 0x02040005
+#define COMP15 0x02040006
+#define COMP16 0x02040007
+#define COMP17 0x02040008
+#define COMP18 0x02040009
+#define COMP81 0x0204000A
+#define COMP46 0x0204000B
+ // 12 entities in TXTs, 12 in datafiles.
+ // paris3
+#define COMP27 0x02050000
+#define COMP28 0x02050001
+#define COMP29 0x02050002
+#define COMP30 0x02050003
+#define COMP31 0x02050004
+#define COMP32 0x02050005
+#define COMP33 0x02050006
+#define COMP34 0x02050007
+#define COMP35 0x02050008
+ // 9 entities in TXTs, 9 in datafiles.
+ // paris4
+#define COMP36 0x02060000
+#define COMP37 0x02060001
+#define COMP38 0x02060002
+#define COMP39 0x02060003
+#define COMP40 0x02060004
+#define COMP41 0x02060005
+#define COMP42 0x02060006
+#define COMP43 0x02060007
+#define COMP48 0x02060008
+ // 9 entities in TXTs, 9 in datafiles.
+ // ireland
+#define COMP19 0x02070000
+#define COMP20 0x02070001
+#define COMP21 0x02070002
+#define COMP22 0x02070003
+#define COMP23 0x02070004
+#define COMP24 0x02070005
+#define COMP25 0x02070006
+#define COMP26 0x02070007
+ // 8 entities in TXTs, 8 in datafiles.
+ // spain
+#define COMP56 0x02080000
+#define COMP57 0x02080001
+#define COMP58 0x02080002
+#define COMP59 0x02080003
+#define COMP60 0x02080004
+#define COMP61 0x02080005
+#define COMP62 0x02080006
+ // 7 entities in TXTs, 7 in datafiles.
+ // syria
+#define COMP45 0x02090000
+#define COMP47 0x02090001
+#define COMP49 0x02090002
+#define COMP50 0x02090003
+#define COMP53 0x02090004
+#define COMP54 0x02090005
+#define COMP55 0x02090006
+ // 7 entities in TXTs, 7 in datafiles.
+ // train
+#define COMP63 0x020A0000
+#define COMP65 0x020A0001
+#define COMP66 0x020A0002
+#define COMP67 0x020A0003
+#define COMP69 0x020A0004
+ // 5 entities in TXTs, 5 in datafiles.
+ // scotland
+#define COMP71 0x020B0000
+#define COMP72 0x020B0001
+#define COMP73 0x020B0002
+#define COMP74 0x020B0003
+#define COMP75 0x020B0004
+#define COMP76 0x020B0005
+#define COMP77 0x020B0006
+#define COMP78 0x020B0007
+#define COMP79 0x020B0008
+ // 9 entities in TXTs, 9 in datafiles.
+// text
+ // english
+#define ENGLISH0 0x03000000
+#define ENGLISH1 0x03000001
+#define ENGLISH2 0x03000002
+#define ENGLISH3 0x03000003
+#define ENGLISH4 0x03000004
+#define ENGLISH5 0x03000005
+#define ENGLISH6 0x03000006
+#define ENGLISH7 0x03000007
+#define ENGLISH9 0x03000008
+#define ENGLISH11 0x03000009
+#define ENGLISH12 0x0300000A
+#define ENGLISH13 0x0300000B
+#define ENGLISH14 0x0300000C
+#define ENGLISH15 0x0300000D
+#define ENGLISH16 0x0300000E
+#define ENGLISH17 0x0300000F
+#define ENGLISH18 0x03000010
+#define ENGLISH19 0x03000011
+#define ENGLISH20 0x03000012
+#define ENGLISH21 0x03000013
+#define ENGLISH22 0x03000014
+#define ENGLISH23 0x03000015
+#define ENGLISH24 0x03000016
+#define ENGLISH25 0x03000017
+#define ENGLISH27 0x03000018
+#define ENGLISH28 0x03000019
+#define ENGLISH29 0x0300001A
+#define ENGLISH31 0x0300001B
+#define ENGLISH32 0x0300001C
+#define ENGLISH33 0x0300001D
+#define ENGLISH34 0x0300001E
+#define ENGLISH35 0x0300001F
+#define ENGLISH36 0x03000020
+#define ENGLISH37 0x03000021
+#define ENGLISH38 0x03000022
+#define ENGLISH39 0x03000023
+#define ENGLISH40 0x03000024
+#define ENGLISH41 0x03000025
+#define ENGLISH42 0x03000026
+#define ENGLISH43 0x03000027
+#define ENGLISH45 0x03000028
+#define ENGLISH47 0x03000029
+#define ENGLISH48 0x0300002A
+#define ENGLISH49 0x0300002B
+#define ENGLISH50 0x0300002C
+#define ENGLISH54 0x0300002D
+#define ENGLISH55 0x0300002E
+#define ENGLISH56 0x0300002F
+#define ENGLISH57 0x03000030
+#define ENGLISH58 0x03000031
+#define ENGLISH59 0x03000032
+#define ENGLISH60 0x03000033
+#define ENGLISH61 0x03000034
+#define ENGLISH63 0x03000035
+#define ENGLISH65 0x03000036
+#define ENGLISH66 0x03000037
+#define ENGLISH69 0x03000038
+#define ENGLISH71 0x03000039
+#define ENGLISH72 0x0300003A
+#define ENGLISH73 0x0300003B
+#define ENGLISH74 0x0300003C
+#define ENGLISH90 0x0300003D
+#define ENGLISH99 0x0300003E
+#define ENGLISH129 0x0300003F
+#define ENGLISH131 0x03000040
+#define ENGLISH133 0x03000041
+#define ENGLISH145 0x03000042
+#define ENGLISH146 0x03000043
+ // 68 entities in TXTs, 68 in datafiles.
+ // french
+#define FRENCH0 0x03010000
+#define FRENCH1 0x03010001
+#define FRENCH2 0x03010002
+#define FRENCH3 0x03010003
+#define FRENCH4 0x03010004
+#define FRENCH5 0x03010005
+#define FRENCH6 0x03010006
+#define FRENCH7 0x03010007
+#define FRENCH9 0x03010008
+#define FRENCH11 0x03010009
+#define FRENCH12 0x0301000A
+#define FRENCH13 0x0301000B
+#define FRENCH14 0x0301000C
+#define FRENCH15 0x0301000D
+#define FRENCH16 0x0301000E
+#define FRENCH17 0x0301000F
+#define FRENCH18 0x03010010
+#define FRENCH19 0x03010011
+#define FRENCH20 0x03010012
+#define FRENCH21 0x03010013
+#define FRENCH22 0x03010014
+#define FRENCH23 0x03010015
+#define FRENCH24 0x03010016
+#define FRENCH25 0x03010017
+#define FRENCH27 0x03010018
+#define FRENCH28 0x03010019
+#define FRENCH29 0x0301001A
+#define FRENCH31 0x0301001B
+#define FRENCH32 0x0301001C
+#define FRENCH33 0x0301001D
+#define FRENCH34 0x0301001E
+#define FRENCH35 0x0301001F
+#define FRENCH36 0x03010020
+#define FRENCH37 0x03010021
+#define FRENCH38 0x03010022
+#define FRENCH39 0x03010023
+#define FRENCH40 0x03010024
+#define FRENCH41 0x03010025
+#define FRENCH42 0x03010026
+#define FRENCH43 0x03010027
+#define FRENCH45 0x03010028
+#define FRENCH47 0x03010029
+#define FRENCH48 0x0301002A
+#define FRENCH49 0x0301002B
+#define FRENCH50 0x0301002C
+#define FRENCH54 0x0301002D
+#define FRENCH55 0x0301002E
+#define FRENCH56 0x0301002F
+#define FRENCH57 0x03010030
+#define FRENCH58 0x03010031
+#define FRENCH59 0x03010032
+#define FRENCH60 0x03010033
+#define FRENCH61 0x03010034
+#define FRENCH63 0x03010035
+#define FRENCH65 0x03010036
+#define FRENCH66 0x03010037
+#define FRENCH69 0x03010038
+#define FRENCH71 0x03010039
+#define FRENCH72 0x0301003A
+#define FRENCH73 0x0301003B
+#define FRENCH74 0x0301003C
+#define FRENCH90 0x0301003D
+#define FRENCH99 0x0301003E
+#define FRENCH129 0x0301003F
+#define FRENCH131 0x03010040
+#define FRENCH133 0x03010041
+#define FRENCH145 0x03010042
+#define FRENCH146 0x03010043
+ // 68 entities in TXTs, 68 in datafiles.
+ // german
+#define GERMAN0 0x03020000
+#define GERMAN1 0x03020001
+#define GERMAN2 0x03020002
+#define GERMAN3 0x03020003
+#define GERMAN4 0x03020004
+#define GERMAN5 0x03020005
+#define GERMAN6 0x03020006
+#define GERMAN7 0x03020007
+#define GERMAN9 0x03020008
+#define GERMAN11 0x03020009
+#define GERMAN12 0x0302000A
+#define GERMAN13 0x0302000B
+#define GERMAN14 0x0302000C
+#define GERMAN15 0x0302000D
+#define GERMAN16 0x0302000E
+#define GERMAN17 0x0302000F
+#define GERMAN18 0x03020010
+#define GERMAN19 0x03020011
+#define GERMAN20 0x03020012
+#define GERMAN21 0x03020013
+#define GERMAN22 0x03020014
+#define GERMAN23 0x03020015
+#define GERMAN24 0x03020016
+#define GERMAN25 0x03020017
+#define GERMAN27 0x03020018
+#define GERMAN28 0x03020019
+#define GERMAN29 0x0302001A
+#define GERMAN31 0x0302001B
+#define GERMAN32 0x0302001C
+#define GERMAN33 0x0302001D
+#define GERMAN34 0x0302001E
+#define GERMAN35 0x0302001F
+#define GERMAN36 0x03020020
+#define GERMAN37 0x03020021
+#define GERMAN38 0x03020022
+#define GERMAN39 0x03020023
+#define GERMAN40 0x03020024
+#define GERMAN41 0x03020025
+#define GERMAN42 0x03020026
+#define GERMAN43 0x03020027
+#define GERMAN45 0x03020028
+#define GERMAN47 0x03020029
+#define GERMAN48 0x0302002A
+#define GERMAN49 0x0302002B
+#define GERMAN50 0x0302002C
+#define GERMAN54 0x0302002D
+#define GERMAN55 0x0302002E
+#define GERMAN56 0x0302002F
+#define GERMAN57 0x03020030
+#define GERMAN58 0x03020031
+#define GERMAN59 0x03020032
+#define GERMAN60 0x03020033
+#define GERMAN61 0x03020034
+#define GERMAN63 0x03020035
+#define GERMAN65 0x03020036
+#define GERMAN66 0x03020037
+#define GERMAN69 0x03020038
+#define GERMAN71 0x03020039
+#define GERMAN72 0x0302003A
+#define GERMAN73 0x0302003B
+#define GERMAN74 0x0302003C
+#define GERMAN90 0x0302003D
+#define GERMAN99 0x0302003E
+#define GERMAN129 0x0302003F
+#define GERMAN131 0x03020040
+#define GERMAN133 0x03020041
+#define GERMAN145 0x03020042
+#define GERMAN146 0x03020043
+ // 68 entities in TXTs, 68 in datafiles.
+ // italian
+#define ITALIAN0 0x03030000
+#define ITALIAN1 0x03030001
+#define ITALIAN2 0x03030002
+#define ITALIAN3 0x03030003
+#define ITALIAN4 0x03030004
+#define ITALIAN5 0x03030005
+#define ITALIAN6 0x03030006
+#define ITALIAN7 0x03030007
+#define ITALIAN9 0x03030008
+#define ITALIAN11 0x03030009
+#define ITALIAN12 0x0303000A
+#define ITALIAN13 0x0303000B
+#define ITALIAN14 0x0303000C
+#define ITALIAN15 0x0303000D
+#define ITALIAN16 0x0303000E
+#define ITALIAN17 0x0303000F
+#define ITALIAN18 0x03030010
+#define ITALIAN19 0x03030011
+#define ITALIAN20 0x03030012
+#define ITALIAN21 0x03030013
+#define ITALIAN22 0x03030014
+#define ITALIAN23 0x03030015
+#define ITALIAN24 0x03030016
+#define ITALIAN25 0x03030017
+#define ITALIAN27 0x03030018
+#define ITALIAN28 0x03030019
+#define ITALIAN29 0x0303001A
+#define ITALIAN31 0x0303001B
+#define ITALIAN32 0x0303001C
+#define ITALIAN33 0x0303001D
+#define ITALIAN34 0x0303001E
+#define ITALIAN35 0x0303001F
+#define ITALIAN36 0x03030020
+#define ITALIAN37 0x03030021
+#define ITALIAN38 0x03030022
+#define ITALIAN39 0x03030023
+#define ITALIAN40 0x03030024
+#define ITALIAN41 0x03030025
+#define ITALIAN42 0x03030026
+#define ITALIAN43 0x03030027
+#define ITALIAN45 0x03030028
+#define ITALIAN47 0x03030029
+#define ITALIAN48 0x0303002A
+#define ITALIAN49 0x0303002B
+#define ITALIAN50 0x0303002C
+#define ITALIAN54 0x0303002D
+#define ITALIAN55 0x0303002E
+#define ITALIAN56 0x0303002F
+#define ITALIAN57 0x03030030
+#define ITALIAN58 0x03030031
+#define ITALIAN59 0x03030032
+#define ITALIAN60 0x03030033
+#define ITALIAN61 0x03030034
+#define ITALIAN63 0x03030035
+#define ITALIAN65 0x03030036
+#define ITALIAN66 0x03030037
+#define ITALIAN69 0x03030038
+#define ITALIAN71 0x03030039
+#define ITALIAN72 0x0303003A
+#define ITALIAN73 0x0303003B
+#define ITALIAN74 0x0303003C
+#define ITALIAN90 0x0303003D
+#define ITALIAN99 0x0303003E
+#define ITALIAN129 0x0303003F
+#define ITALIAN131 0x03030040
+#define ITALIAN133 0x03030041
+#define ITALIAN145 0x03030042
+#define ITALIAN146 0x03030043
+ // 68 entities in TXTs, 68 in datafiles.
+ // spanish
+#define SPANISH0 0x03040000
+#define SPANISH1 0x03040001
+#define SPANISH2 0x03040002
+#define SPANISH3 0x03040003
+#define SPANISH4 0x03040004
+#define SPANISH5 0x03040005
+#define SPANISH6 0x03040006
+#define SPANISH7 0x03040007
+#define SPANISH9 0x03040008
+#define SPANISH11 0x03040009
+#define SPANISH12 0x0304000A
+#define SPANISH13 0x0304000B
+#define SPANISH14 0x0304000C
+#define SPANISH15 0x0304000D
+#define SPANISH16 0x0304000E
+#define SPANISH17 0x0304000F
+#define SPANISH18 0x03040010
+#define SPANISH19 0x03040011
+#define SPANISH20 0x03040012
+#define SPANISH21 0x03040013
+#define SPANISH22 0x03040014
+#define SPANISH23 0x03040015
+#define SPANISH24 0x03040016
+#define SPANISH25 0x03040017
+#define SPANISH27 0x03040018
+#define SPANISH28 0x03040019
+#define SPANISH29 0x0304001A
+#define SPANISH31 0x0304001B
+#define SPANISH32 0x0304001C
+#define SPANISH33 0x0304001D
+#define SPANISH34 0x0304001E
+#define SPANISH35 0x0304001F
+#define SPANISH36 0x03040020
+#define SPANISH37 0x03040021
+#define SPANISH38 0x03040022
+#define SPANISH39 0x03040023
+#define SPANISH40 0x03040024
+#define SPANISH41 0x03040025
+#define SPANISH42 0x03040026
+#define SPANISH43 0x03040027
+#define SPANISH45 0x03040028
+#define SPANISH47 0x03040029
+#define SPANISH48 0x0304002A
+#define SPANISH49 0x0304002B
+#define SPANISH50 0x0304002C
+#define SPANISH54 0x0304002D
+#define SPANISH55 0x0304002E
+#define SPANISH56 0x0304002F
+#define SPANISH57 0x03040030
+#define SPANISH58 0x03040031
+#define SPANISH59 0x03040032
+#define SPANISH60 0x03040033
+#define SPANISH61 0x03040034
+#define SPANISH63 0x03040035
+#define SPANISH65 0x03040036
+#define SPANISH66 0x03040037
+#define SPANISH69 0x03040038
+#define SPANISH71 0x03040039
+#define SPANISH72 0x0304003A
+#define SPANISH73 0x0304003B
+#define SPANISH74 0x0304003C
+#define SPANISH90 0x0304003D
+#define SPANISH99 0x0304003E
+#define SPANISH129 0x0304003F
+#define SPANISH131 0x03040040
+#define SPANISH133 0x03040041
+#define SPANISH145 0x03040042
+#define SPANISH146 0x03040043
+ // 68 entities in TXTs, 68 in datafiles.
+ // czech
+#define CZECH0 0x03050000
+#define CZECH1 0x03050001
+#define CZECH2 0x03050002
+#define CZECH3 0x03050003
+#define CZECH4 0x03050004
+#define CZECH5 0x03050005
+#define CZECH6 0x03050006
+#define CZECH7 0x03050007
+#define CZECH9 0x03050008
+#define CZECH11 0x03050009
+#define CZECH12 0x0305000A
+#define CZECH13 0x0305000B
+#define CZECH14 0x0305000C
+#define CZECH15 0x0305000D
+#define CZECH16 0x0305000E
+#define CZECH17 0x0305000F
+#define CZECH18 0x03050010
+#define CZECH19 0x03050011
+#define CZECH20 0x03050012
+#define CZECH21 0x03050013
+#define CZECH22 0x03050014
+#define CZECH23 0x03050015
+#define CZECH24 0x03050016
+#define CZECH25 0x03050017
+#define CZECH27 0x03050018
+#define CZECH28 0x03050019
+#define CZECH29 0x0305001A
+#define CZECH31 0x0305001B
+#define CZECH32 0x0305001C
+#define CZECH33 0x0305001D
+#define CZECH34 0x0305001E
+#define CZECH35 0x0305001F
+#define CZECH36 0x03050020
+#define CZECH37 0x03050021
+#define CZECH38 0x03050022
+#define CZECH39 0x03050023
+#define CZECH40 0x03050024
+#define CZECH41 0x03050025
+#define CZECH42 0x03050026
+#define CZECH43 0x03050027
+#define CZECH45 0x03050028
+#define CZECH47 0x03050029
+#define CZECH48 0x0305002A
+#define CZECH49 0x0305002B
+#define CZECH50 0x0305002C
+#define CZECH54 0x0305002D
+#define CZECH55 0x0305002E
+#define CZECH56 0x0305002F
+#define CZECH57 0x03050030
+#define CZECH58 0x03050031
+#define CZECH59 0x03050032
+#define CZECH60 0x03050033
+#define CZECH61 0x03050034
+#define CZECH63 0x03050035
+#define CZECH65 0x03050036
+#define CZECH66 0x03050037
+#define CZECH69 0x03050038
+#define CZECH71 0x03050039
+#define CZECH72 0x0305003A
+#define CZECH73 0x0305003B
+#define CZECH74 0x0305003C
+#define CZECH90 0x0305003D
+#define CZECH99 0x0305003E
+#define CZECH129 0x0305003F
+#define CZECH131 0x03050040
+#define CZECH133 0x03050041
+#define CZECH145 0x03050042
+#define CZECH146 0x03050043
+ // 68 entities in TXTs, ??? in datafiles.
+ // portugese
+#define PORT0 0x03060000
+#define PORT1 0x03060001
+#define PORT2 0x03060002
+#define PORT3 0x03060003
+#define PORT4 0x03060004
+#define PORT5 0x03060005
+#define PORT6 0x03060006
+#define PORT7 0x03060007
+#define PORT9 0x03060008
+#define PORT11 0x03060009
+#define PORT12 0x0306000A
+#define PORT13 0x0306000B
+#define PORT14 0x0306000C
+#define PORT15 0x0306000D
+#define PORT16 0x0306000E
+#define PORT17 0x0306000F
+#define PORT18 0x03060010
+#define PORT19 0x03060011
+#define PORT20 0x03060012
+#define PORT21 0x03060013
+#define PORT22 0x03060014
+#define PORT23 0x03060015
+#define PORT24 0x03060016
+#define PORT25 0x03060017
+#define PORT27 0x03060018
+#define PORT28 0x03060019
+#define PORT29 0x0306001A
+#define PORT31 0x0306001B
+#define PORT32 0x0306001C
+#define PORT33 0x0306001D
+#define PORT34 0x0306001E
+#define PORT35 0x0306001F
+#define PORT36 0x03060020
+#define PORT37 0x03060021
+#define PORT38 0x03060022
+#define PORT39 0x03060023
+#define PORT40 0x03060024
+#define PORT41 0x03060025
+#define PORT42 0x03060026
+#define PORT43 0x03060027
+#define PORT45 0x03060028
+#define PORT47 0x03060029
+#define PORT48 0x0306002A
+#define PORT49 0x0306002B
+#define PORT50 0x0306002C
+#define PORT54 0x0306002D
+#define PORT55 0x0306002E
+#define PORT56 0x0306002F
+#define PORT57 0x03060030
+#define PORT58 0x03060031
+#define PORT59 0x03060032
+#define PORT60 0x03060033
+#define PORT61 0x03060034
+#define PORT63 0x03060035
+#define PORT65 0x03060036
+#define PORT66 0x03060037
+#define PORT69 0x03060038
+#define PORT71 0x03060039
+#define PORT72 0x0306003A
+#define PORT73 0x0306003B
+#define PORT74 0x0306003C
+#define PORT90 0x0306003D
+#define PORT99 0x0306003E
+#define PORT129 0x0306003F
+#define PORT131 0x03060040
+#define PORT133 0x03060041
+#define PORT145 0x03060042
+#define PORT146 0x03060043
+ // 68 entities in TXTs, ??? in datafiles.
+// general
+ // fonts
+#define GAME_FONT 0x04000000
+#define OTHER_SR_FONT 0x04000001
+#define OTHER_SR_REDFONT 0x04000002
+#define SR_DEATHFONT 0x04000003
+#define CZECH_GAME_FONT 0x04000004
+#define CZECH_SR_FONT 0x04000005
+#define CZECH_SR_REDFONT 0x04000006
+#define CZECH_SR_DEATHFONT 0x04000007
+ // 8 entities in TXTs, 1 in datafiles.
+ // pointers
+#define MSE_POINTER 0x04010000
+#define MSE_OPERATE 0x04010001
+#define MSE_PICKUP 0x04010002
+#define MSE_EXAMINE 0x04010003
+#define MSE_MOUTH 0x04010004
+#define MSE_BECKON_L 0x04010005
+#define MSE_BECKON_R 0x04010006
+#define MSE_ARROW0 0x04010007
+#define MSE_ARROW1 0x04010008
+#define MSE_ARROW2 0x04010009
+#define MSE_ARROW3 0x0401000A
+#define MSE_ARROW4 0x0401000B
+#define MSE_ARROW5 0x0401000C
+#define MSE_ARROW6 0x0401000D
+#define MSE_ARROW7 0x0401000E
+#define MSE_ARROW8 0x0401000F
+#define MSE_ARROW9 0x04010010
+ // 17 entities in TXTs, 17 in datafiles.
+ // luggage
+#define LUGG_NEWSPAPER 0x04020000
+#define LUGG_HAZEL_WAND 0x04020001
+#define LUGG_BEER_TOWEL 0x04020002
+#define LUGG_HOTEL_KEY 0x04020003
+#define LUGG_BALL 0x04020004
+#define LUGG_STATUETTE 0x04020005
+#define LUGG_RED_NOSE 0x04020006
+#define LUGG_POLISHED_CHALICE 0x04020007
+#define LUGG_DOLLAR_BILL 0x04020008
+#define LUGG_PHOTOGRAPH 0x04020009
+#define LUGG_FLASHLIGHT 0x0402000A
+#define LUGG_FUSE_WIRE 0x0402000B
+#define LUGG_GEM 0x0402000C
+#define LUGG_STATUETTE_PAINT 0x0402000D
+#define LUGG_STICK 0x0402000E
+#define LUGG_EXCAV_KEY 0x0402000F
+#define LUGG_LAB_PASS 0x04020010
+#define LUGG_LIFTING_KEYS 0x04020011
+#define LUGG_MANUSCRIPT 0x04020012
+#define LUGG_MATCHBOOK 0x04020013
+#define LUGG_SUIT_MATERIAL 0x04020014
+#define LUGG_STICK_TOWEL 0x04020015
+#define LUGG_PLASTER 0x04020016
+#define LUGG_PRESSURE_GAUGE 0x04020017
+#define LUGG_RAILWAY_TICKET 0x04020018
+#define LUGG_BUZZER 0x04020019
+#define LUGG_ROSSO_CARD 0x0402001A
+#define LUGG_TOILET_KEY 0x0402001B
+#define LUGG_SOAP 0x0402001C
+#define LUGG_STONE_KEY 0x0402001D
+#define LUGG_CHALICE 0x0402001E
+#define LUGG_TISSUE 0x0402001F
+#define LUGG_TOILET_BRUSH 0x04020020
+#define LUGG_TOILET_CHAIN 0x04020021
+#define LUGG_TOWEL 0x04020022
+#define LUGG_TRIPOD 0x04020023
+#define LUGG_LENS 0x04020024
+#define LUGG_MIRROR 0x04020025
+#define LUGG_TOWEL_CUT 0x04020026
+#define LUGG_BIBLE 0x04020027
+#define LUGG_TISSUE_CHARRED 0x04020028
+#define LUGG_FALSE_KEY 0x04020029
+#define LUGG_KEYRING 0x0402002A
+#define LUGG_SOAP_IMP 0x0402002B
+#define LUGG_SOAP_PLAS 0x0402002C
+#define LUGG_COG_1 0x0402002D
+#define LUGG_COG_2 0x0402002E
+#define LUGG_HANDLE 0x0402002F
+#define LUGG_COIN 0x04020030
+#define LUGG_BIRO 0x04020031
+#define LUGG_PIPE 0x04020032
+#define LUGG_KING 0x04020033
+#define LUGG_KNIGHT 0x04020034
+#define LUGG_BISHOP 0x04020035
+ // 54 entities in TXTs, 54 in datafiles.
+ // object_icons
+#define ICON_LEFT_ARROW 0x04030000
+#define ICON_RIGHT_ARROW 0x04030001
+#define ICON_NEWSPAPER 0x04030002
+#define ICON_HAZEL_WAND 0x04030003
+#define ICON_BEER_TOWEL 0x04030004
+#define ICON_HOTEL_KEY 0x04030005
+#define ICON_BALL 0x04030006
+#define ICON_STATUETTE 0x04030007
+#define ICON_RED_NOSE 0x04030008
+#define ICON_POLISHED_CHALICE 0x04030009
+#define ICON_DOLLAR_BILL 0x0403000A
+#define ICON_PHOTOGRAPH 0x0403000B
+#define ICON_FLASHLIGHT 0x0403000C
+#define ICON_FUSE_WIRE 0x0403000D
+#define ICON_GEM 0x0403000E
+#define ICON_STATUETTE_PAINT 0x0403000F
+#define ICON_STICK 0x04030010
+#define ICON_EXCAV_KEY 0x04030011
+#define ICON_LAB_PASS 0x04030012
+#define ICON_LIFTING_KEYS 0x04030013
+#define ICON_MANUSCRIPT 0x04030014
+#define ICON_MATCHBOOK 0x04030015
+#define ICON_SUIT_MATERIAL 0x04030016
+#define ICON_STICK_TOWEL 0x04030017
+#define ICON_PLASTER 0x04030018
+#define ICON_PRESSURE_GAUGE 0x04030019
+#define ICON_RAILWAY_TICKET 0x0403001A
+#define ICON_BUZZER 0x0403001B
+#define ICON_ROSSO_CARD 0x0403001C
+#define ICON_TOILET_KEY 0x0403001D
+#define ICON_SOAP 0x0403001E
+#define ICON_STONE_KEY 0x0403001F
+#define ICON_CHALICE 0x04030020
+#define ICON_TISSUE 0x04030021
+#define ICON_TOILET_BRUSH 0x04030022
+#define ICON_TOILET_CHAIN 0x04030023
+#define ICON_TOWEL 0x04030024
+#define ICON_TRIPOD 0x04030025
+#define ICON_LENS 0x04030026
+#define ICON_MIRROR 0x04030027
+#define ICON_TOWEL_CUT 0x04030028
+#define ICON_BIBLE 0x04030029
+#define ICON_TISSUE_CHARRED 0x0403002A
+#define ICON_FALSE_KEY 0x0403002B
+#define ICON_KEYRING 0x0403002C
+#define ICON_SOAP_IMP 0x0403002D
+#define ICON_SOAP_PLAS 0x0403002E
+#define ICON_COG_1 0x0403002F
+#define ICON_COG_2 0x04030030
+#define ICON_HANDLE 0x04030031
+#define ICON_COIN 0x04030032
+#define ICON_BIRO 0x04030033
+#define ICON_PIPE 0x04030034
+ // 53 entities in TXTs, 53 in datafiles.
+ // subject_icons
+#define ICON_ALARM 0x04040000
+#define ICON_ARTO 0x04040001
+#define ICON_ASSASSIN 0x04040002
+#define ICON_AYUB 0x04040003
+#define ICON_BANANA 0x04040004
+#define ICON_BAPHOMET 0x04040005
+#define ICON_BEER 0x04040006
+#define ICON_BOOK 0x04040007
+#define ICON_BRIEFCASE 0x04040008
+#define ICON_BULL 0x04040009
+#define ICON_BULLS_HEAD 0x0404000A
+#define ICON_BUST 0x0404000B
+#define ICON_CANDLE 0x0404000C
+#define ICON_CAR 0x0404000D
+#define ICON_CASTLE 0x0404000E
+#define ICON_CAT 0x0404000F
+#define ICON_CHANTELLE 0x04040010
+#define ICON_CHESSBOARD 0x04040011
+#define ICON_CHESS_SET 0x04040012
+#define ICON_CHURCH 0x04040013
+#define ICON_CLOWN 0x04040014
+#define ICON_CLUB 0x04040015
+#define ICON_COINS 0x04040016
+#define ICON_COUNTESS 0x04040017
+#define ICON_CREST 0x04040018
+#define ICON_DIG 0x04040019
+#define ICON_DOG 0x0404001A
+#define ICON_DUANE 0x0404001B
+#define ICON_EKLUND 0x0404001C
+#define ICON_ERIC 0x0404001D
+#define ICON_FISH 0x0404001E
+#define ICON_FLOWERS 0x0404001F
+#define ICON_FORTUNE 0x04040020
+#define ICON_GEORGE 0x04040021
+#define ICON_GHOST 0x04040022
+#define ICON_GLASS_EYE 0x04040023
+#define ICON_GOAT 0x04040024
+#define ICON_GOODBYE 0x04040025
+#define ICON_GUARD 0x04040026
+#define ICON_HASH 0x04040027
+#define ICON_HENDERSONS 0x04040028
+#define ICON_JACKET 0x04040029
+#define ICON_JUGGLER 0x0404002A
+#define ICON_KLAUSNER 0x0404002B
+#define ICON_KNIGHT 0x0404002C
+#define ICON_LADDER 0x0404002D
+#define ICON_LEARY 0x0404002E
+#define ICON_LEPRECHAUN 0x0404002F
+#define ICON_LIE 0x04040030
+#define ICON_LOBINEAU 0x04040031
+#define ICON_MARQUET 0x04040032
+#define ICON_MARY 0x04040033
+#define ICON_MOB 0x04040034
+#define ICON_MONTFAUCON 0x04040035
+#define ICON_MOUE 0x04040036
+#define ICON_MR_SHINY 0x04040037
+#define ICON_NEJO 0x04040038
+#define ICON_NEJO_STALL 0x04040039
+#define ICON_NICO 0x0404003A
+#define ICON_NO 0x0404003B
+#define ICON_NURSE 0x0404003C
+#define ICON_PACKAGE 0x0404003D
+#define ICON_PAINTER 0x0404003E
+#define ICON_PEAGRAM 0x0404003F
+#define ICON_PEARL 0x04040040
+#define ICON_PHILIPPE 0x04040041
+#define ICON_PHONE 0x04040042
+#define ICON_PHRASE 0x04040043
+#define ICON_PIERMONT 0x04040044
+#define ICON_PLANTARD 0x04040045
+#define ICON_POTS 0x04040046
+#define ICON_PRIEST 0x04040047
+#define ICON_QUEEN 0x04040048
+#define ICON_RENEE 0x04040049
+#define ICON_ROSSO 0x0404004A
+#define ICON_ROZZER 0x0404004B
+#define ICON_SAFE 0x0404004C
+#define ICON_SCROLL 0x0404004D
+#define ICON_SEAN 0x0404004E
+#define ICON_SIGN 0x0404004F
+#define ICON_TAXI 0x04040050
+#define ICON_TEMPLARS 0x04040051
+#define ICON_THERMOSTAT 0x04040052
+#define ICON_TOILET 0x04040053
+#define ICON_TOMB 0x04040054
+#define ICON_TOOLBOX 0x04040055
+#define ICON_TRUTH 0x04040056
+#define ICON_ULTAR 0x04040057
+#define ICON_WEASEL 0x04040058
+#define ICON_WEAVER 0x04040059
+#define ICON_WELL 0x0404005A
+#define ICON_WELL2 0x0404005B
+#define ICON_WINDOW 0x0404005C
+#define ICON_YES 0x0404005D
+ // 94 entities in TXTs, 94 in datafiles.
+ // save_menu
+#define SR_FONT 0x04050000
+#define SR_BUTTON 0x04050001
+#define SR_REDFONT 0x04050002
+#define SR_PALETTE 0x04050003
+#define SR_PANEL_ENGLISH 0x04050004
+#define SR_PANEL_FRENCH 0x04050005
+#define SR_PANEL_GERMAN 0x04050006
+#define SR_PANEL_ITALIAN 0x04050007
+#define SR_PANEL_SPANISH 0x04050008
+#define SR_PANEL_AMERICAN 0x04050009
+#define SR_TEXT_BUTTON 0x0405000A
+#define SR_SPEED 0x0405000B
+#define SR_SCROLL1 0x0405000C
+#define SR_SCROLL2 0x0405000D
+#define SR_CONFIRM 0x0405000E
+#define SR_VOLUME 0x0405000F
+#define SR_VLIGHT 0x04050010
+#define SR_VKNOB 0x04050011
+#define SR_WINDOW 0x04050012
+#define SR_SLAB1 0x04050013
+#define SR_SLAB2 0x04050014
+#define SR_SLAB3 0x04050015
+#define SR_SLAB4 0x04050016
+#define SR_BUTUF 0x04050017
+#define SR_BUTUS 0x04050018
+#define SR_BUTDS 0x04050019
+#define SR_BUTDF 0x0405001A
+#define SR_DEATHPANEL 0x0405001B // 0x04050019
+ // 26 entities in TXTs, 29 in datafiles.
+ // george
+#define GEORGE_MEGA 0x04060000
+#define GEORGE_WLK 0x04060001
+#define GEOSHO1 0x04060002
+#define GEOSHO1CDT 0x04060003
+#define GEOSHO1CDR 0x04060004
+#define GEOSHO2 0x04060005
+#define GEOSHO2CDT 0x04060006
+#define GEOSHO2CDR 0x04060007
+#define GEOSHO3 0x04060008
+#define GEOSHO3CDT 0x04060009
+#define GEOSHO3CDR 0x0406000A
+#define GEOSHO5 0x0406000B
+#define GEOSHO5CDT 0x0406000C
+#define GEOSHO5CDR 0x0406000D
+#define GEOSHO6 0x0406000E
+#define GEOSHO6CDT 0x0406000F
+#define GEOSHO6CDR 0x04060010
+#define GEOSHO7 0x04060011
+#define GEOSHO7CDT 0x04060012
+#define GEOSHO7CDR 0x04060013
+#define GEOTLK0 0x04060014
+#define GEOTLK0CDT 0x04060015
+#define GEOTLK1 0x04060016
+#define GEOTLK1CDT 0x04060017
+#define GEOTLK2 0x04060018
+#define GEOTLK2CDT 0x04060019
+#define GEOTLK3 0x0406001A
+#define GEOTLK3CDT 0x0406001B
+#define GEOTLK4 0x0406001C
+#define GEOTLK4CDT 0x0406001D
+#define GEOTLK5 0x0406001E
+#define GEOTLK5CDT 0x0406001F
+#define GEOTLK6 0x04060020
+#define GEOTLK6CDT 0x04060021
+#define GEOTLK7 0x04060022
+#define GEOTLK7CDT 0x04060023
+#define XGEOCRW0 0x04060024
+#define XGEOCRW0CDT 0x04060025
+#define XGEOCRW0CDR 0x04060026
+#define XGEOCRW1 0x04060027
+#define XGEOCRW1CDT 0x04060028
+#define XGEOCRW1CDR 0x04060029
+#define XGEOCRW2 0x0406002A
+#define XGEOCRW2CDT 0x0406002B
+#define XGEOCRW2CDR 0x0406002C
+#define XGEOCRW3 0x0406002D
+#define XGEOCRW3CDT 0x0406002E
+#define XGEOCRW3CDR 0x0406002F
+#define XGEOCRW4 0x04060030
+#define XGEOCRW4CDT 0x04060031
+#define XGEOCRW4CDR 0x04060032
+#define XGEOCRW5 0x04060033
+#define XGEOCRW5CDT 0x04060034
+#define XGEOCRW5CDR 0x04060035
+#define XGEOCRW6 0x04060036
+#define XGEOCRW6CDT 0x04060037
+#define XGEOCRW6CDR 0x04060038
+#define XGEOCRW7 0x04060039
+#define XGEOCRW7CDT 0x0406003A
+#define XGEOCRW7CDR 0x0406003B
+#define XGEOGIV0 0x0406003C
+#define XGEOGIV0CDT 0x0406003D
+#define XGEOGIV0CDR 0x0406003E
+#define XGEOGIV1 0x0406003F
+#define XGEOGIV1CDT 0x04060040
+#define XGEOGIV1CDR 0x04060041
+#define XGEOGIV2 0x04060042
+#define XGEOGIV2CDT 0x04060043
+#define XGEOGIV2CDR 0x04060044
+#define XGEOGIV3 0x04060045
+#define XGEOGIV3CDT 0x04060046
+#define XGEOGIV3CDR 0x04060047
+#define XGEOGIV4 0x04060048
+#define XGEOGIV4CDT 0x04060049
+#define XGEOGIV4CDR 0x0406004A
+#define XGEOGIV5 0x0406004B
+#define XGEOGIV5CDT 0x0406004C
+#define XGEOGIV5CDR 0x0406004D
+#define XGEOGIV6 0x0406004E
+#define XGEOGIV6CDT 0x0406004F
+#define XGEOGIV6CDR 0x04060050
+#define XGEOGIV7 0x04060051
+#define XGEOGIV7CDT 0x04060052
+#define XGEOGIV7CDR 0x04060053
+#define XGEOLUK3 0x04060054
+#define XGEOLUK3CDT 0x04060055
+#define XGEOLUK5 0x04060056
+#define XGEOLUK5CDT 0x04060057
+#define XGEOPIC0 0x04060058
+#define XGEOPIC0CDT 0x04060059
+#define XGEOPIC1 0x0406005A
+#define XGEOPIC1CDT 0x0406005B
+#define XGEOPIC2 0x0406005C
+#define XGEOPIC2CDT 0x0406005D
+#define XGEOPIC3 0x0406005E
+#define XGEOPIC3CDT 0x0406005F
+#define XGEOPIC4 0x04060060
+#define XGEOPIC4CDT 0x04060061
+#define XGEOPIC5 0x04060062
+#define XGEOPIC5CDT 0x04060063
+#define XGEOPIC6 0x04060064
+#define XGEOPIC6CDT 0x04060065
+#define XGEOPIC7 0x04060066
+#define XGEOPIC7CDT 0x04060067
+#define XGEOSHG0 0x04060068
+#define XGEOSHG0CDT 0x04060069
+#define XGEOSHG1 0x0406006A
+#define XGEOSHG1CDT 0x0406006B
+#define XGEOSHG2 0x0406006C
+#define XGEOSHG2CDT 0x0406006D
+#define XGEOSHG3 0x0406006E
+#define XGEOSHG3CDT 0x0406006F
+#define XGEOSHG4 0x04060070
+#define XGEOSHG4CDT 0x04060071
+#define XGEOSHG5 0x04060072
+#define XGEOSHG5CDT 0x04060073
+#define XGEOSHG6 0x04060074
+#define XGEOSHG6CDT 0x04060075
+#define XGEOSHG7 0x04060076
+#define XGEOSHG7CDT 0x04060077
+#define XGHAIR2 0x04060078
+#define XGHAIR2CDT 0x04060079
+#define XGHAIR6 0x0406007A
+#define XGHAIR6CDT 0x0406007B
+#define GEOBLNK2 0x0406007C
+#define GEOBLNK2CDT 0x0406007D
+#define GEOBLNK3 0x0406007E
+#define GEOBLNK3CDT 0x0406007F
+#define GEOBLNK4 0x04060080
+#define GEOBLNK4CDT 0x04060081
+#define GEOBLNK5 0x04060082
+#define GEOBLNK5CDT 0x04060083
+#define GEOBLNK6 0x04060084
+#define GEOBLNK6CDT 0x04060085
+#define XGRELAX0 0x04060086
+#define XGRELAX0CDT 0x04060087
+#define XGRELAX0CDR 0x04060088
+#define XGRELAX1 0x04060089
+#define XGRELAX1CDT 0x0406008A
+#define XGRELAX1CDR 0x0406008B
+#define XGRELAX2 0x0406008C
+#define XGRELAX2CDT 0x0406008D
+#define XGRELAX2CDR 0x0406008E
+#define XGRELAX3 0x0406008F
+#define XGRELAX3CDT 0x04060090
+#define XGRELAX3CDR 0x04060091
+#define XGRELAX4 0x04060092
+#define XGRELAX4CDT 0x04060093
+#define XGRELAX4CDR 0x04060094
+#define XGRELAX5 0x04060095
+#define XGRELAX5CDT 0x04060096
+#define XGRELAX5CDR 0x04060097
+#define XGRELAX6 0x04060098
+#define XGRELAX6CDT 0x04060099
+#define XGRELAX6CDR 0x0406009A
+#define XGRELAX7 0x0406009B
+#define XGRELAX7CDT 0x0406009C
+#define XGRELAX7CDR 0x0406009D
+ // 158 entities in TXTs, 158 in datafiles.
+ // nico
+#define MEGANICO 0x04070000
+#define NICO_WLK 0x04070001
+#define NICTLK0 0x04070002
+#define NICTLK0CDT 0x04070003
+#define NICTLK1 0x04070004
+#define NICTLK1CDT 0x04070005
+#define NICTLK2 0x04070006
+#define NICTLK2CDT 0x04070007
+#define NICTLK3 0x04070008
+#define NICTLK3CDT 0x04070009
+#define NICTLK4 0x0407000A
+#define NICTLK4CDT 0x0407000B
+#define NICTLK5 0x0407000C
+#define NICTLK5CDT 0x0407000D
+#define NICTLK6 0x0407000E
+#define NICTLK6CDT 0x0407000F
+#define NICTLK7 0x04070010
+#define NICTLK7CDT 0x04070011
+ // 18 entities in TXTs, 18 in datafiles.
+// maps
+ // room80
+#define room80_PAL 0x05000000
+#define room80_l0 0x05000001
+#define TEST_FLR 0x05000002
+#define SPRITE_PAL 0x05000003
+#define AEROPORTCDT 0x05000004
+#define AEROPORT 0x05000005
+#define APRTSTRTCDT 0x05000006
+#define APRTSTRT 0x05000007
+#define BAPHOMETCDT 0x05000008
+#define BAPHOMET 0x05000009
+#define CAFECDT 0x0500000A
+#define CAFE 0x0500000B
+#define COSTUMESCDT 0x0500000C
+#define COSTUMES 0x0500000D
+#define HOSPITALCDT 0x0500000E
+#define HOSPITAL 0x0500000F
+#define HOTELCDT 0x05000010
+#define HOTEL 0x05000011
+#define MONTFACNCDT 0x05000012
+#define MONTFACN 0x05000013
+#define MUSEUMCDT 0x05000014
+#define MUSEUM 0x05000015
+#define POLICECDT 0x05000016
+#define POLICE 0x05000017
+ // 24 entities in TXTs, 24 in datafiles.
+ // room86
+#define room86_PAL 0x05010000
+#define room86_l0 0x05010001
+#define BANNOCKCDT 0x05010002
+#define BANNOCK 0x05010003
+#define MARIBCDT 0x05010004
+#define MARIB 0x05010005
+#define LOCHMARNCDT 0x05010006
+#define LOCHMARN 0x05010007
+#define PARISCDT 0x05010008
+#define PARIS 0x05010009
+#define VILLAVASCDT 0x0501000A
+#define VILLAVAS 0x0501000B
+ // 12 entities in TXTs, 12 in datafiles.
+ // room90
+#define R90L0 0x05020000
+#define R90PAL 0x05020001
+#define PHONE_PAL 0x05020002
+#define GBLINK 0x05020003
+#define GBLINKCDT 0x05020004
+#define GRISE 0x05020005
+#define GRISECDT 0x05020006
+#define GRISECDR 0x05020007
+#define GTALK 0x05020008
+#define GTALKCDT 0x05020009
+#define NBLINK 0x0502000A
+#define NBLINKCDT 0x0502000B
+#define NRISE 0x0502000C
+#define NRISECDT 0x0502000D
+#define NRISECDR 0x0502000E
+#define NTALK 0x0502000F
+#define NTALKCDT 0x05020010
+#define TODTALK 0x05020011
+#define TODTALKCDT 0x05020012
+ // 19 entities in TXTs, 19 in datafiles.
+ // room91
+#define R91L0 0x05030000
+#define R91PAL 0x05030001
+#define CLOWN 0x05030002
+#define CLOWNCDT 0x05030003
+#define DESVAS 0x05030004
+#define DESVASCDT 0x05030005
+#define EIFTOWER 0x05030006
+#define EIFTOWERCDT 0x05030007
+#define HORSETIP 0x05030008
+#define HORSETIPCDT 0x05030009
+#define LOBIN91 0x0503000A
+#define LOBIN91CDT 0x0503000B
+#define MONTFCON 0x0503000C
+#define MONTFCONCDT 0x0503000D
+#define NICOADD 0x0503000E
+#define NICOADDCDT 0x0503000F
+#define NICOPHN 0x05030010
+#define NICOPHNCDT 0x05030011
+#define TAILOR 0x05030012
+#define TAILORCDT 0x05030013
+ // 20 entities in TXTs, 20 in datafiles.
+ // room99
+#define room99_PAL 0x05040000
+#define room99_l0 0x05040001
+ // 2 entities in TXTs, 2 in datafiles.
+// paris_1
+ // sound_fx
+#define FX_CAMERA1 0x06000000
+#define FX_CAMERA2 0x06000001
+#define FX_CAMERA3 0x06000002
+#define FX_CANDO 0x06000003
+#define FX_CANUP 0x06000004
+#define FX_CAW1 0x06000005
+#define FX_DUST 0x06000006
+#define FX_HORN1 0x06000007
+#define FX_HORN2 0x06000008
+#define FX_HORN3 0x06000009
+#define FX_LVSFLY 0x0600000A
+#define FX_PAP1 0x0600000B
+#define FX_PAP2 0x0600000C
+#define FX_PICK1 0x0600000D
+#define FX_PICK2 0x0600000E
+#define FX_PICK3 0x0600000F
+#define FX_PICK4 0x06000010
+#define FX_PICK5 0x06000011
+#define FX_TRAFFIC2 0x06000012
+#define FX_TWEET1 0x06000013
+#define FX_TWEET2 0x06000014
+#define FX_TWEET3 0x06000015
+#define FX_TWEET4 0x06000016
+#define FX_TWEET5 0x06000017
+#define FX_BIN1 0x06000018
+#define FX_BIN2 0x06000019
+#define FX_BIN3 0x0600001A
+#define FX_CAT 0x0600001B
+#define FX_COVERON2 0x0600001C
+#define FX_CRATE 0x0600001D
+#define FX_DRAIN 0x0600001E
+#define FX_HOLE 0x0600001F
+#define FX_BODY 0x06000020
+#define FX_BOTDN 0x06000021
+#define FX_BOTUP 0x06000022
+#define FX_GULP 0x06000023
+#define FX_LIGHT 0x06000024
+#define FX_PIKUP 0x06000025
+#define FX_PAP3 0x06000026
+#define FX_PAP4 0x06000027
+#define FX_PAP5 0x06000028
+#define FX_PISTOL 0x06000029
+#define FX_TBOX 0x0600002A
+#define FX_KNOKKNOK 0x0600002B
+#define FX_ALBCLO 0x0600002C
+#define FX_ALBOP 0x0600002D
+#define FX_LADD1 0x0600002E
+#define FX_LADD2 0x0600002F
+#define FX_LADD3 0x06000030
+#define FX_RAT1 0x06000031
+#define FX_RAT2 0x06000032
+#define FX_SEWSTEP1 0x06000033
+#define FX_SEWSTEP2 0x06000034
+#define FX_SWATER3 0x06000035
+#define FX_DRIP1 0x06000036
+#define FX_DRIP2 0x06000037
+#define FX_DRIP3 0x06000038
+#define FX_SWATER1 0x06000039
+#define FX_SEWLADD7 0x0600003A
+#define FX_SEWLADU7 0x0600003B
+ // 60 entities in TXTs, 60 in datafiles.
+ // room1
+#define PARIS1_PAL 0x06010000
+#define room1_PAL 0x06010001
+#define room1_l0 0x06010002
+#define room1_l1 0x06010003
+#define room1_l2 0x06010004
+#define room1_gd1 0x06010005
+#define room1_gd2 0x06010006
+#define room1_flr 0x06010007
+#define room1_plx 0x06010008
+#define BIRDS 0x06010009
+#define BIRDSCDT 0x0601000A
+#define BIRDSA 0x0601000B
+#define BIRDSACDT 0x0601000C
+#define BIRDSB 0x0601000D
+#define BIRDSBCDT 0x0601000E
+#define BIRDSC 0x0601000F
+#define BIRDSCCDT 0x06010010
+#define BIRDSD 0x06010011
+#define BIRDSDCDT 0x06010012
+#define BIRDSE 0x06010013
+#define BIRDSECDT 0x06010014
+#define BIRDSF 0x06010015
+#define BIRDSFCDT 0x06010016
+#define BIRDSG 0x06010017
+#define BIRDSGCDT 0x06010018
+#define BIRDSH 0x06010019
+#define BIRDSHCDT 0x0601001A
+#define BIRDSI 0x0601001B
+#define BIRDSICDT 0x0601001C
+#define CANOPY 0x0601001D
+#define CANOPYCDT 0x0601001E
+#define GEOCAN 0x0601001F
+#define GEOCANCDT 0x06010020
+#define GEONIC 0x06010021
+#define GEONICCDT 0x06010022
+#define GEOPAP 0x06010023
+#define GEOPAPCDT 0x06010024
+#define GEOPAP2 0x06010025
+#define GEOPAP2CDT 0x06010026
+#define LVSFLY 0x06010027
+#define LVSFLYCDT 0x06010028
+#define MOUGRD 0x06010029
+#define MOUGRDCDT 0x0601002A
+#define MOUTLK01 0x0601002B
+#define MOUTLK01CDT 0x0601002C
+#define MOUWLK01 0x0601002D
+#define MOUWLK01CDT 0x0601002E
+#define NICPHT1CDT 0x0601002F
+#define NICPHT1 0x06010030
+#define NICPHT2CDT 0x06010031
+#define NICPHT2 0x06010032
+#define NICPHT3CDT 0x06010033
+#define NICPHT3 0x06010034
+#define NICPHT5CDT 0x06010035
+#define NICPHT5 0x06010036
+#define NICPHT6CDT 0x06010037
+#define NICPHT6 0x06010038
+#define NICPHT7CDT 0x06010039
+#define NICPHT7 0x0601003A
+#define NICWLK01 0x0601003B
+#define NICWLK01CDT 0x0601003C
+#define NWPAPER 0x0601003D
+#define NWPAPERCDT 0x0601003E
+#define WRKDIG01 0x0601003F
+#define WRKDIG01CDT 0x06010040
+#define XGEOPHN3 0x06010041
+#define XGEOPHN3CDT 0x06010042
+#define XGEOPHN5 0x06010043
+#define XGEOPHN5CDT 0x06010044
+#define XNICPHN3CDT 0x06010045
+#define XNICPHN3 0x06010046
+#define XNICPHN5CDT 0x06010047
+#define XNICPHN5 0x06010048
+ // 73 entities in TXTs, 73 in datafiles.
+ // room2
+#define room2_PAL 0x06020000
+#define room2_l0 0x06020001
+#define room2_l1 0x06020002
+#define room2_l2 0x06020003
+#define room2_gd1 0x06020004
+#define room2_gd2 0x06020005
+#define room2_flr 0x06020006
+#define BIN1 0x06020007
+#define BIN1CDT 0x06020008
+#define BIN2 0x06020009
+#define BIN2CDT 0x0602000A
+#define BIN3 0x0602000B
+#define BIN3CDT 0x0602000C
+#define CATJMP 0x0602000D
+#define CATJMPCDT 0x0602000E
+#define CRATE 0x0602000F
+#define CRATECDT 0x06020010
+#define DRNBRK 0x06020011
+#define DRNBRKCDT 0x06020012
+#define GEOBIN 0x06020013
+#define GEOBINCDT 0x06020014
+#define GEOBOX 0x06020015
+#define GEOBOXCDT 0x06020016
+#define GEOBRS 0x06020017
+#define GEOBRSCDT 0x06020018
+#define GEOCAT 0x06020019
+#define GEOCATCDT 0x0602001A
+#define GEOCATE 0x0602001B
+#define GEOCATECDT 0x0602001C
+#define GEOCLM02 0x0602001D
+#define GEOCLM02CDT 0x0602001E
+#define GEOCRT 0x0602001F
+#define GEOCRTCDT 0x06020020
+#define GEODWN 0x06020021
+#define GEODWNCDT 0x06020022
+#define GEOLID 0x06020023
+#define GEOLIDCDT 0x06020024
+#define GEOLIDCDR 0x06020025
+#define GEOMAN8 0x06020026
+#define GEOMAN8CDT 0x06020027
+#define GEOMAN9 0x06020028
+#define GEOMAN9CDT 0x06020029
+#define GEOOUT 0x0602002A
+#define GEOOUTCDT 0x0602002B
+#define GEOPLL02 0x0602002C
+#define GEOPLL02CDT 0x0602002D
+#define GEOTRY02 0x0602002E
+#define GEOTRY02CDT 0x0602002F
+#define MANCOV 0x06020030
+#define MANCOVCDT 0x06020031
+#define MANCVOFF 0x06020032
+#define MANCVOFFCDT 0x06020033
+ // 52 entities in TXTs, 52 in datafiles.
+ // room3
+#define room3_PAL 0x06030000
+#define room3_l0 0x06030001
+#define room3_l1 0x06030002
+#define room3_l2 0x06030003
+#define room3_gd1 0x06030004
+#define room3_gd2 0x06030005
+#define room3_flr 0x06030006
+#define BOTTLE 0x06030007
+#define BOTTLECDT 0x06030008
+#define BOTTLE1 0x06030009
+#define BOTTLE1CDT 0x0603000A
+#define CHNDRN 0x0603000B
+#define CHNDRNCDT 0x0603000C
+#define CHNFNT 0x0603000D
+#define CHNFNTCDT 0x0603000E
+#define CHNSITA 0x0603000F
+#define CHNSITACDT 0x06030010
+#define CHNSIT 0x06030011
+#define CHNSITCDT 0x06030012
+#define CHNTLK 0x06030013
+#define CHNTLKCDT 0x06030014
+#define CHNUPP 0x06030015
+#define CHNUPPCDT 0x06030016
+#define CHNUPPCDR 0x06030017
+#define CORPSE 0x06030018
+#define CORPSECDT 0x06030019
+#define FLICKER 0x0603001A
+#define FLICKERCDT 0x0603001B
+#define GEOBOT3 0x0603001C
+#define GEOBOT3CDT 0x0603001D
+#define GEOCARD3 0x0603001E
+#define GEOCARD3CDT 0x0603001F
+#define GEOCHN 0x06030020
+#define GEOCHNCDT 0x06030021
+#define GEOCPS 0x06030022
+#define GEOCPSCDT 0x06030023
+#define GEOCPSCDR 0x06030024
+#define MOUCHN 0x06030025
+#define MOUCHNCDT 0x06030026
+#define MOUCHN8 0x06030027
+#define MOUCHN8CDT 0x06030028
+#define MOUCPS 0x06030029
+#define MOUCPSCDT 0x0603002A
+#define MOUCPSTK 0x0603002B
+#define MOUCPSTKCDT 0x0603002C
+#define MOUDOR03 0x0603002D
+#define MOUDOR03CDT 0x0603002E
+#define MOUROS 0x0603002F
+#define MOUROSCDT 0x06030030
+#define MOUROS1 0x06030031
+#define MOUROS1CDT 0x06030032
+#define MOUROS1CDR 0x06030033
+#define MOUROS2 0x06030034
+#define MOUROS2CDT 0x06030035
+#define MOUSTD 0x06030036
+#define MOUSTDCDT 0x06030037
+#define MOUTALK 0x06030038
+#define MOUTALKCDT 0x06030039
+#define MOUTLK1 0x0603003A
+#define MOUTLK1CDT 0x0603003B
+#define MOUTRN03 0x0603003C
+#define MOUTRN03CDT 0x0603003D
+#define MOUTRN03CDR 0x0603003E
+#define MOUTRN2 0x0603003F
+#define MOUTRN2CDT 0x06030040
+#define MOUTRN2CDR 0x06030041
+#define MOUWLK 0x06030042
+#define MOUWLKCDT 0x06030043
+#define MOUWLK03 0x06030044
+#define MOUWLK03CDT 0x06030045
+#define ROSCARD 0x06030046
+#define ROSCARDCDT 0x06030047
+#define ROSCHN 0x06030048
+#define ROSCHNCDT 0x06030049
+#define ROSCHNCDR 0x0603004A
+#define ROSGEO 0x0603004B
+#define ROSGEOCDT 0x0603004C
+#define ROSGEOA 0x0603004D
+#define ROSGEOACDT 0x0603004E
+#define ROSGEOB 0x0603004F
+#define ROSGEOBCDT 0x06030050
+#define ROSGEOC 0x06030051
+#define ROSGEOCCDT 0x06030052
+#define ROSLIK 0x06030053
+#define ROSLIKCDT 0x06030054
+#define ROSLUK 0x06030055
+#define ROSLUKCDT 0x06030056
+#define ROSMOU 0x06030057
+#define ROSMOUCDT 0x06030058
+#define ROSNBK 0x06030059
+#define ROSNBKCDT 0x0603005A
+#define ROSNBK8 0x0603005B
+#define ROSNBK8CDT 0x0603005C
+#define ROSPKT 0x0603005D
+#define ROSPKTCDT 0x0603005E
+#define ROSTMP 0x0603005F
+#define ROSTMPCDT 0x06030060
+#define ROSTMP8 0x06030061
+#define ROSTMP8CDT 0x06030062
+#define ROSTURNA 0x06030063
+#define ROSTURNACDT 0x06030064
+#define ROSTURNB 0x06030065
+#define ROSTURNBCDT 0x06030066
+#define ROSTRN2 0x06030067
+#define ROSTRN2CDT 0x06030068
+#define ROSWRT 0x06030069
+#define ROSWRTCDT 0x0603006A
+ // 107 entities in TXTs, 107 in datafiles.
+ // room4
+#define room4_PAL 0x06040000
+#define room4_l0 0x06040001
+#define room4_l1 0x06040002
+#define room4_l2 0x06040003
+#define room4_gd1 0x06040004
+#define room4_gd2 0x06040005
+#define room4_flr 0x06040006
+#define ALBDOR 0x06040007
+#define ALBDORCDR 0x06040008
+#define ALBDORCDT 0x06040009
+#define ALBDOR8 0x0604000A
+#define ALBDOR8CDT 0x0604000B
+#define GEONOK 0x0604000C
+#define GEONOKCDT 0x0604000D
+#define GEONOKCDR 0x0604000E
+#define GEOTBX 0x0604000F
+#define GEOTBXCDT 0x06040010
+#define GEOWRK 0x06040011
+#define GEOWRKCDT 0x06040012
+#define GEOWRK8 0x06040013
+#define GEOWRK8CDT 0x06040014
+#define MOUENT 0x06040015
+#define MOUENTCDT 0x06040016
+#define MOUSHG 0x06040017
+#define MOUSHGCDT 0x06040018
+#define MOUSTR 0x06040019
+#define MOUSTRCDT 0x0604001A
+#define MOUTLK04 0x0604001B
+#define MOUTLK04CDT 0x0604001C
+#define MOUWLK04 0x0604001D
+#define MOUWLK04CDT 0x0604001E
+#define ROSENT 0x0604001F
+#define ROSENTCDT 0x06040020
+#define ROSTLK04 0x06040021
+#define ROSTLK04CDT 0x06040022
+#define ROSWLK 0x06040023
+#define ROSWLKCDT 0x06040024
+#define PHONE4 0x06040025
+#define PHONE4CDT 0x06040026
+#define WRKAXE 0x06040027
+#define WRKAXECDT 0x06040028
+#define WRKBLINK 0x06040029
+#define WRKBLINKCDT 0x0604002A
+#define WRKCLM 0x0604002B
+#define WRKCLMCDT 0x0604002C
+#define WRKDIG 0x0604002D
+#define WRKDIGCDT 0x0604002E
+#define WRKPPR 0x0604002F
+#define WRKPPRCDT 0x06040030
+#define WRKTLK 0x06040031
+#define WRKTLKCDT 0x06040032
+#define WRKTLK8 0x06040033
+#define WRKTLK8CDT 0x06040034
+#define WRKTLK9 0x06040035
+#define WRKTLK9CDT 0x06040036
+#define WRKTRN 0x06040037
+#define WRKTRNCDR 0x06040038
+#define WRKTRNCDT 0x06040039
+#define WRKXIT 0x0604003A
+#define WRKXITCDT 0x0604003B
+ // 60 entities in TXTs, 60 in datafiles.
+ // room5
+#define room5_PAL 0x06050000
+#define room5_l0 0x06050001
+#define room5_l1 0x06050002
+#define room5_l2 0x06050003
+#define room5_gd1 0x06050004
+#define room5_gd2 0x06050005
+#define room5_flr 0x06050006
+#define ALBAPT 0x06050007
+#define ALBAPTCDT 0x06050008
+#define ALBAPTCDR 0x06050009
+#define ALBCLOSECDT 0x0605000A
+#define ALBCLOSE 0x0605000B
+#define ALBCRD8 0x0605000C
+#define ALBCRD8CDT 0x0605000D
+#define ALBDORTKCDT 0x0605000E
+#define ALBDORTK 0x0605000F
+#define ALBDRTK2CDT 0x06050010
+#define ALBDRTK2 0x06050011
+#define ALBHND 0x06050012
+#define ALBHNDCDT 0x06050013
+#define ALBOBJ 0x06050014
+#define ALBOBJCDT 0x06050015
+#define ALBOPENCDT 0x06050016
+#define ALBOPEN 0x06050017
+#define ALBPKT 0x06050018
+#define ALBPKTCDT 0x06050019
+#define ALBTLK 0x0605001A
+#define ALBTLKCDT 0x0605001B
+#define ALBWLK9CDT 0x0605001C
+#define ALBWLK9 0x0605001D
+#define GEOCRD05 0x0605001E
+#define GEOCRD05CDT 0x0605001F
+#define GEODOR05CDT 0x06050020
+#define GEODOR05 0x06050021
+#define GEOEMG 0x06050022
+#define GEOEMGCDT 0x06050023
+#define GEOEMGCDR 0x06050024
+#define GEOEMGA 0x06050025
+#define GEOEMGACDT 0x06050026
+#define GEOEMGACDR 0x06050027
+#define GEOEMGB 0x06050028
+#define GEOEMGBCDT 0x06050029
+#define GEOEMGBCDR 0x0605002A
+#define GEOEXITCDT 0x0605002B
+#define GEOEXIT 0x0605002C
+#define GEOHND05 0x0605002D
+#define GEOHND05CDT 0x0605002E
+#define GEONOK05CDT 0x0605002F
+#define GEONOK05 0x06050030
+#define GEOTLK05 0x06050031
+#define GEOTLK05CDT 0x06050032
+ // 51 entities in TXTs, 51 in datafiles.
+ // room6
+#define SEWER_PAL 0x06060000
+#define room6_PAL 0x06060001
+#define room6_l0 0x06060002
+#define room6_l1 0x06060003
+#define room6_gd1 0x06060004
+#define room6_flr 0x06060005
+#define GEOASC06 0x06060006
+#define GEOASC06CDT 0x06060007
+#define GEODES06 0x06060008
+#define GEODES06CDT 0x06060009
+#define GEONOSE 0x0606000A
+#define GEONOSECDT 0x0606000B
+#define REDNOSE 0x0606000C
+#define REDNOSECDT 0x0606000D
+#define WATER06 0x0606000E
+#define WATER06CDT 0x0606000F
+ // 16 entities in TXTs, 16 in datafiles.
+ // room7
+#define room7_PAL 0x06070000
+#define room7_l0 0x06070001
+#define room7_l1 0x06070002
+#define room7_l2 0x06070003
+#define room7_gd1 0x06070004
+#define room7_gd2 0x06070005
+#define room7_flr 0x06070006
+#define GEOASC07 0x06070007
+#define GEOASC07CDT 0x06070008
+#define GEOASC07CDR 0x06070009
+#define GEOPLL07 0x0607000A
+#define GEOPLL07CDT 0x0607000B
+#define GEOPLL07CDR 0x0607000C
+#define GEOSPK 0x0607000D
+#define GEOSPKCDT 0x0607000E
+#define GEOTIS 0x0607000F
+#define GEOTISCDT 0x06070010
+#define MATERIAL 0x06070011
+#define MATERIALCDT 0x06070012
+#define TISSUE7 0x06070013
+#define TISSUE7CDT 0x06070014
+#define WATER07 0x06070015
+#define WATER07CDT 0x06070016
+ // 23 entities in TXTs, 23 in datafiles.
+ // room8
+#define room8_PAL 0x06080000
+#define room8_l0 0x06080001
+#define room8_l1 0x06080002
+#define room8_l2 0x06080003
+#define room8_gd1 0x06080004
+#define room8_gd2 0x06080005
+#define room8_flr 0x06080006
+#define room8_plx 0x06080007
+ // 8 entities in TXTs, 8 in datafiles.
+// paris_2
+ // sound_fx
+#define FX_BIRD 0x07000000
+#define FX_BIRD2 0x07000001
+#define FX_CARLTON 0x07000002
+#define FX_CARS 0x07000003
+#define FX_DOORTRY 0x07000004
+#define FX_FIESTA 0x07000005
+#define FX_FLATDOOR 0x07000006
+#define FX_HVYVEHL 0x07000007
+#define FX_HVYVEHR 0x07000008
+#define FX_LITEVEHL 0x07000009
+#define FX_LITEVEHR 0x0700000A
+#define FX_FONEUP 0x0700000B
+#define FX_FONEDN 0x0700000C
+#define FX_GEOCCH 0x0700000D
+#define FX_GEOCHAIR 0x0700000E
+#define FX_GEOCHR9 0x0700000F
+#define FX_NICOPEN 0x07000010
+#define FX_NICLOSE 0x07000011
+#define FX_PHONICO1 0x07000012
+#define FX_GRAMOFON 0x07000013
+#define FX_SHOCK1 0x07000014
+#define FX_WINDUP11 0x07000015
+#define FX_FRISK 0x07000016
+#define FX_TRAFFIC3 0x07000017
+#define FX_DESKBELL 0x07000018
+#define FX_KEY13 0x07000019
+#define FX_PAPER6 0x0700001A
+#define FX_PHONEDN2 0x0700001B
+#define FX_PHONEUP2 0x0700001C
+#define FX_PIANO14 0x0700001D
+#define FX_TRYDOR14 0x0700001E
+#define FX_CABCLOSE 0x0700001F
+#define FX_CABOPEN 0x07000020
+#define FX_DORCLOSE 0x07000021
+#define FX_WINDOPEN 0x07000022
+#define FX_COO 0x07000023
+#define FX_COO2 0x07000024
+#define FX_LEDGE1 0x07000025
+#define FX_LEDGE2 0x07000026
+#define FX_BRIEFOFF 0x07000027
+#define FX_BRIEFON 0x07000028
+#define FX_JUMPIN 0x07000029
+#define FX_WARDIN 0x0700002A
+#define FX_WARDOUT 0x0700002B
+#define FX_CLIMBIN 0x0700002C
+#define FX_CLIMBOUT 0x0700002D
+ // 46 entities in TXTs, 46 in datafiles.
+ // room9
+#define PARIS2_PAL 0x07010000
+#define room9_PAL 0x07010001
+#define room9_l0 0x07010002
+#define room9_l1 0x07010003
+#define room9_l2 0x07010004
+#define room9_gd1 0x07010005
+#define room9_gd2 0x07010006
+#define room9_flr 0x07010007
+#define CARA9CDT 0x07010008
+#define CARA9 0x07010009
+#define CARB9CDT 0x0701000A
+#define CARB9 0x0701000B
+#define CARC9CDT 0x0701000C
+#define CARC9 0x0701000D
+#define DOROPN09CDR 0x0701000E
+#define DOROPN09CDT 0x0701000F
+#define DOROPN09 0x07010010
+#define FLWLUKCDR 0x07010011
+#define FLWLUKCDT 0x07010012
+#define FLWLUK 0x07010013
+#define FLWNITCDT 0x07010014
+#define FLWNIT 0x07010015
+#define FLWTLKCDT 0x07010016
+#define FLWTLK 0x07010017
+#define GEODOOR9 0x07010018
+#define GEODOOR9CDT 0x07010019
+#define GEOSTPCDT 0x0701001A
+#define GEOSTP 0x0701001B
+#define GEOSTP8CDT 0x0701001C
+#define GEOSTP8 0x0701001D
+#define GEOTRY 0x0701001E
+#define GEOTRYCDT 0x0701001F
+#define TRUCKA9CDT 0x07010020
+#define TRUCKA9 0x07010021
+#define TRUCKB9CDT 0x07010022
+#define TRUCKB9 0x07010023
+#define TRUCKC9CDT 0x07010024
+#define TRUCKC9 0x07010025
+ // 38 entities in TXTs, 38 in datafiles.
+ // room10
+#define R10SPRPAL 0x07020000
+#define room10_PAL 0x07020001
+#define room10_l0 0x07020002
+#define room10_l1 0x07020003
+#define room10_gd1 0x07020004
+#define room10_flr 0x07020005
+#define DOORCDT 0x07020006
+#define DOOR 0x07020007
+#define GEOCCHCDT 0x07020008
+#define GEOCCHCDR 0x07020009
+#define GEOCCH 0x0702000A
+#define GEOCCH8CDT 0x0702000B
+#define GEOCCH8 0x0702000C
+#define GEOCCH9CDT 0x0702000D
+#define GEOCCH9 0x0702000E
+#define GEOCHRCDT 0x0702000F
+#define GEOCHR 0x07020010
+#define GEOCHR8CDT 0x07020011
+#define GEOCHR8 0x07020012
+#define GEOCHR9CDT 0x07020013
+#define GEOCHR9 0x07020014
+#define GEODWN10CDT 0x07020015
+#define GEODWN10 0x07020016
+#define GEOENT10CDT 0x07020017
+#define GEOENT10 0x07020018
+#define GEOGEM10CDT 0x07020019
+#define GEOGEM10 0x0702001A
+#define GEOGEMBCDT 0x0702001B
+#define GEOGEMB 0x0702001C
+#define GEOLUK10CDT 0x0702001D
+#define GEOLUK10 0x0702001E
+#define GEOLVS10CDT 0x0702001F
+#define GEOLVS10 0x07020020
+#define GEOMAGTKCDT 0x07020021
+#define GEOMAGTK 0x07020022
+#define GEOMAT10CDT 0x07020023
+#define GEOMAT10 0x07020024
+#define GEOMATBCDT 0x07020025
+#define GEOMATB 0x07020026
+#define GEOMATCCDT 0x07020027
+#define GEOMATC 0x07020028
+#define GEONIC10CDR 0x07020029
+#define GEONIC10CDT 0x0702002A
+#define GEONIC10 0x0702002B
+#define GEONOSCDT 0x0702002C
+#define GEONOS 0x0702002D
+#define GEONOS10CDT 0x0702002E
+#define GEONOS10 0x0702002F
+#define GEONWPAPCDT 0x07020030
+#define GEONWPAP 0x07020031
+#define GEOPHN10CDT 0x07020032
+#define GEOPHN10 0x07020033
+#define GEOPHTCDT 0x07020034
+#define GEOPHT 0x07020035
+#define GEOPHT10CDT 0x07020036
+#define GEOPHT10 0x07020037
+#define GEOPHTLKCDT 0x07020038
+#define GEOPHTLK 0x07020039
+#define GEOPPR10CDT 0x0702003A
+#define GEOPPR10 0x0702003B
+#define GEOPRDCDT 0x0702003C
+#define GEOPRD 0x0702003D
+#define GEOREDCDT 0x0702003E
+#define GEORED 0x0702003F
+#define GEORELCDR 0x07020040
+#define GEORELCDT 0x07020041
+#define GEOREL 0x07020042
+#define GEORXTCDT 0x07020043
+#define GEORXT 0x07020044
+#define GEOTIS10CDT 0x07020045
+#define GEOTIS10 0x07020046
+#define GEOTISBCDT 0x07020047
+#define GEOTISB 0x07020048
+#define GEOTRIP1CDT 0x07020049
+#define GEOTRIP1 0x0702004A
+#define GEOTRIP2CDT 0x0702004B
+#define GEOTRIP2 0x0702004C
+#define LOBTLK10CDT 0x0702004D
+#define LOBTLK10 0x0702004E
+#define MANUCDT 0x0702004F
+#define MANU 0x07020050
+#define NICCHR9CDR 0x07020051
+#define NICCHR9CDT 0x07020052
+#define NICCHR9 0x07020053
+#define NICDWN10CDT 0x07020054
+#define NICDWN10 0x07020055
+#define NICLUK10CDT 0x07020056
+#define NICLUK10 0x07020057
+#define NICMAGCDR 0x07020058
+#define NICMAGCDT 0x07020059
+#define NICMAG 0x0702005A
+#define NICNOSCDT 0x0702005B
+#define NICNOS 0x0702005C
+#define NICNOS10CDT 0x0702005D
+#define NICNOS10 0x0702005E
+#define NICNOSBCDT 0x0702005F
+#define NICNOSB 0x07020060
+#define NICPHN10CDT 0x07020061
+#define NICPHN10 0x07020062
+#define NICPHT10CDT 0x07020063
+#define NICPHT10 0x07020064
+#define NICPPRCDT 0x07020065
+#define NICPPR 0x07020066
+#define NICPPR2CDT 0x07020067
+#define NICPPR2 0x07020068
+#define NICREDCDT 0x07020069
+#define NICRED 0x0702006A
+#define NICRED2CDR 0x0702006B
+#define NICRED2CDT 0x0702006C
+#define NICRED2 0x0702006D
+#define NICSIT 0x0702006E
+#define NICSITCDT 0x0702006F
+#define NICTLK10CDT 0x07020070
+#define NICTLK10 0x07020071
+#define NICTLKL 0x07020072
+#define NICTLKLCDT 0x07020073
+#define NICTLKR 0x07020074
+#define NICTLKRCDT 0x07020075
+#define NICTLKX 0x07020076
+#define NICTLKXCDT 0x07020077
+#define NICTLKXCDR 0x07020078
+#define NICTRIPCDT 0x07020079
+#define NICTRIP 0x0702007A
+#define NICTURN 0x0702007B
+#define NICTURNCDT 0x0702007C
+#define NICTURNCDR 0x0702007D
+#define NICWRT 0x0702007E
+#define NICWRTCDT 0x0702007F
+#define PHONE10CDT 0x07020080
+#define PHONE10 0x07020081
+#define PEAPAGECDT 0x07020082
+#define PEAPAGE 0x07020083
+#define PEAPAGE_PAL 0x07020084
+#define MANUSCRPCDT 0x07020085
+#define MANUSCRP 0x07020086
+#define MANUSCRP_PAL 0x07020087
+#define TRIPOD10CDT 0x07020088
+#define TRIPOD10 0x07020089
+ // 138 entities in TXTs, 138 in datafiles.
+ // room11
+#define room11_PAL 0x07030000
+#define room11_l0 0x07030001
+#define room11_l1 0x07030002
+#define room11_l2 0x07030003
+#define room11_gd1 0x07030004
+#define room11_gd2 0x07030005
+#define room11_flr 0x07030006
+#define COSGIVCDR 0x07030007
+#define COSGIVCDT 0x07030008
+#define COSGIV 0x07030009
+#define COSLOOPCDT 0x0703000A
+#define COSLOOP 0x0703000B
+#define COSSHKCDT 0x0703000C
+#define COSSHK 0x0703000D
+#define COSSNFCDT 0x0703000E
+#define COSSNF 0x0703000F
+#define COSTLKCDT 0x07030010
+#define COSTLK 0x07030011
+#define DISCSPINCDT 0x07030012
+#define DISCSPIN 0x07030013
+#define GEOPIC11CDR 0x07030014
+#define GEOPIC11CDT 0x07030015
+#define GEOPIC11 0x07030016
+#define GEOSHK11CDT 0x07030017
+#define GEOSHK11 0x07030018
+#define GEOTURDCDT 0x07030019
+#define GEOTURD 0x0703001A
+#define GEOTIS11CDT 0x0703001B
+#define GEOTIS11 0x0703001C
+#define GEOWINDCDT 0x0703001D
+#define GEOWIND 0x0703001E
+#define WINDUPCDT 0x0703001F
+#define WINDUP 0x07030020
+ // 33 entities in TXTs, 33 in datafiles.
+ // room12
+#define room12_PAL 0x07040000
+#define room12_l0 0x07040001
+#define room12_l1 0x07040002
+#define room12_gd1 0x07040003
+#define room12_flr 0x07040004
+#define FLAGSCDT 0x07040005
+#define FLAGS 0x07040006
+#define GEOAPPCDT 0x07040007
+#define GEOAPP 0x07040008
+#define GEOARMCDT 0x07040009
+#define GEOARM 0x0704000A
+#define GEOASC12CDT 0x0704000B
+#define GEOASC12 0x0704000C
+#define GEODES12CDT 0x0704000D
+#define GEODES12 0x0704000E
+#define GORCOINCDT 0x0704000F
+#define GORCOIN 0x07040010
+#define GORFRKCDT 0x07040011
+#define GORFRK 0x07040012
+#define GORMANCDT 0x07040013
+#define GORMAN 0x07040014
+#define GORTALKCDT 0x07040015
+#define GORTALK 0x07040016
+#define GORTLKCDT 0x07040017
+#define GORTLK 0x07040018
+#define GORTURNCDR 0x07040019
+#define GORTURNCDT 0x0704001A
+#define GORTURN 0x0704001B
+#define LATVIAN12CDT 0x0704001C
+#define LATVIAN12 0x0704001D
+#define WEABAKCDT 0x0704001E
+#define WEABAK 0x0704001F
+#define WEASMKCDT 0x07040020
+#define WEASMK 0x07040021
+#define WEATLKCDT 0x07040022
+#define WEATLK 0x07040023
+#define WEATLK12CDT 0x07040024
+#define WEATLK12 0x07040025
+#define WEATRNCDR 0x07040026
+#define WEATRNCDT 0x07040027
+#define WEATRN 0x07040028
+ // 41 entities in TXTs, 41 in datafiles.
+ // room13
+#define R13SPRPAL 0x07050000
+#define room13_PAL 0x07050001
+#define room13_l0 0x07050002
+#define room13_l1 0x07050003
+#define room13_l2 0x07050004
+#define room13_gd1 0x07050005
+#define room13_gd2 0x07050006
+#define room13_flr 0x07050007
+#define CLKIDLCDT 0x07050008
+#define CLKIDL 0x07050009
+#define CLKMANCDT 0x0705000A
+#define CLKMAN 0x0705000B
+#define CLKTAKCDT 0x0705000C
+#define CLKTAK 0x0705000D
+#define CLKTLKCDT 0x0705000E
+#define CLKTLK 0x0705000F
+#define CLKTLK2CDT 0x07050010
+#define CLKTLK2 0x07050011
+#define CLKTLK3CDT 0x07050012
+#define CLKTLK3 0x07050013
+#define CLKTURNCDR 0x07050014
+#define CLKTURNCDT 0x07050015
+#define CLKTURN 0x07050016
+#define CLKWLKCDT 0x07050017
+#define CLKWLK 0x07050018
+#define CLKWLK2CDT 0x07050019
+#define CLKWLK2 0x0705001A
+#define CLKWLK3CDT 0x0705001B
+#define CLKWLK3 0x0705001C
+#define CLKWULCDT 0x0705001D
+#define CLKWUL 0x0705001E
+#define GEOASC13CDT 0x0705001F
+#define GEOASC13 0x07050020
+#define GEODES13CDT 0x07050021
+#define GEODES13 0x07050022
+#define GEOKEYCDT 0x07050023
+#define GEOKEY 0x07050024
+#define GEOKEY13CDT 0x07050025
+#define GEOKEY13 0x07050026
+#define GEOMAN13CDT 0x07050027
+#define GEOMAN13 0x07050028
+#define GEOTELCDT 0x07050029
+#define GEOTEL 0x0705002A
+#define GEOTEL9CDT 0x0705002B
+#define GEOTEL9 0x0705002C
+#define KEY13CDT 0x0705002D
+#define KEY13 0x0705002E
+#define LATLUKCDR 0x0705002F
+#define LATLUKCDT 0x07050030
+#define LATLUK 0x07050031
+#define LATRDSCDT 0x07050032
+#define LATRDS 0x07050033
+#define LATTLKCDT 0x07050034
+#define LATTLK 0x07050035
+#define PMTGIVCDT 0x07050036
+#define PMTGIV 0x07050037
+#define PMTPNOCDT 0x07050038
+#define PMTPNO 0x07050039
+#define PMTSTDCDT 0x0705003A
+#define PMTSTD 0x0705003B
+#define PMTTLKCDT 0x0705003C
+#define PMTTLK 0x0705003D
+#define PMTTLK8CDT 0x0705003E
+#define PMTTLK8 0x0705003F
+#define PMTTLK9CDT 0x07050040
+#define PMTTLK9 0x07050041
+#define PMTTOTLKCDR 0x07050042
+#define PMTTOTLKCDT 0x07050043
+#define PMTTOTLK 0x07050044
+#define PMTTURNCDR 0x07050045
+#define PMTTURNCDT 0x07050046
+#define PMTTURN 0x07050047
+#define PMTWLK1CDT 0x07050048
+#define PMTWLK1 0x07050049
+#define PMTWLK2CDT 0x0705004A
+#define PMTWLK2 0x0705004B
+ // 76 entities in TXTs, 76 in datafiles.
+ // room14
+#define room14_PAL 0x07060000
+#define room14_l0 0x07060001
+#define room14_l1 0x07060002
+#define room14_gd1 0x07060003
+#define room14_flr 0x07060004
+#define GEOASC14CDT 0x07060005
+#define GEOASC14 0x07060006
+#define GEODES14CDT 0x07060007
+#define GEODES14 0x07060008
+#define GEODORCDR 0x07060009
+#define GEODORCDT 0x0706000A
+#define GEODOR 0x0706000B
+ // 12 entities in TXTs, 12 in datafiles.
+ // room15
+#define room15_PAL 0x07070000
+#define room15_l0 0x07070001
+#define room15_l1 0x07070002
+#define room15_l2 0x07070003
+#define room15_gd1 0x07070004
+#define room15_gd2 0x07070005
+#define room15_flr 0x07070006
+#define DOROPN15CDT 0x07070007
+#define DOROPN15 0x07070008
+#define GEOBEDCDR 0x07070009
+#define GEOBEDCDT 0x0707000A
+#define GEOBED 0x0707000B
+#define GEODOR15CDT 0x0707000C
+#define GEODOR15 0x0707000D
+#define GEOENT15CDT 0x0707000E
+#define GEOENT15 0x0707000F
+#define GEOWIN1CDT 0x07070010
+#define GEOWIN1 0x07070011
+#define GEOWIN15CDT 0x07070012
+#define GEOWIN15 0x07070013
+#define GEOWIN2CDT 0x07070014
+#define GEOWIN2 0x07070015
+#define GEOWRBCDR 0x07070016
+#define GEOWRBCDT 0x07070017
+#define GEOWRB 0x07070018
+#define WINDOWCDT 0x07070019
+#define WINDOW 0x0707001A
+ // 27 entities in TXTs, 27 in datafiles.
+ // room16
+#define room16_PAL 0x07080000
+#define R16L0 0x07080001
+#define R16L1 0x07080002
+#define R16G1 0x07080003
+#define GEOILWCDT 0x07080004
+#define GEOILW 0x07080005
+#define GEOIRWCDT 0x07080006
+#define GEOIRW 0x07080007
+#define GEOMANLCDT 0x07080008
+#define GEOMANL 0x07080009
+#define GEOMANRCDT 0x0708000A
+#define GEOMANR 0x0708000B
+#define GEOMLWCDT 0x0708000C
+#define GEOMLW 0x0708000D
+#define GEOMRWCDT 0x0708000E
+#define GEOMRW 0x0708000F
+#define GEOOLWCDT 0x07080010
+#define GEOOLWCDR 0x07080011
+#define GEOOLW 0x07080012
+#define GEOORWCDT 0x07080013
+#define GEOORWCDR 0x07080014
+#define GEOORW 0x07080015
+#define MANLCDT 0x07080016
+#define MANL 0x07080017
+#define MANRCDT 0x07080018
+#define MANR 0x07080019
+ // 26 entities in TXTs, 26 in datafiles.
+ // room17
+#define room17_PAL 0x07090000
+#define room17_l0 0x07090001
+#define room17_l1 0x07090002
+#define room17_l2 0x07090003
+#define room17_gd1 0x07090004
+#define room17_gd2 0x07090005
+#define room17_flr 0x07090006
+#define IBACK17 0x07090007
+#define IBACK17PAL 0x07090008
+#define GEOINQ17 0x07090009
+#define GEOINQ17CDT 0x0709000A
+#define SBACK17 0x0709000B
+#define SBACK17PAL 0x0709000C
+#define GEOSUR17 0x0709000D
+#define GEOSUR17CDT 0x0709000E
+#define ASSTAIR2_PAL 0x0709000F
+#define ASSTAIR2 0x07090010
+#define ASSTAIRCDT 0x07090011
+#define ASSTAIR 0x07090012
+#define ASSDORCDT 0x07090013
+#define ASSDOR 0x07090014
+#define ASSDOR2CDT 0x07090015
+#define ASSDOR2 0x07090016
+#define ASSTRWCDT 0x07090017
+#define ASSTRW 0x07090018
+#define ASSWRBCDT 0x07090019
+#define ASSWRB 0x0709001A
+#define ASWLK17CDT 0x0709001B
+#define ASWLK17 0x0709001C
+#define BRFCASECDT 0x0709001D
+#define BRFCASE 0x0709001E
+#define GEOBCBCDR 0x0709001F
+#define GEOBCBCDT 0x07090020
+#define GEOBCB 0x07090021
+#define GEOBED17CDT 0x07090022
+#define GEOBED17 0x07090023
+#define GEOBFCCDR 0x07090024
+#define GEOBFCCDT 0x07090025
+#define GEOBFC 0x07090026
+#define GEODOR17CDT 0x07090027
+#define GEODOR17 0x07090028
+#define GEODOR2CDR 0x07090029
+#define GEODOR2CDT 0x0709002A
+#define GEODOR2 0x0709002B
+#define GEOPANTSCDT 0x0709002C
+#define GEOPANTS 0x0709002D
+#define GEOWIN8CDT 0x0709002E
+#define GEOWIN8 0x0709002F
+#define GEOWIN9CDT 0x07090030
+#define GEOWIN9 0x07090031
+#define GEOWRB1CDR 0x07090032
+#define GEOWRB1CDT 0x07090033
+#define GEOWRB1 0x07090034
+#define GEOWRB2CDT 0x07090035
+#define GEOWRB2 0x07090036
+#define GEOWRB3CDR 0x07090037
+#define GEOWRB3CDT 0x07090038
+#define GEOWRB3 0x07090039
+#define GEOWRB4CDT 0x0709003A
+#define GEOWRB4 0x0709003B
+#define PANTS2CDT 0x0709003C
+#define PANTS2 0x0709003D
+#define PANTWRBCDT 0x0709003E
+#define PANTWRB 0x0709003F
+#define STATDOORCDT 0x07090040
+#define STATDOOR 0x07090041
+#define WRBDOR17CDT 0x07090042
+#define WRBDOR17 0x07090043
+ // 68 entities in TXTs, 68 in datafiles.
+ // room18
+#define R18SPRPAL 0x070A0000
+#define room18_PAL 0x070A0001
+#define room18_l0 0x070A0002
+#define room18_l1 0x070A0003
+#define room18_l2 0x070A0004
+#define room18_gd1 0x070A0005
+#define room18_gd2 0x070A0006
+#define room18_flr 0x070A0007
+#define FAN18CDT 0x070A0008
+#define FAN18 0x070A0009
+#define GENBNDCDT 0x070A000A
+#define GENBND 0x070A000B
+#define GENSTRCDT 0x070A000C
+#define GENSTR 0x070A000D
+#define GENTLK18CDT 0x070A000E
+#define GENTLK18 0x070A000F
+#define GEOLVE18CDT 0x070A0010
+#define GEOLVE18 0x070A0011
+#define MOUBAK18CDT 0x070A0012
+#define MOUBAK18 0x070A0013
+#define MOUBUSYCDT 0x070A0014
+#define MOUBUSY 0x070A0015
+#define MOUTKROSCDT 0x070A0016
+#define MOUTKROS 0x070A0017
+#define MOUTLK18CDT 0x070A0018
+#define MOUTLK18 0x070A0019
+#define MOUWLK18CDT 0x070A001A
+#define MOUWLK18 0x070A001B
+#define ROSBAK18CDT 0x070A001C
+#define ROSBAK18 0x070A001D
+#define ROSBUSYCDT 0x070A001E
+#define ROSBUSY 0x070A001F
+#define ROSSTDCDT 0x070A0020
+#define ROSSTD 0x070A0021
+#define ROSTLK18CDT 0x070A0022
+#define ROSTLK18 0x070A0023
+#define ROSTLKXCDT 0x070A0024
+#define ROSTLKX 0x070A0025
+#define ROSTURNCDR 0x070A0026
+#define ROSTURNCDT 0x070A0027
+#define ROSTURN 0x070A0028
+#define ROSWLK18CDT 0x070A0029
+#define ROSWLK18 0x070A002A
+ // 43 entities in TXTs, 43 in datafiles.
+ // room46
+#define room46_PAL 0x070B0000
+#define room46_l0 0x070B0001
+#define room46_l1 0x070B0002
+#define room46_l2 0x070B0003
+#define room46_gd1 0x070B0004
+#define room46_gd2 0x070B0005
+#define room46_flr 0x070B0006
+#define MANU46CDT 0x070B0007
+#define MANU46 0x070B0008
+ // 9 entities in TXTs, 9 in datafiles.
+// paris_3
+ // sound_fx
+#define FX_MUESEXT 0x08000000
+#define FX_AIRCON28 0x08000001
+#define FX_SARCO28A 0x08000002
+#define FX_SARCO28B 0x08000003
+#define FX_SARCO28C 0x08000004
+#define FX_TOTEM28A 0x08000005
+#define FX_ALARM 0x08000006
+#define FX_CARABINE 0x08000007
+#define FX_DOOR29 0x08000008
+#define FX_FISHFALL 0x08000009
+#define FX_GDROP29 0x0800000A
+#define FX_GUI_HIT 0x0800000B
+#define FX_GUN1 0x0800000C
+#define FX_ROPEDOWN 0x0800000D
+#define FX_SARCO29 0x0800000E
+#define FX_SMASHGLA 0x0800000F
+#define FX_TOTEM29A 0x08000010
+#define FX_TOTEM29B 0x08000011
+#define FX_HOSPEXT 0x08000012
+#define FX_GRAVEL1 0x08000013
+#define FX_GRAVEL2 0x08000014
+#define FX_HOSPNOIS 0x08000015
+#define FX_CUPBOPEN 0x08000016
+#define FX_CUPBCLOS 0x08000017
+#define FX_KIKSHINY 0x08000018
+#define FX_SHINY 0x08000019
+#define FX_SHINYOFF 0x0800001A
+#define FX_SHINYON 0x0800001B
+#define FX_BLOODPRE 0x0800001C
+#define FX_GUN34 0x0800001D
+#define FX_PULSE2 0x0800001E
+#define FX_PULSE3 0x0800001F
+ // 32 entities in TXTs, 32 in datafiles.
+ // benoir
+#define MEGABEN 0x08010000
+#define BEN_WLK 0x08010001
+#define STDTAL1 0x08010002
+#define STDTAL1CDT 0x08010003
+#define STDTAL3 0x08010004
+#define STDTAL3CDT 0x08010005
+#define STDTAL5 0x08010006
+#define STDTAL5CDT 0x08010007
+#define XBENPG3 0x08010008
+#define XBENPG3CDT 0x08010009
+#define XBENPG5 0x0801000A
+#define XBENPG5CDT 0x0801000B
+ // 12 entities in TXTs, 12 in datafiles.
+ // mus
+#define MEGAMUS 0x08020000
+#define MUS_WLK 0x08020001
+#define MUSTLK0 0x08020002
+#define MUSTLK0CDT 0x08020003
+#define MUSTLK1 0x08020004
+#define MUSTLK1CDT 0x08020005
+#define MUSTLK2 0x08020006
+#define MUSTLK2CDT 0x08020007
+#define MUSTLK3 0x08020008
+#define MUSTLK3CDT 0x08020009
+#define MUSTLK4 0x0802000A
+#define MUSTLK4CDT 0x0802000B
+#define MUSTLK5 0x0802000C
+#define MUSTLK5CDT 0x0802000D
+#define MUSTLK6 0x0802000E
+#define MUSTLK6CDT 0x0802000F
+#define MUSTLK7 0x08020010
+#define MUSTLK7CDT 0x08020011
+ // 18 entities in TXTs, 18 in datafiles.
+ // white
+#define MEGA_WHITE 0x08030000
+#define WHTTLK0 0x08030001
+#define WHTTLK0CDT 0x08030002
+#define WHTTLK1 0x08030003
+#define WHTTLK1CDT 0x08030004
+#define WHTTLK2 0x08030005
+#define WHTTLK2CDT 0x08030006
+#define WHTTLK3 0x08030007
+#define WHTTLK3CDT 0x08030008
+#define WHTTLK4 0x08030009
+#define WHTTLK4CDT 0x0803000A
+#define WHTTLK5 0x0803000B
+#define WHTTLK5CDT 0x0803000C
+#define WHTTLK6 0x0803000D
+#define WHTTLK6CDT 0x0803000E
+#define WHTTLK7 0x0803000F
+#define WHTTLK7CDT 0x08030010
+#define WHTSHRUG 0x08030011
+#define WHTSHRUGCDT 0x08030012
+#define XGEOPG3 0x08030013
+#define XGEOPG3CDT 0x08030014
+#define XGEOPG5 0x08030015
+#define XGEOPG5CDT 0x08030016
+ // 23 entities in TXTs, 23 in datafiles.
+ // room27
+#define PARIS3_PAL 0x08040000
+#define room27_PAL 0x08040001
+#define R27L0 0x08040002
+#define R27L1 0x08040003
+#define R27L2 0x08040004
+#define R27G1 0x08040005
+#define R27G2 0x08040006
+#define room27_flr 0x08040007
+#define GEOWIN27CDR 0x08040008
+#define GEOWIN27CDT 0x08040009
+#define GEOWIN27 0x0804000A
+ // 11 entities in TXTs, 11 in datafiles.
+ // room28
+#define R28SPRPAL 0x08050000
+#define R28PAL 0x08050001
+#define R28L0 0x08050002
+#define R28L1 0x08050003
+#define R28L2 0x08050004
+#define R28G1 0x08050005
+#define R28G2 0x08050006
+#define room28_flr 0x08050007
+#define GEOALMCDT 0x08050008
+#define GEOALM 0x08050009
+#define GEOSARCDT 0x0805000A
+#define GEOSAR 0x0805000B
+#define GEOSAR1CDT 0x0805000C
+#define GEOSAR1 0x0805000D
+#define GEOSAR2CDR 0x0805000E
+#define GEOSAR2CDT 0x0805000F
+#define GEOSAR2 0x08050010
+#define GEOSHK28CDT 0x08050011
+#define GEOSHK28 0x08050012
+#define GEOTOTCDT 0x08050013
+#define GEOTOT 0x08050014
+#define GEOWINCDT 0x08050015
+#define GEOWIN 0x08050016
+#define GUAWINCDT 0x08050017
+#define GUAWIN 0x08050018
+#define LOBEXITCDT 0x08050019
+#define LOBEXIT 0x0805001A
+#define LOBMANCDT 0x0805001B
+#define LOBMAN 0x0805001C
+#define LOBSTUCDT 0x0805001D
+#define LOBSTU 0x0805001E
+#define LOBTLKCDT 0x0805001F
+#define LOBTLK 0x08050020
+#define LOBTURN1CDT 0x08050021
+#define LOBTURN1 0x08050022
+#define LOBTURN2CDT 0x08050023
+#define LOBTURN2 0x08050024
+#define MUSOPNCDT 0x08050025
+#define MUSOPN 0x08050026
+#define SARDOR28CDT 0x08050027
+#define SARDOR28 0x08050028
+#define TOTEM28CDT 0x08050029
+#define TOTEM28 0x0805002A
+#define TRIPOD28CDT 0x0805002B
+#define TRIPOD28 0x0805002C
+#define WINDO28CDR 0x0805002D
+#define WINDO28CDT 0x0805002E
+#define WINDO28 0x0805002F
+#define WINROD28CDT 0x08050030
+#define WINROD28 0x08050031
+ // 50 entities in TXTs, 50 in datafiles.
+ // room29
+#define R29SPRPAL 0x08060000
+#define BBACK29SPRPAL 0x08060001
+#define R29PAL 0x08060002
+#define R29L0 0x08060003
+#define R29L1 0x08060004
+#define R29G1 0x08060005
+#define room29_flr 0x08060006
+#define BBACK29 0x08060007
+#define BBACK29PAL 0x08060008
+#define GEOSUR29CDT 0x08060009
+#define GEOSUR29 0x0806000A
+#define CASECDT 0x0806000B
+#define CASE 0x0806000C
+#define DOOR29CDT 0x0806000D
+#define DOOR29 0x0806000E
+#define FISH29CDT 0x0806000F
+#define FISH29 0x08060010
+#define FLAPENTCDT 0x08060011
+#define FLAPENT 0x08060012
+#define FLAPTLK1CDT 0x08060013
+#define FLAPTLK1 0x08060014
+#define FLAPTLK3CDT 0x08060015
+#define FLAPTLK3 0x08060016
+#define FLAPTOR1CDR 0x08060017
+#define FLAPTOR1CDT 0x08060018
+#define FLAPTOR1 0x08060019
+#define FLAPTOR4CDT 0x0806001A
+#define FLAPTOR4 0x0806001B
+#define FLAPWLKCDT 0x0806001C
+#define FLAPWLK 0x0806001D
+#define GEODEDCDT 0x0806001E
+#define GEODED 0x0806001F
+#define GEOFISHCDT 0x08060020
+#define GEOFISH 0x08060021
+#define GEOFWDCDT 0x08060022
+#define GEOFWD 0x08060023
+#define GEOPEEKCDT 0x08060024
+#define GEOPEEK 0x08060025
+#define GEOSAR6CDT 0x08060026
+#define GEOSAR6 0x08060027
+#define GEOTOT29CDT 0x08060028
+#define GEOTOT29 0x08060029
+#define GEOTOTBCDT 0x0806002A
+#define GEOTOTB 0x0806002B
+#define GEOTPTOCDT 0x0806002C
+#define GEOTPTO 0x0806002D
+#define GUIENTCDT 0x0806002E
+#define GUIENT 0x0806002F
+#define GUIGUNCDT 0x08060030
+#define GUIGUN 0x08060031
+#define GUIKNECDT 0x08060032
+#define GUIKNE 0x08060033
+#define GUIKNE1CDT 0x08060034
+#define GUIKNE1 0x08060035
+#define GUITLK1CDT 0x08060036
+#define GUITLK1 0x08060037
+#define GUITLK3CDT 0x08060038
+#define GUITLK3 0x08060039
+#define GUITLK4CDT 0x0806003A
+#define GUITLK4 0x0806003B
+#define GUIWLKCDT 0x0806003C
+#define GUIWLK 0x0806003D
+#define NICPUS1CDT 0x0806003E
+#define NICPUS1 0x0806003F
+#define ROPE29CDT 0x08060040
+#define ROPE29 0x08060041
+#define SARDOORCDT 0x08060042
+#define SARDOOR 0x08060043
+#define TOR1CDT 0x08060044
+#define TOR1 0x08060045
+#define TOR3CDR 0x08060046
+#define TOR3CDT 0x08060047
+#define TOR3 0x08060048
+#define TOR4CDT 0x08060049
+#define TOR4 0x0806004A
+#define TOR6CDT 0x0806004B
+#define TOR6 0x0806004C
+#define TOR7CDT 0x0806004D
+#define TOR7 0x0806004E
+#define TOTFALLCDT 0x0806004F
+#define TOTFALL 0x08060050
+ // 81 entities in TXTs, 81 in datafiles.
+ // room31
+#define room31_PAL 0x08070000
+#define room31_l0 0x08070001
+#define room31_flr 0x08070002
+#define GEOAMBCDT 0x08070003
+#define GEOAMB 0x08070004
+#define GEODOR31CDT 0x08070005
+#define GEODOR31 0x08070006
+ // 7 entities in TXTs, 7 in datafiles.
+ // room32
+#define room32_PAL 0x08080000
+#define room32_l0 0x08080001
+#define room32_l1 0x08080002
+#define room32_l2 0x08080003
+#define room32_gd1 0x08080004
+#define room32_gd2 0x08080005
+#define room32_flr 0x08080006
+#define CONSTPCDT 0x08080007
+#define CONSTP 0x08080008
+#define CONTLKCDT 0x08080009
+#define CONTLK 0x0808000A
+#define CONTLK2CDT 0x0808000B
+#define CONTLK2 0x0808000C
+#define CONWLKCDT 0x0808000D
+#define CONWLK 0x0808000E
+#define RECCOMCDT 0x0808000F
+#define RECCOM 0x08080010
+#define RECKEYCDT 0x08080011
+#define RECKEY 0x08080012
+#define RECTLKCDT 0x08080013
+#define RECTLK 0x08080014
+#define RECTLK2CDT 0x08080015
+#define RECTLK2 0x08080016
+#define RECTRNCDT 0x08080017
+#define RECTRN 0x08080018
+ // 25 entities in TXTs, 25 in datafiles.
+ // room33
+#define room33_PAL 0x08090000
+#define room33_l0 0x08090001
+#define room33_l1 0x08090002
+#define room33_l2 0x08090003
+#define room33_gd1 0x08090004
+#define room33_gd2 0x08090005
+#define room33_flr 0x08090006
+#define DOMDRNCDT 0x08090007
+#define DOMDRN 0x08090008
+#define DOMDUHCDT 0x08090009
+#define DOMDUH 0x0809000A
+#define DOMKIKCDT 0x0809000B
+#define DOMKIK 0x0809000C
+#define DOMPLGCDT 0x0809000D
+#define DOMPLG 0x0809000E
+#define DOMTLKCDT 0x0809000F
+#define DOMTLK 0x08090010
+#define DOMVACCDT 0x08090011
+#define DOMVAC 0x08090012
+#define DOMWLKCDT 0x08090013
+#define DOMWLK 0x08090014
+#define DOMWLK2CDT 0x08090015
+#define DOMWLK2 0x08090016
+#define DOMWLK3CDT 0x08090017
+#define DOMWLK3 0x08090018
+#define DOMWLK4CDT 0x08090019
+#define DOMWLK4 0x0809001A
+#define GEOCOTCDT 0x0809001B
+#define GEOCOT 0x0809001C
+#define GEOPLG33CDT 0x0809001D
+#define GEOPLG33 0x0809001E
+#define GEOWATCDT 0x0809001F
+#define GEOWAT 0x08090020
+#define GEOWWATCDT 0x08090021
+#define GEOWWAT 0x08090022
+#define LEAD1CDT 0x08090023
+#define LEAD1 0x08090024
+#define LEAD2CDT 0x08090025
+#define LEAD2 0x08090026
+#define SHINY33CDT 0x08090027
+#define SHINY33 0x08090028
+ // 41 entities in TXTs, 41 in datafiles.
+ // room34
+#define room34_PAL 0x080A0000
+#define room34_l0 0x080A0001
+#define room34_l1 0x080A0002
+#define room34_l2 0x080A0003
+#define room34_l3 0x080A0004
+#define room34_gd1 0x080A0005
+#define room34_gd2 0x080A0006
+#define room34_gd3 0x080A0007
+#define room34_flr 0x080A0008
+#define R34PLX 0x080A0009
+#define BENBP1CDT 0x080A000A
+#define BENBP1 0x080A000B
+#define BENBP2CDT 0x080A000C
+#define BENBP2 0x080A000D
+#define DOOR34CDR 0x080A000E
+#define DOOR34CDT 0x080A000F
+#define DOOR34 0x080A0010
+#define GENDTLKCDT 0x080A0011
+#define GENDTLK 0x080A0012
+#define GENENTCDT 0x080A0013
+#define GENENT 0x080A0014
+#define GENSHOTCDT 0x080A0015
+#define GENSHOT 0x080A0016
+#define GENSTLKCDT 0x080A0017
+#define GENSTLK 0x080A0018
+#define GENSUPCDT 0x080A0019
+#define GENSUP 0x080A001A
+#define GENTRNCDT 0x080A001B
+#define GENTRN 0x080A001C
+#define GEOBAKCDT 0x080A001D
+#define GEOBAK 0x080A001E
+#define GEOBP2CDT 0x080A001F
+#define GEOBP2 0x080A0020
+#define GEOCH1CDR 0x080A0021
+#define GEOCH1CDT 0x080A0022
+#define GEOCH1 0x080A0023
+#define GEOCH2CDR 0x080A0024
+#define GEOCH2CDT 0x080A0025
+#define GEOCH2 0x080A0026
+#define GEOCH3CDR 0x080A0027
+#define GEOCH3CDT 0x080A0028
+#define GEOCH3 0x080A0029
+#define GEODOR34CDT 0x080A002A
+#define GEODOR34 0x080A002B
+#define GEOENT34CDT 0x080A002C
+#define GEOENT34 0x080A002D
+#define GEONURBPCDT 0x080A002E
+#define GEONURBP 0x080A002F
+#define GEOTAKCDT 0x080A0030
+#define GEOTAK 0x080A0031
+#define GEOTRYDCDT 0x080A0032
+#define GEOTRYD 0x080A0033
+#define GEOTRYTKCDT 0x080A0034
+#define GEOTRYTK 0x080A0035
+#define HATGIVCDT 0x080A0036
+#define HATGIV 0x080A0037
+#define HATSTPCDT 0x080A0038
+#define HATSTP 0x080A0039
+#define HATTLKCDT 0x080A003A
+#define HATTLK 0x080A003B
+#define HATWLKCDT 0x080A003C
+#define HATWLK 0x080A003D
+#define HATWLK2CDT 0x080A003E
+#define HATWLK2 0x080A003F
+#define MONITOR 0x080A0040
+#define MONITOR_PAL 0x080A0041
+#define PULSE1CDT 0x080A0042
+#define PULSE1 0x080A0043
+#define PULSE2CDT 0x080A0044
+#define PULSE2 0x080A0045
+#define PULSE3CDT 0x080A0046
+#define PULSE3 0x080A0047
+#define RENTLKCDT 0x080A0048
+#define RENTLK 0x080A0049
+#define SMARMCDR 0x080A004A
+#define SMARMCDT 0x080A004B
+#define SMARM 0x080A004C
+#define SMSTPCDR 0x080A004D
+#define SMSTPCDT 0x080A004E
+#define SMSTP 0x080A004F
+#define SMTALKCDT 0x080A0050
+#define SMTALK 0x080A0051
+#define SMTALK2CDT 0x080A0052
+#define SMTALK2 0x080A0053
+#define STUDENTCDT 0x080A0054
+#define STUDENT 0x080A0055
+#define STUDGIVCDT 0x080A0056
+#define STUDGIV 0x080A0057
+#define STUDMOVCDT 0x080A0058
+#define STUDMOV 0x080A0059
+ // 90 entities in TXTs, 90 in datafiles.
+ // room35
+#define room35_PAL 0x080B0000
+#define room35_l0 0x080B0001
+#define room35_l1 0x080B0002
+#define room35_gd1 0x080B0003
+#define room35_flr 0x080B0004
+#define ALSHOCKCDT 0x080B0005
+#define ALSHOCK 0x080B0006
+#define CURFLATCDT 0x080B0007
+#define CURFLAT 0x080B0008
+#define EKLBED35CDT 0x080B0009
+#define EKLBED35 0x080B000A
+#define EKLTLK35CDT 0x080B000B
+#define EKLTLK35 0x080B000C
+#define EKLWLK35CDT 0x080B000D
+#define EKLWLK35 0x080B000E
+#define GEORCT35CDT 0x080B000F
+#define GEORCT35 0x080B0010
+#define GEOSIT35CDR 0x080B0011
+#define GEOSIT35CDT 0x080B0012
+#define GEOSIT35 0x080B0013
+#define GEOTLKCDT 0x080B0014
+#define GEOTLK 0x080B0015
+#define GEOTLK35CDT 0x080B0016
+#define GEOTLK35 0x080B0017
+#define GEOTRN35CDT 0x080B0018
+#define GEOTRN35 0x080B0019
+#define JAQTLK1CDT 0x080B001A
+#define JAQTLK1 0x080B001B
+#define JAQTLK2CDT 0x080B001C
+#define JAQTLK2 0x080B001D
+ // 30 entities in TXTs, 30 in datafiles.
+// paris_4
+ // sound_fx
+#define FX_COVDWN 0x09000000
+#define FX_KEYIN 0x09000001
+#define FX_MANOP36 0x09000002
+#define FX_MONTAMB 0x09000003
+#define FX_OOH 0x09000004
+#define FX_PULLUP36 0x09000005
+#define FX_REPLCE36 0x09000006
+#define FX_AMBIEN37 0x09000007
+#define FX_CHAIN37 0x09000008
+#define FX_CHAIN37B 0x09000009
+#define FX_DOOR37 0x0900000A
+#define FX_HOLE37 0x0900000B
+#define FX_KNOCK37 0x0900000C
+#define FX_KNOCK37B 0x0900000D
+#define FX_WINCH37 0x0900000E
+#define FX_AIRCON41 0x0900000F
+#define FX_FONEDN41 0x09000010
+#define FX_FONEUP41 0x09000011
+#define FX_PHONCALL 0x09000012
+#define FX_THERMO1 0x09000013
+#define FX_TAPDRIP 0x09000014
+#define FX_DRIER1 0x09000015
+#define FX_CHURCHFX 0x09000016
+ // 23 entities in TXTs, 23 in datafiles.
+ // room36
+#define R36SPRPAL 0x09010000
+#define R36L0 0x09010001
+#define R36L1 0x09010002
+#define R36G1 0x09010003
+#define room36_PAL 0x09010004
+#define room36_flr 0x09010005
+#define R36PLX 0x09010006
+#define BAL36CDT 0x09010007
+#define BAL36 0x09010008
+#define CRO36APPCDT 0x09010009
+#define CRO36APP 0x0901000A
+#define CRO36GEOCDT 0x0901000B
+#define CRO36GEO 0x0901000C
+#define CRO36IDLCDT 0x0901000D
+#define CRO36IDL 0x0901000E
+#define CRO36JUGCDT 0x0901000F
+#define CRO36JUG 0x09010010
+#define CRO36UNICDT 0x09010011
+#define CRO36UNI 0x09010012
+#define GEN36DRICDT 0x09010013
+#define GEN36DRI 0x09010014
+#define GEN36FEHCDT 0x09010015
+#define GEN36FEH 0x09010016
+#define GEN36HURCDT 0x09010017
+#define GEN36HUR 0x09010018
+#define GEN36LEACDT 0x09010019
+#define GEN36LEA 0x0901001A
+#define GEN36POICDR 0x0901001B
+#define GEN36POICDT 0x0901001C
+#define GEN36POI 0x0901001D
+#define GEN36SPECDT 0x0901001E
+#define GEN36SPE 0x0901001F
+#define GEN36TALCDT 0x09010020
+#define GEN36TAL 0x09010021
+#define GEO36CLOCDT 0x09010022
+#define GEO36CLO 0x09010023
+#define GEO36ENTCDT 0x09010024
+#define GEO36ENT 0x09010025
+#define GEO36EXTCDT 0x09010026
+#define GEO36EXT 0x09010027
+#define GEO36JUGCDT 0x09010028
+#define GEO36JUG 0x09010029
+#define GEO36KNECDR 0x0901002A
+#define GEO36KNECDT 0x0901002B
+#define GEO36KNE 0x0901002C
+#define GEO36LUKCDR 0x0901002D
+#define GEO36LUKCDT 0x0901002E
+#define GEO36LUK 0x0901002F
+#define GEO36NOSCDT 0x09010030
+#define GEO36NOS 0x09010031
+#define GEO36OPECDT 0x09010032
+#define GEO36OPE 0x09010033
+#define GEO36POPCDT 0x09010034
+#define GEO36POP 0x09010035
+#define GEO36SHOCDR 0x09010036
+#define GEO36SHOCDT 0x09010037
+#define GEO36SHO 0x09010038
+#define GEO36SNTCDT 0x09010039
+#define GEO36SNT 0x0901003A
+#define GEO36STDCDT 0x0901003B
+#define GEO36STD 0x0901003C
+#define GEO36STUCDT 0x0901003D
+#define GEO36STU 0x0901003E
+#define GEO36TAKCDT 0x0901003F
+#define GEO36TAK 0x09010040
+#define HAT36CDT 0x09010041
+#define HAT36 0x09010042
+#define JUG36FINCDT 0x09010043
+#define JUG36FIN 0x09010044
+#define JUG36FURCDT 0x09010045
+#define JUG36FUR 0x09010046
+#define JUG36GIVCDT 0x09010047
+#define JUG36GIV 0x09010048
+#define JUG36GOCDT 0x09010049
+#define JUG36GO 0x0901004A
+#define JUG36JUGCDT 0x0901004B
+#define JUG36JUG 0x0901004C
+#define JUG36LAFCDT 0x0901004D
+#define JUG36LAF 0x0901004E
+#define JUG36STACDT 0x0901004F
+#define JUG36STA 0x09010050
+#define JUG36TAKCDT 0x09010051
+#define JUG36TAK 0x09010052
+#define JUG36TALCDT 0x09010053
+#define JUG36TAL 0x09010054
+#define MANCOV36CDT 0x09010055
+#define MANCOV36 0x09010056
+#define MANOFF36CDT 0x09010057
+#define MANOFF36 0x09010058
+#define VIN36CDT 0x09010059
+#define VIN36 0x0901005A
+ // 91 entities in TXTs, 91 in datafiles.
+ // room37
+#define room37_PAL 0x09020000
+#define R37L0 0x09020001
+#define R37L1 0x09020002
+#define R37G1 0x09020003
+#define room37_flr 0x09020004
+#define DOR37COLCDT 0x09020005
+#define DOR37COL 0x09020006
+#define GEO37ASCCDT 0x09020007
+#define GEO37ASC 0x09020008
+#define GEO37COGCDT 0x09020009
+#define GEO37COG 0x0902000A
+#define GEO37DESCDT 0x0902000B
+#define GEO37DES 0x0902000C
+#define GEO37HUKCDR 0x0902000D
+#define GEO37HUKCDT 0x0902000E
+#define GEO37HUK 0x0902000F
+#define GEO37INBCDT 0x09020010
+#define GEO37INB 0x09020011
+#define GEO37LEVCDT 0x09020012
+#define GEO37LEV 0x09020013
+#define GEO37OUTCDT 0x09020014
+#define GEO37OUT 0x09020015
+#define GEO37RUNCDT 0x09020016
+#define GEO37RUN 0x09020017
+#define GEO37TA1CDT 0x09020018
+#define GEO37TA1 0x09020019
+#define GEO37TA2CDT 0x0902001A
+#define GEO37TA2 0x0902001B
+#define GEO37TA3CDT 0x0902001C
+#define GEO37TA3 0x0902001D
+#define GEO37TA4CDT 0x0902001E
+#define GEO37TA4 0x0902001F
+#define GEO37TU1CDR 0x09020020
+#define GEO37TU1CDT 0x09020021
+#define GEO37TU1 0x09020022
+#define GEO37TU2CDT 0x09020023
+#define GEO37TU2 0x09020024
+#define GEO37WLCDR 0x09020025
+#define GEO37WLCDT 0x09020026
+#define GEO37WL 0x09020027
+#define HOO37LBOCDR 0x09020028
+#define HOO37LBOCDT 0x09020029
+#define HOO37LBO 0x0902002A
+#define HOO37PULCDT 0x0902002B
+#define HOO37PUL 0x0902002C
+#define ROCKS1CDT 0x0902002D
+#define ROCKS1 0x0902002E
+#define WAL37BRECDT 0x0902002F
+#define WAL37BRE 0x09020030
+#define WAL37SLICDT 0x09020031
+#define WAL37SLI 0x09020032
+#define WATER37CDT 0x09020033
+#define WATER37 0x09020034
+#define WATER37ACDT 0x09020035
+#define WATER37A 0x09020036
+#define WHEEL37CDT 0x09020037
+#define WHEEL37 0x09020038
+ // 57 entities in TXTs, 57 in datafiles.
+ // room38
+#define R38SPRPAL 0x09030000
+#define room38_PAL 0x09030001
+#define R38L0 0x09030002
+#define R38L1 0x09030003
+#define R38G1 0x09030004
+#define room38_flr 0x09030005
+#define BBACK38 0x09030006
+#define BBACK38PAL 0x09030007
+#define GEOINQ38CDT 0x09030008
+#define GEOINQ38 0x09030009
+#define GEO38AS1CDT 0x0903000A
+#define GEO38AS1 0x0903000B
+#define GEO38AS2CDT 0x0903000C
+#define GEO38AS2 0x0903000D
+#define GEO38DE1CDT 0x0903000E
+#define GEO38DE1 0x0903000F
+#define GEO38DE2CDT 0x09030010
+#define GEO38DE2 0x09030011
+#define GEO38LUKCDR 0x09030012
+#define GEO38LUKCDT 0x09030013
+#define GEO38LUK 0x09030014
+ // 21 entities in TXTs, 21 in datafiles.
+ // room39
+#define R39SPRPAL 0x09040000
+#define R39L0 0x09040001
+#define R39L1 0x09040002
+#define R39G1 0x09040003
+#define room39_PAL 0x09040004
+#define room39_flr 0x09040005
+#define R39PLX 0x09040006
+#define BOA39GOACDT 0x09040007
+#define BOA39GOA 0x09040008
+#define BOA39SPRCDT 0x09040009
+#define BOA39SPR 0x0904000A
+#define CIV391T2CDR 0x0904000B
+#define CIV391T2CDT 0x0904000C
+#define CIV391T2 0x0904000D
+#define CIV391T3CDR 0x0904000E
+#define CIV391T3CDT 0x0904000F
+#define CIV391T3 0x09040010
+#define CIV392T3CDR 0x09040011
+#define CIV392T3CDT 0x09040012
+#define CIV392T3 0x09040013
+#define CIV39T1CDT 0x09040014
+#define CIV39T1 0x09040015
+#define CIV39T2CDT 0x09040016
+#define CIV39T2 0x09040017
+#define CIV39T3CDT 0x09040018
+#define CIV39T3 0x09040019
+#define CIVLIST1CDT 0x0904001A
+#define CIVLIST1 0x0904001B
+#define CIVLIST2CDT 0x0904001C
+#define CIVLIST2 0x0904001D
+#define CIVLIST3CDT 0x0904001E
+#define CIVLIST3 0x0904001F
+#define COL391T2CDR 0x09040020
+#define COL391T2CDT 0x09040021
+#define COL391T2 0x09040022
+#define COL391T3CDR 0x09040023
+#define COL391T3CDT 0x09040024
+#define COL391T3 0x09040025
+#define COL392T3CDR 0x09040026
+#define COL392T3CDT 0x09040027
+#define COL392T3 0x09040028
+#define COL39T1CDT 0x09040029
+#define COL39T1 0x0904002A
+#define COL39T2CDT 0x0904002B
+#define COL39T2 0x0904002C
+#define COL39T3CDT 0x0904002D
+#define COL39T3 0x0904002E
+#define COLLIST2CDT 0x0904002F
+#define COLLIST2 0x09040030
+#define COLLIST3CDT 0x09040031
+#define COLLIST3 0x09040032
+#define CON39TALCDT 0x09040033
+#define CON39TAL 0x09040034
+#define EKL391T2CDR 0x09040035
+#define EKL391T2CDT 0x09040036
+#define EKL391T2 0x09040037
+#define EKL391T3CDR 0x09040038
+#define EKL391T3CDT 0x09040039
+#define EKL391T3 0x0904003A
+#define EKL392T3CDR 0x0904003B
+#define EKL392T3CDT 0x0904003C
+#define EKL392T3 0x0904003D
+#define EKL39T1CDT 0x0904003E
+#define EKL39T1 0x0904003F
+#define EKL39T2CDT 0x09040040
+#define EKL39T2 0x09040041
+#define EKL39T3CDT 0x09040042
+#define EKL39T3 0x09040043
+#define EKLLIST1CDT 0x09040044
+#define EKLLIST1 0x09040045
+#define EKLLIST2CDT 0x09040046
+#define EKLLIST2 0x09040047
+#define EKLLIST3CDT 0x09040048
+#define EKLLIST3 0x09040049
+#define EXE391T2CDR 0x0904004A
+#define EXE391T2CDT 0x0904004B
+#define EXE391T2 0x0904004C
+#define EXE391T3CDR 0x0904004D
+#define EXE391T3CDT 0x0904004E
+#define EXE391T3 0x0904004F
+#define EXE392T3CDR 0x09040050
+#define EXE392T3CDT 0x09040051
+#define EXE392T3 0x09040052
+#define EXE39T1CDT 0x09040053
+#define EXE39T1 0x09040054
+#define EXE39T2CDT 0x09040055
+#define EXE39T2 0x09040056
+#define EXE39T3CDT 0x09040057
+#define EXE39T3 0x09040058
+#define GEO39ENTCDT 0x09040059
+#define GEO39ENT 0x0904005A
+#define GEO39EXTCDT 0x0904005B
+#define GEO39EXT 0x0904005C
+#define GEO39GEMCDR 0x0904005D
+#define GEO39GEMCDT 0x0904005E
+#define GEO39GEM 0x0904005F
+#define GEO39TRICDR 0x09040060
+#define GEO39TRICDT 0x09040061
+#define GEO39TRI 0x09040062
+#define LAT391T2CDR 0x09040063
+#define LAT391T2CDT 0x09040064
+#define LAT391T2 0x09040065
+#define LAT391T3CDR 0x09040066
+#define LAT391T3CDT 0x09040067
+#define LAT391T3 0x09040068
+#define LAT392T3CDR 0x09040069
+#define LAT392T3CDT 0x0904006A
+#define LAT392T3 0x0904006B
+#define LAT39T1CDT 0x0904006C
+#define LAT39T1 0x0904006D
+#define LAT39T2CDT 0x0904006E
+#define LAT39T2 0x0904006F
+#define LAT39T3CDT 0x09040070
+#define LAT39T3 0x09040071
+#define LATLIST1CDT 0x09040072
+#define LATLIST1 0x09040073
+#define LATLIST2CDT 0x09040074
+#define LATLIST2 0x09040075
+#define LATLIST3CDT 0x09040076
+#define LATLIST3 0x09040077
+#define MAS391T2CDR 0x09040078
+#define MAS391T2CDT 0x09040079
+#define MAS391T2 0x0904007A
+#define MAS391T3CDR 0x0904007B
+#define MAS391T3CDT 0x0904007C
+#define MAS391T3 0x0904007D
+#define MAS392T3CDR 0x0904007E
+#define MAS392T3CDT 0x0904007F
+#define MAS392T3 0x09040080
+#define MAS39T1CDT 0x09040081
+#define MAS39T1 0x09040082
+#define MAS39T2CDT 0x09040083
+#define MAS39T2 0x09040084
+#define MAS39T3CDT 0x09040085
+#define MAS39T3 0x09040086
+#define MASLIST1CDT 0x09040087
+#define MASLIST1 0x09040088
+#define MASLIST2CDT 0x09040089
+#define MASLIST2 0x0904008A
+#define MASLIST3CDT 0x0904008B
+#define MASLIST3 0x0904008C
+#define RAYS39CDT 0x0904008D
+#define RAYS39 0x0904008E
+#define TRI39ALOCDT 0x0904008F
+#define TRI39ALO 0x09040090
+#define TRI39GEMCDT 0x09040091
+#define TRI39GEM 0x09040092
+ // 147 entities in TXTs, 147 in datafiles.
+ // room40
+#define R40L0 0x09050000
+#define room40_PAL 0x09050001
+#define room40_flr 0x09050002
+#define GEO40ASCCDT 0x09050003
+#define GEO40ASC 0x09050004
+#define GEO40DESCDT 0x09050005
+#define GEO40DES 0x09050006
+#define GEO40DIPCDT 0x09050007
+#define GEO40DIP 0x09050008
+#define GUA40ENTCDT 0x09050009
+#define GUA40ENT 0x0905000A
+#define GUA40STACDT 0x0905000B
+#define GUA40STA 0x0905000C
+#define GUA40TALCDT 0x0905000D
+#define GUA40TAL 0x0905000E
+#define PAI40FAGCDT 0x0905000F
+#define PAI40FAG 0x09050010
+#define PAI40IDLCDT 0x09050011
+#define PAI40IDL 0x09050012
+#define PAI40LEACDT 0x09050013
+#define PAI40LEA 0x09050014
+#define PAI40STACDR 0x09050015
+#define PAI40STACDT 0x09050016
+#define PAI40STA 0x09050017
+#define PAI40TALCDT 0x09050018
+#define PAI40TAL 0x09050019
+ // 26 entities in TXTs, 26 in datafiles.
+ // room41
+#define R41L0 0x09060000
+#define R41L1 0x09060001
+#define R41G1 0x09060002
+#define room41_PAL 0x09060003
+#define room41_flr 0x09060004
+#define GEO41ENTCDT 0x09060005
+#define GEO41ENT 0x09060006
+#define GEO41OP2CDT 0x09060007
+#define GEO41OP2 0x09060008
+#define GEO41OPECDT 0x09060009
+#define GEO41OPE 0x0906000A
+#define GEO41THECDR 0x0906000B
+#define GEO41THECDT 0x0906000C
+#define GEO41THE 0x0906000D
+#define GLO41IDLCDT 0x0906000E
+#define GLO41IDL 0x0906000F
+#define GLO41KEYCDR 0x09060010
+#define GLO41KEYCDT 0x09060011
+#define GLO41KEY 0x09060012
+#define GLO41TALCDT 0x09060013
+#define GLO41TAL 0x09060014
+#define GUA41ANSCDT 0x09060015
+#define GUA41ANS 0x09060016
+#define GUA41GLOCDT 0x09060017
+#define GUA41GLO 0x09060018
+#define GUA41IDLCDT 0x09060019
+#define GUA41IDL 0x0906001A
+#define GUA41KEYCDR 0x0906001B
+#define GUA41KEYCDT 0x0906001C
+#define GUA41KEY 0x0906001D
+#define GUA41PHOCDT 0x0906001E
+#define GUA41PHO 0x0906001F
+#define GUA41TALCDT 0x09060020
+#define GUA41TAL 0x09060021
+#define PAI41HANCDT 0x09060022
+#define PAI41HAN 0x09060023
+#define PAI41LEACDT 0x09060024
+#define PAI41LEA 0x09060025
+#define PAI41TALCDT 0x09060026
+#define PAI41TAL 0x09060027
+#define PHONE41CDT 0x09060028
+#define PHONE41 0x09060029
+ // 42 entities in TXTs, 42 in datafiles.
+ // room42
+#define room42_PAL 0x09070000
+#define R42L0 0x09070001
+#define R42L1 0x09070002
+#define R42L2 0x09070003
+#define R42G1 0x09070004
+#define R42G2 0x09070005
+#define room42_flr 0x09070006
+#define CHALICE42 0x09070007
+#define CHALICE42_PAL 0x09070008
+#define GEO42CHACDT 0x09070009
+#define GEO42CHA 0x0907000A
+#define GEO42DESCDR 0x0907000B
+#define GEO42DESCDT 0x0907000C
+#define GEO42DES 0x0907000D
+ // 14 entities in TXTs, 14 in datafiles.
+ // room43
+#define room43_PAL 0x09080000
+#define R43L0 0x09080001
+#define R43L1 0x09080002
+#define R43G1 0x09080003
+#define room43_flr 0x09080004
+#define GEO43DR2CDT 0x09080005
+#define GEO43DR2 0x09080006
+#define GEO43DRYCDT 0x09080007
+#define GEO43DRY 0x09080008
+#define GEO43HAN 0x09080009
+#define GEO43HANCDT 0x0908000A
+#define GEO43KEYCDT 0x0908000B
+#define GEO43KEY 0x0908000C
+#define GEO43PLACDT 0x0908000D
+#define GEO43PLA 0x0908000E
+#define GEO43PRECDT 0x0908000F
+#define GEO43PRE 0x09080010
+#define GEO43SOACDT 0x09080011
+#define GEO43SOA 0x09080012
+#define GEO43SWPCDT 0x09080013
+#define GEO43SWP 0x09080014
+#define GEO43WATCDT 0x09080015
+#define GEO43WAT 0x09080016
+#define SOAP43CDT 0x09080017
+#define SOAP43 0x09080018
+#define WATER43CDT 0x09080019
+#define WATER43 0x0908001A
+ // 27 entities in TXTs, 27 in datafiles.
+ // room48
+#define R48SPRPAL 0x09090000
+#define R48L0 0x09090001
+#define R48L1 0x09090002
+#define R48L2 0x09090003
+#define R48G1 0x09090004
+#define R48G2 0x09090005
+#define R48PAL 0x09090006
+#define room48_flr 0x09090007
+#define R48PLX 0x09090008
+#define GEO48BENCDR 0x09090009
+#define GEO48BENCDT 0x0909000A
+#define GEO48BEN 0x0909000B
+#define GEO48GIVCDR 0x0909000C
+#define GEO48GIVCDT 0x0909000D
+#define GEO48GIV 0x0909000E
+#define GEO48LENCDT 0x0909000F
+#define GEO48LEN 0x09090010
+#define PRI48CANCDR 0x09090011
+#define PRI48CANCDT 0x09090012
+#define PRI48CAN 0x09090013
+#define PRI48IDLCDT 0x09090014
+#define PRI48IDL 0x09090015
+#define PRI48PO1CDT 0x09090016
+#define PRI48PO1 0x09090017
+#define PRI48PO2CDT 0x09090018
+#define PRI48PO2 0x09090019
+#define PRI48RETCDT 0x0909001A
+#define PRI48RET 0x0909001B
+#define PRI48TAKCDT 0x0909001C
+#define PRI48TAK 0x0909001D
+#define PRI48TALCDT 0x0909001E
+#define PRI48TAL 0x0909001F
+#define PRI48TURCDR 0x09090020
+#define PRI48TURCDT 0x09090021
+#define PRI48TUR 0x09090022
+#define WINDOW1 0x09090023
+#define WINDOW1_PAL 0x09090024
+#define WINDOW2 0x09090025
+#define WINDOW2_PAL 0x09090026
+ // 39 entities in TXTs, 39 in datafiles.
+// ireland
+ // sound_fx
+#define FX_EIRBIRD3 0x0A000000
+#define FX_SHOCK2 0x0A000001
+#define FX_EIRBIRD1 0x0A000002
+#define FX_EIRBIRD2 0x0A000003
+#define FX_SWITCH19 0x0A000004
+#define FX_TRAPOPEN 0x0A000005
+#define FX_VIOLIN19 0x0A000006
+#define FX_WHISTLE 0x0A000007
+#define FX_BARFLAP 0x0A000008
+#define FX_DORCLOSE20 0x0A000009
+#define FX_DRINK 0x0A00000A
+#define FX_FITZHIT 0x0A00000B
+#define FX_FITZRUN 0x0A00000C
+#define FX_FITZUP 0x0A00000D
+#define FX_FUSE20 0x0A00000E
+#define FX_PULLPINT 0x0A00000F
+#define FX_SNEEZE1 0x0A000010
+#define FX_SNEEZE2 0x0A000011
+#define FX_WASHER 0x0A000012
+#define FX_CELTAP 0x0A000013
+#define FX_DRIPIRE 0x0A000014
+#define FX_DRIPIRE2 0x0A000015
+#define FX_TAP 0x0A000016
+#define FX_TAP2 0x0A000017
+#define FX_CLIMBHAY 0x0A000018
+#define FX_FARMERGO 0x0A000019
+#define FX_CASTLWAL 0x0A00001A
+#define FX_CLIMBFAL 0x0A00001B
+#define FX_KEYSTEP 0x0A00001C
+#define FX_WIND 0x0A00001D
+#define FX_GEOGOAT 0x0A00001E
+#define FX_GOATBAA 0x0A00001F
+#define FX_GOATCHEW 0x0A000020
+#define FX_GOATDOH 0x0A000021
+#define FX_PLOUGH 0x0A000022
+#define FX_EIRDRIP1 0x0A000023
+#define FX_EIRDRIP2 0x0A000024
+#define FX_LADDWN25 0x0A000025
+#define FX_LADDUP25 0x0A000026
+#define FX_SECDOR25 0x0A000027
+#define FX_SLABFALL 0x0A000028
+#define FX_SLABUP 0x0A000029
+#define FX_TRIGER25 0x0A00002A
+#define FX_WRING 0x0A00002B
+#define FX_LEVER 0x0A00002C
+#define FX_LEVER2 0x0A00002D
+#define FX_RAT3A 0x0A00002E
+#define FX_RAT3B 0x0A00002F
+#define FX_RAT3C 0x0A000030
+#define FX_RAT3D 0x0A000031
+ // 50 entities in TXTs, 50 in datafiles.
+ // room19
+#define R19SPRPAL 0x0A010000
+#define R19L0 0x0A010001
+#define R19L1 0x0A010002
+#define R19L2 0x0A010003
+#define R19G1 0x0A010004
+#define R19G2 0x0A010005
+#define R19PAL 0x0A010006
+#define R19FLR 0x0A010007
+#define ASSTAP 0x0A010008
+#define ASSTAPCDT 0x0A010009
+#define ASSTLK19 0x0A01000A
+#define ASSTLK19CDT 0x0A01000B
+#define ASSWLK2 0x0A01000C
+#define ASSWLK2CDT 0x0A01000D
+#define ASSWLK6 0x0A01000E
+#define ASSWLK6CDT 0x0A01000F
+#define BOXCVR 0x0A010010
+#define BOXCVRCDT 0x0A010011
+#define GEODRN 0x0A010012
+#define GEODRNCDT 0x0A010013
+#define GEOMAG 0x0A010014
+#define GEOMAGCDT 0x0A010015
+#define GEORCT 0x0A010016
+#define GEORCTCDT 0x0A010017
+#define GEOTRP 0x0A010018
+#define GEOTRPCDT 0x0A010019
+#define GEOTRP8 0x0A01001A
+#define GEOTRP8CDT 0x0A01001B
+#define GEOWRN 0x0A01001C
+#define GEOWRNCDT 0x0A01001D
+#define LID19 0x0A01001E
+#define LID19CDT 0x0A01001F
+#define MAGCON 0x0A010020
+#define MAGCONCDT 0x0A010021
+#define MAGCONCDR 0x0A010022
+#define MAGMOV 0x0A010023
+#define MAGMOVCDT 0x0A010024
+#define MAGMOVCDR 0x0A010025
+#define MAGSHK 0x0A010026
+#define MAGSHKCDT 0x0A010027
+#define MAGSHY 0x0A010028
+#define MAGSHYCDT 0x0A010029
+#define MAGSHYCDR 0x0A01002A
+#define MAGSLK 0x0A01002B
+#define MAGSLKCDT 0x0A01002C
+#define MAGTALK 0x0A01002D
+#define MAGTALKCDT 0x0A01002E
+#define MAGTLK 0x0A01002F
+#define MAGTLKCDT 0x0A010030
+#define MAGTLK8 0x0A010031
+#define MAGTLK8CDT 0x0A010032
+#define TRPOPN 0x0A010033
+#define TRPOPNCDT 0x0A010034
+ // 53 entities in TXTs, 53 in datafiles.
+ // room20
+#define R20SPRPAL 0x0A020000
+#define R20L0 0x0A020001
+#define R20L1 0x0A020002
+#define R20L2 0x0A020003
+#define R20L3 0x0A020004
+#define R20G1 0x0A020005
+#define R20G2 0x0A020006
+#define R20G3 0x0A020007
+#define R20PAL 0x0A020008
+#define R20FLR 0x0A020009
+#define BARTPS 0x0A02000A
+#define BARTPSCDT 0x0A02000B
+#define BARTWL 0x0A02000C
+#define BARTWLCDT 0x0A02000D
+#define BRIDRN 0x0A02000E
+#define BRIDRNCDT 0x0A02000F
+#define BRIDRNCDR 0x0A020010
+#define BRIFTZ 0x0A020011
+#define BRIFTZCDT 0x0A020012
+#define BRIFTZCDR 0x0A020013
+#define BRITLK 0x0A020014
+#define BRITLKCDT 0x0A020015
+#define BRITLK8 0x0A020016
+#define BRITLK8CDT 0x0A020017
+#define BRITLK9 0x0A020018
+#define BRITLK9CDT 0x0A020019
+#define BRITRN 0x0A02001A
+#define BRITRNCDT 0x0A02001B
+#define BRITRNCDR 0x0A02001C
+#define DOROPN20 0x0A02001D
+#define DOROPN20CDT 0x0A02001E
+#define DOROPN20CDR 0x0A02001F
+#define DOYDRN 0x0A020020
+#define DOYDRNCDT 0x0A020021
+#define DOYDRNCDR 0x0A020022
+#define DOYFTZ 0x0A020023
+#define DOYFTZCDT 0x0A020024
+#define DOYFTZCDR 0x0A020025
+#define DOYTLK 0x0A020026
+#define DOYTLKCDT 0x0A020027
+#define DOYTLK20 0x0A020028
+#define DOYTLK20CDT 0x0A020029
+#define DOYTLK8 0x0A02002A
+#define DOYTLK8CDT 0x0A02002B
+#define DOYTLK9 0x0A02002C
+#define DOYTLK9CDT 0x0A02002D
+#define DOYTRN 0x0A02002E
+#define DOYTRNCDT 0x0A02002F
+#define DOYTRNCDR 0x0A020030
+#define DOYTRN20 0x0A020031
+#define DOYTRN20CDT 0x0A020032
+#define DOYTRN20CDR 0x0A020033
+#define DOYTRN8 0x0A020034
+#define DOYTRN8CDT 0x0A020035
+#define DOYTRN8CDR 0x0A020036
+#define DOYTRN9 0x0A020037
+#define DOYTRN9CDT 0x0A020038
+#define DOYTRN9CDR 0x0A020039
+#define FIDPLY 0x0A02003A
+#define FIDPLYCDT 0x0A02003B
+#define FLPOPN 0x0A02003C
+#define FLPOPNCDT 0x0A02003D
+#define FRMTLK20 0x0A02003E
+#define FRMTLK20CDT 0x0A02003F
+#define FTZAGT 0x0A020040
+#define FTZAGTCDT 0x0A020041
+#define FTZGET 0x0A020042
+#define FTZGETCDT 0x0A020043
+#define FTZGETCDR 0x0A020044
+#define FTZRUN 0x0A020045
+#define FTZRUNCDT 0x0A020046
+#define FTZSTD 0x0A020047
+#define FTZSTDCDT 0x0A020048
+#define FTZTALK 0x0A020049
+#define FTZTALKCDT 0x0A02004A
+#define FTZTLK 0x0A02004B
+#define FTZTLKCDT 0x0A02004C
+#define FTZTLK8 0x0A02004D
+#define FTZTLK8CDT 0x0A02004E
+#define GEODRN20 0x0A02004F
+#define GEODRN20CDT 0x0A020050
+#define GEOPHN20 0x0A020051
+#define GEOPHN20CDT 0x0A020052
+#define GEOPHN20CDR 0x0A020053
+#define GEOPLG 0x0A020054
+#define GEOPLGCDT 0x0A020055
+#define GEOPLG8 0x0A020056
+#define GEOPLG8CDT 0x0A020057
+#define GEOSEE 0x0A020058
+#define GEOSEECDT 0x0A020059
+#define GEOSNR 0x0A02005A
+#define GEOSNRCDT 0x0A02005B
+#define GEOSNR8 0x0A02005C
+#define GEOSNR8CDT 0x0A02005D
+#define GEOTWL20 0x0A02005E
+#define GEOTWL20CDT 0x0A02005F
+#define GEOXIT20 0x0A020060
+#define GEOXIT20CDT 0x0A020061
+#define GLSGEO 0x0A020062
+#define GLSGEOCDT 0x0A020063
+#define GLSWSH 0x0A020064
+#define GLSWSHCDT 0x0A020065
+#define LESDOR 0x0A020066
+#define LESDORCDT 0x0A020067
+#define LESDOY 0x0A020068
+#define LESDOYCDT 0x0A020069
+#define LESFLP 0x0A02006A
+#define LESFLPCDT 0x0A02006B
+#define LESFTZ 0x0A02006C
+#define LESFTZCDT 0x0A02006D
+#define LESFTZCDR 0x0A02006E
+#define LESGLS 0x0A02006F
+#define LESGLSCDT 0x0A020070
+#define LESGLSCDR 0x0A020071
+#define LESLNS 0x0A020072
+#define LESLNSCDT 0x0A020073
+#define LESLNSCDR 0x0A020074
+#define LESMOV 0x0A020075
+#define LESMOVCDT 0x0A020076
+#define LESMOVCDR 0x0A020077
+#define LESPMP 0x0A020078
+#define LESPMPCDT 0x0A020079
+#define LESPNT 0x0A02007A
+#define LESPNTCDT 0x0A02007B
+#define LESPNT20 0x0A02007C
+#define LESPNT20CDT 0x0A02007D
+#define LESPNT8 0x0A02007E
+#define LESPNT8CDT 0x0A02007F
+#define LESPNT8CDR 0x0A020080
+#define LESTALK 0x0A020081
+#define LESTALKCDT 0x0A020082
+#define LESTLK 0x0A020083
+#define LESTLKCDT 0x0A020084
+#define LESTLK20 0x0A020085
+#define LESTLK20CDT 0x0A020086
+#define LESTLK8 0x0A020087
+#define LESTLK8CDT 0x0A020088
+#define LESTLK9 0x0A020089
+#define LESTLK9CDT 0x0A02008A
+#define LESTURN 0x0A02008B
+#define LESTURNCDT 0x0A02008C
+#define LESTURNCDR 0x0A02008D
+#define LESWLK 0x0A02008E
+#define LESWLKCDT 0x0A02008F
+#define LESWLK8 0x0A020090
+#define LESWLK8CDT 0x0A020091
+#define LESWSH 0x0A020092
+#define LESWSHCDT 0x0A020093
+#define LESWSHCDR 0x0A020094
+#define MAGENT 0x0A020095
+#define MAGENTCDT 0x0A020096
+#define MAGEXIT 0x0A020097
+#define MAGEXITCDT 0x0A020098
+#define MAGMOV20 0x0A020099
+#define MAGMOV20CDT 0x0A02009A
+#define MAGTEST 0x0A02009B
+#define MAGTESTCDT 0x0A02009C
+#define MAGTLK20 0x0A02009D
+#define MAGTLK20CDT 0x0A02009E
+#define PLGWLL 0x0A02009F
+#define PLGWLLCDT 0x0A0200A0
+#define RONDRN 0x0A0200A1
+#define RONDRNCDT 0x0A0200A2
+#define RONDRNCDR 0x0A0200A3
+#define RONDRP 0x0A0200A4
+#define RONDRPCDT 0x0A0200A5
+#define RONFTZ 0x0A0200A6
+#define RONFTZCDT 0x0A0200A7
+#define RONFTZCDR 0x0A0200A8
+#define RONGEO 0x0A0200A9
+#define RONGEOCDT 0x0A0200AA
+#define RONGEOCDR 0x0A0200AB
+#define RONGLS 0x0A0200AC
+#define RONGLSCDT 0x0A0200AD
+#define RONGLSCDR 0x0A0200AE
+#define RONGLS8 0x0A0200AF
+#define RONGLS8CDT 0x0A0200B0
+#define RONPIK 0x0A0200B1
+#define RONPIKCDT 0x0A0200B2
+#define RONPKT 0x0A0200B3
+#define RONPKTCDT 0x0A0200B4
+#define RONPKTCDR 0x0A0200B5
+#define RONSNR 0x0A0200B6
+#define RONSNRCDT 0x0A0200B7
+#define RONSNZ 0x0A0200B8
+#define RONSNZCDT 0x0A0200B9
+#define RONSNZ2 0x0A0200BA
+#define RONSNZ2CDT 0x0A0200BB
+#define RONTLK 0x0A0200BC
+#define RONTLKCDT 0x0A0200BD
+#define RONTLK2 0x0A0200BE
+#define RONTLK2CDT 0x0A0200BF
+#define RONWIR 0x0A0200C0
+#define RONWIRCDT 0x0A0200C1
+#define RONWIRCDR 0x0A0200C2
+#define SNRTBL 0x0A0200C3
+#define SNRTBLCDT 0x0A0200C4
+ // 197 entities in TXTs, 197 in datafiles.
+ // room21
+#define R21L0 0x0A030000
+#define R21L1 0x0A030001
+#define R21L2 0x0A030002
+#define R21G1 0x0A030003
+#define R21G2 0x0A030004
+#define R21PAL 0x0A030005
+#define R21FLR 0x0A030006
+#define CALBLO 0x0A030007
+#define CALBLOCDT 0x0A030008
+#define GEMSHN 0x0A030009
+#define GEMSHNCDT 0x0A03000A
+#define GEOGEM 0x0A03000B
+#define GEOGEMCDT 0x0A03000C
+#define GEOGEM8 0x0A03000D
+#define GEOGEM8CDT 0x0A03000E
+#define GEOLVR 0x0A03000F
+#define GEOLVRCDT 0x0A030010
+#define GEOLVR21 0x0A030011
+#define GEOLVR21CDT 0x0A030012
+#define GEOLVR8 0x0A030013
+#define GEOLVR8CDT 0x0A030014
+#define GEOTAP 0x0A030015
+#define GEOTAPCDT 0x0A030016
+#define GEOTLK21 0x0A030017
+#define GEOTLK21CDT 0x0A030018
+#define GEOTORCH 0x0A030019
+#define GEOTORCHCDT 0x0A03001A
+#define GEOTRN21 0x0A03001B
+#define GEOTRN21CDT 0x0A03001C
+#define GEOTRN21CDR 0x0A03001D
+#define GEOTWL21 0x0A03001E
+#define GEOTWL21CDT 0x0A03001F
+#define LVRPSH 0x0A030020
+#define LVRPSHCDT 0x0A030021
+#define MAGCEL 0x0A030022
+#define MAGCELCDT 0x0A030023
+#define MAGCELCDR 0x0A030024
+#define MAGTLK21 0x0A030025
+#define MAGTLK21CDT 0x0A030026
+#define TAPDRP 0x0A030027
+#define TAPDRPCDT 0x0A030028
+#define TAPRUN 0x0A030029
+#define TAPRUNCDT 0x0A03002A
+#define TORCH21 0x0A03002B
+#define TORCH21CDT 0x0A03002C
+ // 45 entities in TXTs, 45 in datafiles.
+ // room22
+#define R22SPRPAL 0x0A040000
+#define R22L0 0x0A040001
+#define R22L1 0x0A040002
+#define R22G1 0x0A040003
+#define R22PAL 0x0A040004
+#define R22FLR 0x0A040005
+#define FRMBUK 0x0A040006
+#define FRMBUKCDT 0x0A040007
+#define FRMSTD 0x0A040008
+#define FRMSTDCDT 0x0A040009
+#define FRMTLK 0x0A04000A
+#define FRMTLKCDT 0x0A04000B
+#define FRMWLK 0x0A04000C
+#define FRMWLKCDT 0x0A04000D
+#define GEOCLM 0x0A04000E
+#define GEOCLMCDT 0x0A04000F
+#define GEOCLMCDR 0x0A040010
+#define GEOPSH22 0x0A040011
+#define GEOPSH22CDT 0x0A040012
+ // 19 entities in TXTs, 19 in datafiles.
+ // room23
+#define R23L0 0x0A050000
+#define R23PAL 0x0A050001
+#define GEOCLM23 0x0A050002
+#define GEOCLM23CDT 0x0A050003
+#define GEOCLM23CDR 0x0A050004
+#define GEOKEY23 0x0A050005
+#define GEOKEY23CDT 0x0A050006
+#define GEOTOP 0x0A050007
+#define GEOTOPCDT 0x0A050008
+#define GEOTOPCDR 0x0A050009
+#define GEOTRY23 0x0A05000A
+#define GEOTRY23CDT 0x0A05000B
+#define GEOTUG23 0x0A05000C
+#define GEOTUG23CDT 0x0A05000D
+#define LFTKEY23 0x0A05000E
+#define LFTKEY23CDT 0x0A05000F
+ // 16 entities in TXTs, 16 in datafiles.
+ // room24
+#define R24L0 0x0A060000
+#define R24L1 0x0A060001
+#define R24G1 0x0A060002
+#define R24PLX 0x0A060003
+#define R24PAL 0x0A060004
+#define R24FLR 0x0A060005
+#define GEOASC24 0x0A060006
+#define GEOASC24CDT 0x0A060007
+#define GEODES24 0x0A060008
+#define GEODES24CDT 0x0A060009
+#define GEOHITL 0x0A06000A
+#define GEOHITLCDT 0x0A06000B
+#define GEOHITR 0x0A06000C
+#define GEOHITRCDT 0x0A06000D
+#define GEOLAD 0x0A06000E
+#define GEOLADCDT 0x0A06000F
+#define GEOLAD8 0x0A060010
+#define GEOLAD8CDT 0x0A060011
+#define GEOPLW 0x0A060012
+#define GEOPLWCDT 0x0A060013
+#define GEORUN 0x0A060014
+#define GEORUNCDT 0x0A060015
+#define GEOUPL24 0x0A060016
+#define GEOUPL24CDT 0x0A060017
+#define GEOUPR24 0x0A060018
+#define GEOUPR24CDT 0x0A060019
+#define GOTBAKL 0x0A06001A
+#define GOTBAKLCDT 0x0A06001B
+#define GOTBAKR 0x0A06001C
+#define GOTBAKRCDT 0x0A06001D
+#define GOTCL 0x0A06001E
+#define GOTCLCDT 0x0A06001F
+#define GOTCR 0x0A060020
+#define GOTCRCDT 0x0A060021
+#define GOTEAT 0x0A060022
+#define GOTEATCDT 0x0A060023
+#define GOTPLW 0x0A060024
+#define GOTPLWCDT 0x0A060025
+#define GOTPLW1 0x0A060026
+#define GOTPLW1CDT 0x0A060027
+#define GOTRIS 0x0A060028
+#define GOTRISCDT 0x0A060029
+#define GOTRISCDR 0x0A06002A
+#define PLWMOV 0x0A06002B
+#define PLWMOVCDT 0x0A06002C
+ // 45 entities in TXTs, 45 in datafiles.
+ // room25
+#define R25SPRPAL 0x0A070000
+#define R25L0 0x0A070001
+#define R25L1 0x0A070002
+#define R25G1 0x0A070003
+#define R25PAL 0x0A070004
+#define R25FLR 0x0A070005
+#define ALTOPN 0x0A070006
+#define ALTOPNCDT 0x0A070007
+#define GEOASC25 0x0A070008
+#define GEOASC25CDT 0x0A070009
+#define GEOCLM25 0x0A07000A
+#define GEOCLM25CDT 0x0A07000B
+#define GEODES25 0x0A07000C
+#define GEODES25CDT 0x0A07000D
+#define GEODRY25 0x0A07000E
+#define GEODRY25CDT 0x0A07000F
+#define GEOFIN25 0x0A070010
+#define GEOFIN25CDT 0x0A070011
+#define GEOPLAS 0x0A070012
+#define GEOPLASCDT 0x0A070013
+#define GEOPLASCDR 0x0A070014
+#define GEOPLS 0x0A070015
+#define GEOPLSCDT 0x0A070016
+#define GEOPSH25 0x0A070017
+#define GEOPSH25CDT 0x0A070018
+#define GEOPUT 0x0A070019
+#define GEOPUTCDT 0x0A07001A
+#define GEOSAC 0x0A07001B
+#define GEOSACCDT 0x0A07001C
+#define GEOSAC25 0x0A07001D
+#define GEOSAC25CDT 0x0A07001E
+#define GEOSTD25 0x0A07001F
+#define GEOSTD25CDT 0x0A070020
+#define GEOSTN 0x0A070021
+#define GEOSTNCDT 0x0A070022
+#define GEOSTN8 0x0A070023
+#define GEOSTN8CDT 0x0A070024
+#define GEOTWL25 0x0A070025
+#define GEOTWL25CDT 0x0A070026
+#define GEOWALF2 0x0A070027
+#define GEOWALF2CDT 0x0A070028
+#define IMPFLR 0x0A070029
+#define IMPFLRCDT 0x0A07002A
+#define IMPPLS 0x0A07002B
+#define IMPPLSCDT 0x0A07002C
+#define PLASWALL 0x0A07002D
+#define PLASWALLCDT 0x0A07002E
+#define STNFALL 0x0A07002F
+#define STNFALLCDT 0x0A070030
+ // 49 entities in TXTs, 49 in datafiles.
+ // room26
+#define R26SPRPAL 0x0A080000
+#define R26L0 0x0A080001
+#define R26L1 0x0A080002
+#define R26L2 0x0A080003
+#define R26G1 0x0A080004
+#define R26G2 0x0A080005
+#define R26PAL 0x0A080006
+#define R26FLR 0x0A080007
+#define GEOLVR08 0x0A080008
+#define GEOLVR08CDT 0x0A080009
+#define GEOLVR26 0x0A08000A
+#define GEOLVR26CDT 0x0A08000B
+#define LVRDRK 0x0A08000C
+#define LVRDRKCDT 0x0A08000D
+#define RATJMP 0x0A08000E
+#define RATJMPCDT 0x0A08000F
+ // 16 entities in TXTs, 16 in datafiles.
+// spain
+ // sound_fx
+#define FX_SPNBIRD1 0x0B000000
+#define FX_SPNBIRD2 0x0B000001
+#define FX_AMBIEN56 0x0B000002
+#define FX_DOGS56 0x0B000003
+#define FX_PENDULUM 0x0B000004
+#define FX_CANFALL 0x0B000005
+#define FX_HOSE57 0x0B000006
+#define FX_HOSE57B 0x0B000007
+#define FX_SPAIN 0x0B000008
+#define FX_CHESS 0x0B000009
+#define FX_SECDOR59 0x0B00000A
+#define FX_WINDOW59 0x0B00000B
+#define FX_LIONFALL 0x0B00000C
+#define FX_LIONFAL2 0x0B00000D
+#define FX_TOOTHPUL 0x0B00000E
+#define FX_SECDOR61 0x0B00000F
+#define FX_WELLDRIP 0x0B000010
+ // 17 entities in TXTs, 17 in datafiles.
+ // room56
+#define SPAIN_PAL 0x0B010000
+#define R56L0 0x0B010001
+#define R56L1 0x0B010002
+#define R56L2 0x0B010003
+#define R56G1 0x0B010004
+#define R56G2 0x0B010005
+#define R56PAL 0x0B010006
+#define R56FLR 0x0B010007
+#define CHALIC56 0x0B010008
+#define CHALIC56CDT 0x0B010009
+#define GARD20 0x0B01000A
+#define GARD20CDT 0x0B01000B
+#define GARD21 0x0B01000C
+#define GARD21CDT 0x0B01000D
+#define GARD22 0x0B01000E
+#define GARD22CDT 0x0B01000F
+#define GEOSPA10 0x0B010010
+#define GEOSPA10CDT 0x0B010011
+#define GEOSPA10CDR 0x0B010012
+#define GEOSPA11 0x0B010013
+#define GEOSPA11CDT 0x0B010014
+#define GEOSPA13 0x0B010015
+#define GEOSPA13CDT 0x0B010016
+#define GEOSPA13CDR 0x0B010017
+#define GEOSPA19 0x0B010018
+#define GEOSPA19CDT 0x0B010019
+#define GEOSPA44 0x0B01001A
+#define GEOSPA44CDT 0x0B01001B
+#define GEOSPA48 0x0B01001C
+#define GEOSPA48CDT 0x0B01001D
+#define PENDULUM 0x0B01001E
+#define PENDULUMCDT 0x0B01001F
+#define PIECE56 0x0B010020
+#define PIECE56CDT 0x0B010021
+#define VASC01 0x0B010022
+#define VASC01CDT 0x0B010023
+#define VASC02 0x0B010024
+#define VASC02CDT 0x0B010025
+#define VASC04 0x0B010026
+#define VASC04CDT 0x0B010027
+#define VASC05 0x0B010028
+#define VASC05CDT 0x0B010029
+#define VASC05CDR 0x0B01002A
+#define VASC06 0x0B01002B
+#define VASC06CDT 0x0B01002C
+#define VASC26 0x0B01002D
+#define VASC26CDT 0x0B01002E
+#define VASC26CDR 0x0B01002F
+#define VASC27 0x0B010030
+#define VASC27CDT 0x0B010031
+#define VASC28 0x0B010032
+#define VASC28CDT 0x0B010033
+#define VASC29 0x0B010034
+#define VASC29CDT 0x0B010035
+#define VASC29CDR 0x0B010036
+#define VASC30 0x0B010037
+#define VASC30CDT 0x0B010038
+#define VASC30CDR 0x0B010039
+#define VASC32 0x0B01003A
+#define VASC32CDT 0x0B01003B
+ // 60 entities in TXTs, 60 in datafiles.
+ // room57
+#define R57L0 0x0B020000
+#define R57L1 0x0B020001
+#define R57G1 0x0B020002
+#define R57PAL 0x0B020003
+#define R57FLR 0x0B020004
+#define R57PLX 0x0B020005
+#define MEGA_DOWSE 0x0B020006
+#define GAR57GOB 0x0B020007
+#define GAR57GOBCDT 0x0B020008
+#define GARD01 0x0B020009
+#define GARD01CDT 0x0B02000A
+#define GARD02 0x0B02000B
+#define GARD02CDT 0x0B02000C
+#define GARD03 0x0B02000D
+#define GARD03CDT 0x0B02000E
+#define GARD04 0x0B02000F
+#define GARD04CDT 0x0B020010
+#define GARD04CDR 0x0B020011
+#define GARD05 0x0B020012
+#define GARD05CDT 0x0B020013
+#define GARD06 0x0B020014
+#define GARD06CDT 0x0B020015
+#define GARD07 0x0B020016
+#define GARD07CDT 0x0B020017
+#define GARD07CDR 0x0B020018
+#define GARD08 0x0B020019
+#define GARD08CDT 0x0B02001A
+#define GARD09 0x0B02001B
+#define GARD09CDT 0x0B02001C
+#define GARD17 0x0B02001D
+#define GARD17CDT 0x0B02001E
+#define GARD17CDR 0x0B02001F
+#define GARD18 0x0B020020
+#define GARD18CDT 0x0B020021
+#define GARD31 0x0B020022
+#define GARD31CDT 0x0B020023
+#define GARD31CDR 0x0B020024
+#define GARD32 0x0B020025
+#define GARD32CDT 0x0B020026
+#define GARD34 0x0B020027
+#define GARD34CDT 0x0B020028
+#define GARD35 0x0B020029
+#define GARD35CDT 0x0B02002A
+#define GARD36 0x0B02002B
+#define GARD36CDT 0x0B02002C
+#define GARD37 0x0B02002D
+#define GARD37CDT 0x0B02002E
+#define GARD38 0x0B02002F
+#define GARD38CDT 0x0B020030
+#define GARD39 0x0B020031
+#define GARD39CDT 0x0B020032
+#define GARD40 0x0B020033
+#define GARD40CDT 0x0B020034
+#define GARD40CDR 0x0B020035
+#define GARD41 0x0B020036
+#define GARD41CDT 0x0B020037
+#define GARD42 0x0B020038
+#define GARD42CDT 0x0B020039
+#define GARD43 0x0B02003A
+#define GARD43CDT 0x0B02003B
+#define GARD44 0x0B02003C
+#define GARD44CDT 0x0B02003D
+#define GARD44CDR 0x0B02003E
+#define GARD45 0x0B02003F
+#define GARD45CDT 0x0B020040
+#define GARDKNE 0x0B020041
+#define GARDKNECDT 0x0B020042
+#define GAUGE57 0x0B020043
+#define GAUGE57CDT 0x0B020044
+#define GEOSPA01 0x0B020045
+#define GEOSPA01CDT 0x0B020046
+#define GEOSPA20 0x0B020047
+#define GEOSPA20CDT 0x0B020048
+#define GEOSPA22 0x0B020049
+#define GEOSPA22CDT 0x0B02004A
+#define GEOSPA42 0x0B02004B
+#define GEOSPA42CDT 0x0B02004C
+#define GEOSPA47 0x0B02004D
+#define GEOSPA47CDT 0x0B02004E
+#define HOLE57 0x0B02004F
+#define HOLE57CDT 0x0B020050
+#define HOSE57 0x0B020051
+#define HOSE57CDT 0x0B020052
+ // 83 entities in TXTs, 83 in datafiles.
+ // room58
+#define R58L0 0x0B030000
+#define R58L1 0x0B030001
+#define R58G1 0x0B030002
+#define R58PAL 0x0B030003
+#define R58FLR 0x0B030004
+#define R58PLX 0x0B030005
+#define GARD24 0x0B030006
+#define GARD24CDT 0x0B030007
+#define GARD25 0x0B030008
+#define GARD25CDT 0x0B030009
+#define GARD26 0x0B03000A
+#define GARD26CDT 0x0B03000B
+#define MAUSDOOR 0x0B03000C
+#define MAUSDOORCDT 0x0B03000D
+#define VASC07 0x0B03000E
+#define VASC07CDT 0x0B03000F
+#define VASC08 0x0B030010
+#define VASC08CDT 0x0B030011
+#define VASC09 0x0B030012
+#define VASC09CDT 0x0B030013
+#define VASC10 0x0B030014
+#define VASC10CDT 0x0B030015
+#define VASC11 0x0B030016
+#define VASC11CDT 0x0B030017
+#define VASC12 0x0B030018
+#define VASC12CDT 0x0B030019
+ // 26 entities in TXTs, 26 in datafiles.
+ // room59
+#define R59L0 0x0B040000
+#define R59L1 0x0B040001
+#define R59L2 0x0B040002
+#define R59G1 0x0B040003
+#define R59G2 0x0B040004
+#define R59PAL 0x0B040005
+#define R59FLR 0x0B040006
+#define BIBLE59 0x0B040007
+#define BIBLE59CDT 0x0B040008
+#define BLOWOUT 0x0B040009
+#define BLOWOUTCDT 0x0B04000A
+#define CANDLE59 0x0B04000B
+#define CANDLE59CDT 0x0B04000C
+#define CHAL59 0x0B04000D
+#define CHAL59CDT 0x0B04000E
+#define FLAMEL59 0x0B04000F
+#define FLAMEL59CDT 0x0B040010
+#define FLAMER59 0x0B040011
+#define FLAMER59CDT 0x0B040012
+#define FLAMET59 0x0B040013
+#define FLAMET59CDT 0x0B040014
+#define GARD27 0x0B040015
+#define GARD27CDT 0x0B040016
+#define GARD28 0x0B040017
+#define GARD28CDT 0x0B040018
+#define GARD29 0x0B040019
+#define GARD29CDT 0x0B04001A
+#define GARD30 0x0B04001B
+#define GARD30CDT 0x0B04001C
+#define GEOBIBLE 0x0B04001D
+#define GEOBIBLECDT 0x0B04001E
+#define GEOSPA12 0x0B04001F
+#define GEOSPA12CDT 0x0B040020
+#define GEOSPA16 0x0B040021
+#define GEOSPA16CDT 0x0B040022
+#define GEOSPA17 0x0B040023
+#define GEOSPA17CDT 0x0B040024
+#define GEOSPA18 0x0B040025
+#define GEOSPA18CDT 0x0B040026
+#define GEOSPA18CDR 0x0B040027
+#define GEOSPA23 0x0B040028
+#define GEOSPA23CDT 0x0B040029
+#define GEOSPA23CDR 0x0B04002A
+#define GEOSPA37 0x0B04002B
+#define GEOSPA37CDT 0x0B04002C
+#define GEOSPA37CDR 0x0B04002D
+#define GEOSPA38 0x0B04002E
+#define GEOSPA38CDT 0x0B04002F
+#define GEOSPA39 0x0B040030
+#define GEOSPA39CDT 0x0B040031
+#define GEOSPA40 0x0B040032
+#define GEOSPA40CDT 0x0B040033
+#define GEOSPA41 0x0B040034
+#define GEOSPA41CDT 0x0B040035
+#define GEOSPA43 0x0B040036
+#define GEOSPA43CDT 0x0B040037
+#define GEOSPA45 0x0B040038
+#define GEOSPA45CDT 0x0B040039
+#define GEOSPA46 0x0B04003A
+#define GEOSPA46CDT 0x0B04003B
+#define SECDOR59 0x0B04003C
+#define SECDOR59CDT 0x0B04003D
+#define SNUFF59 0x0B04003E
+#define SNUFF59CDT 0x0B04003F
+#define TISSUE59 0x0B040040
+#define TISSUE59CDT 0x0B040041
+#define VASC13 0x0B040042
+#define VASC13CDT 0x0B040043
+#define VASC14 0x0B040044
+#define VASC14CDT 0x0B040045
+#define VASC15 0x0B040046
+#define VASC15CDT 0x0B040047
+#define VASC16 0x0B040048
+#define VASC16CDT 0x0B040049
+#define VASC17 0x0B04004A
+#define VASC17CDT 0x0B04004B
+#define VASC18 0x0B04004C
+#define VASC18CDT 0x0B04004D
+#define VASC19 0x0B04004E
+#define VASC19CDT 0x0B04004F
+#define VASC20 0x0B040050
+#define VASC20CDT 0x0B040051
+#define VASC20CDR 0x0B040052
+#define VASC21 0x0B040053
+#define VASC21CDT 0x0B040054
+#define VASC22 0x0B040055
+#define VASC22CDT 0x0B040056
+#define VASC23 0x0B040057
+#define VASC23CDT 0x0B040058
+#define VASC24 0x0B040059
+#define VASC24CDT 0x0B04005A
+#define VASC25 0x0B04005B
+#define VASC25CDT 0x0B04005C
+#define VASC31 0x0B04005D
+#define VASC31CDT 0x0B04005E
+#define WINDSHUT 0x0B04005F
+#define WINDSHUTCDT 0x0B040060
+#define WINDSHUTCDR 0x0B040061
+ // 98 entities in TXTs, 98 in datafiles.
+ // room60
+#define R60L0 0x0B050000
+#define R60L1 0x0B050001
+#define R60L2 0x0B050002
+#define R60G1 0x0B050003
+#define R60G2 0x0B050004
+#define R60PAL 0x0B050005
+#define R60FLR 0x0B050006
+#define GARD10 0x0B050007
+#define GARD10CDT 0x0B050008
+#define GARD11 0x0B050009
+#define GARD11CDT 0x0B05000A
+#define GARD13 0x0B05000B
+#define GARD13CDT 0x0B05000C
+#define GARD16 0x0B05000D
+#define GARD16CDT 0x0B05000E
+#define GARD19 0x0B05000F
+#define GARD19CDT 0x0B050010
+#define GEOSPA05 0x0B050011
+#define GEOSPA05CDT 0x0B050012
+#define GEOSPA05CDR 0x0B050013
+#define GEOSPA08 0x0B050014
+#define GEOSPA08CDT 0x0B050015
+#define GEOSPA09 0x0B050016
+#define GEOSPA09CDT 0x0B050017
+#define GEOSPA09CDR 0x0B050018
+#define GEOSPA21 0x0B050019
+#define GEOSPA21CDT 0x0B05001A
+#define MIRROR60 0x0B05001B
+#define MIRROR60CDT 0x0B05001C
+ // 29 entities in TXTs, 29 in datafiles.
+ // room61
+#define R61L0 0x0B060000
+#define R61L1 0x0B060001
+#define R61G1 0x0B060002
+#define R61PAL 0x0B060003
+#define R61FLR 0x0B060004
+#define DUST 0x0B060005
+#define DUSTCDT 0x0B060006
+#define GEOSPA24 0x0B060007
+#define GEOSPA24CDT 0x0B060008
+#define GEOSPA25 0x0B060009
+#define GEOSPA25CDT 0x0B06000A
+#define GEOSPA26 0x0B06000B
+#define GEOSPA26CDT 0x0B06000C
+#define GEOSPA27 0x0B06000D
+#define GEOSPA27CDT 0x0B06000E
+#define GEOSPA30 0x0B06000F
+#define GEOSPA30CDT 0x0B060010
+#define GEOSPA31 0x0B060011
+#define GEOSPA31CDT 0x0B060012
+#define GEOSPA32 0x0B060013
+#define GEOSPA32CDT 0x0B060014
+#define GEOSPA33 0x0B060015
+#define GEOSPA33CDT 0x0B060016
+#define GEOSPA35 0x0B060017
+#define GEOSPA35CDT 0x0B060018
+#define LION1 0x0B060019
+#define LION1CDT 0x0B06001A
+#define LION2 0x0B06001B
+#define LION2CDT 0x0B06001C
+#define LIONDOOR 0x0B06001D
+#define LIONDOORCDT 0x0B06001E
+#define LIONFLOR 0x0B06001F
+#define LIONFLORCDT 0x0B060020
+#define ROPE61 0x0B060021
+#define ROPE61CDT 0x0B060022
+#define SECDOR61 0x0B060023
+#define SECDOR61CDT 0x0B060024
+ // 37 entities in TXTs, 37 in datafiles.
+ // room62
+#define R62L0 0x0B070000
+#define R62PAL 0x0B070001
+#define BISHOP62 0x0B070002
+#define BISHOP62CDT 0x0B070003
+#define KING62 0x0B070004
+#define KING62CDT 0x0B070005
+#define KNIGHT62 0x0B070006
+#define KNIGHT62CDT 0x0B070007
+ // 8 entities in TXTs, 8 in datafiles.
+// syria
+ // sound_fx
+#define FX_CAMERA45 0x0C000000
+#define FX_SHOCK3 0x0C000001
+#define FX_STALLBEL 0x0C000002
+#define FX_AYUBDOOR 0x0C000003
+#define FX_BALLPLAY 0x0C000004
+#define FX_CATHIT 0x0C000005
+#define FX_MARIB 0x0C000006
+#define FX_NEWTON 0x0C000007
+#define FX_STALLCAT 0x0C000008
+#define FX_STATBREK 0x0C000009
+#define FX_KEYS49 0x0C00000A
+#define FX_MANG1 0x0C00000B
+#define FX_MANG2 0x0C00000C
+#define FX_MANG3 0x0C00000D
+#define FX_UNLOCK49 0x0C00000E
+#define FX_WCCHAIN 0x0C00000F
+#define FX_CUBDOR 0x0C000010
+#define FX_BREKSTIK 0x0C000011
+#define FX_CLIMBDWN 0x0C000012
+#define FX_CRICKET 0x0C000013
+#define FX_GEOFAL54 0x0C000014
+#define FX_KHANDOWN 0x0C000015
+#define FX_RINGPULL 0x0C000016
+#define FX_SECDOR54 0x0C000017
+#define FX_SHOTKHAN 0x0C000018
+#define FX_SYRIWIND 0x0C000019
+#define FX_THUMP1 0x0C00001A
+#define FX_SECDOR55 0x0C00001B
+ // 28 entities in TXTs, 28 in datafiles.
+ // duane
+#define DUANE_MEGA 0x0C010000
+#define DUANE_WLK 0x0C010001
+#define DNETLK3 0x0C010002
+#define DNETLK3CDT 0x0C010003
+#define DNETLK5 0x0C010004
+#define DNETLK5CDT 0x0C010005
+#define XDNEMON3 0x0C010006
+#define XDNEMON3CDT 0x0C010007
+#define XDNEMON5 0x0C010008
+#define XDNEMON5CDT 0x0C010009
+#define XDNESTA3 0x0C01000A
+#define XDNESTA3CDT 0x0C01000B
+#define XDNESTA5 0x0C01000C
+#define XDNESTA5CDT 0x0C01000D
+#define XDNEPHO3 0x0C01000E
+#define XDNEPHO3CDT 0x0C01000F
+#define XDNEPHO5 0x0C010010
+#define XDNEPHO5CDT 0x0C010011
+ // 18 entities in TXTs, 18 in datafiles.
+ // room45
+#define SYRIA_PAL 0x0C020000
+#define R45SPRPAL 0x0C020001
+#define R45L0 0x0C020002
+#define R45L1 0x0C020003
+#define R45G1 0x0C020004
+#define R45PAL 0x0C020005
+#define R45FLR 0x0C020006
+#define R45PLX 0x0C020007
+#define ART1 0x0C020008
+#define ART1CDT 0x0C020009
+#define ART2 0x0C02000A
+#define ART2CDT 0x0C02000B
+#define ART3A 0x0C02000C
+#define ART3ACDT 0x0C02000D
+#define ART3ACDR 0x0C02000E
+#define ART4 0x0C02000F
+#define ART4CDT 0x0C020010
+#define ART5 0x0C020011
+#define ART5CDT 0x0C020012
+#define ART6 0x0C020013
+#define ART6CDT 0x0C020014
+#define ART7 0x0C020015
+#define ART7CDT 0x0C020016
+#define AYU1 0x0C020017
+#define AYU1CDT 0x0C020018
+#define AYU1A 0x0C020019
+#define AYU1ACDT 0x0C02001A
+#define AYU1B 0x0C02001B
+#define AYU1BCDT 0x0C02001C
+#define AYU5 0x0C02001D
+#define AYU5CDT 0x0C02001E
+#define BRUSH 0x0C02001F
+#define BRUSHCDT 0x0C020020
+#define CAT1 0x0C020021
+#define CAT1CDT 0x0C020022
+#define CAT3 0x0C020023
+#define CAT3CDT 0x0C020024
+#define CAT4 0x0C020025
+#define CAT4CDT 0x0C020026
+#define CAT5 0x0C020027
+#define CAT5CDT 0x0C020028
+#define GEOCHA 0x0C020029
+#define GEOCHACDT 0x0C02002A
+#define GEOSYR1 0x0C02002B
+#define GEOSYR1CDT 0x0C02002C
+#define GEOSYR10 0x0C02002D
+#define GEOSYR10CDT 0x0C02002E
+#define GEOSYR10CDR 0x0C02002F
+#define GEOSYR18 0x0C020030
+#define GEOSYR18CDT 0x0C020031
+#define GEOSYR2 0x0C020032
+#define GEOSYR2CDT 0x0C020033
+#define GEOSYR5 0x0C020034
+#define GEOSYR5CDT 0x0C020035
+#define GEOSYR6 0x0C020036
+#define GEOSYR6CDT 0x0C020037
+#define GEOSYR7 0x0C020038
+#define GEOSYR7CDT 0x0C020039
+#define NEJ1 0x0C02003A
+#define NEJ1CDT 0x0C02003B
+#define NEJ10 0x0C02003C
+#define NEJ10CDT 0x0C02003D
+#define NEJ12 0x0C02003E
+#define NEJ12CDT 0x0C02003F
+#define NEJ13 0x0C020040
+#define NEJ13CDT 0x0C020041
+#define NEJ13CDR 0x0C020042
+#define NEJ2 0x0C020043
+#define NEJ2CDT 0x0C020044
+#define NEJ2B 0x0C020045
+#define NEJ2BCDT 0x0C020046
+#define NEJ4 0x0C020047
+#define NEJ4CDT 0x0C020048
+#define NEJ6 0x0C020049
+#define NEJ6CDT 0x0C02004A
+#define NEJ7 0x0C02004B
+#define NEJ7CDT 0x0C02004C
+#define NEJ7B 0x0C02004D
+#define NEJ7BCDT 0x0C02004E
+#define NEJ8 0x0C02004F
+#define NEJ8CDT 0x0C020050
+#define NEJ9 0x0C020051
+#define NEJ9CDT 0x0C020052
+#define NEWTON 0x0C020053
+#define NEWTONCDT 0x0C020054
+#define PRL1 0x0C020055
+#define PRL1CDT 0x0C020056
+#define PRL2 0x0C020057
+#define PRL2CDT 0x0C020058
+#define PRL6 0x0C020059
+#define PRL6CDT 0x0C02005A
+#define PRL7 0x0C02005B
+#define PRL7CDT 0x0C02005C
+#define PRL8 0x0C02005D
+#define PRL8CDT 0x0C02005E
+#define SHO1 0x0C02005F
+#define SHO1CDT 0x0C020060
+#define SHO2 0x0C020061
+#define SHO2CDT 0x0C020062
+#define SHT1 0x0C020063
+#define SHT1CDT 0x0C020064
+#define SHT2 0x0C020065
+#define SHT2CDT 0x0C020066
+#define SHT3 0x0C020067
+#define SHT3CDT 0x0C020068
+#define STA2 0x0C020069
+#define STA2CDT 0x0C02006A
+#define STEAM45 0x0C02006B
+#define STEAM45CDT 0x0C02006C
+#define TRUCK45 0x0C02006D
+#define TRUCK45CDT 0x0C02006E
+#define TRUCKEMP 0x0C02006F
+#define TRUCKEMPCDT 0x0C020070
+#define ULT6 0x0C020071
+#define ULT6CDT 0x0C020072
+#define ULT7 0x0C020073
+#define ULT7CDT 0x0C020074
+#define ULT8 0x0C020075
+#define ULT8CDT 0x0C020076
+#define ULT9 0x0C020077
+#define ULT9CDT 0x0C020078
+#define XGEOMON3 0x0C020079
+#define XGEOMON3CDT 0x0C02007A
+#define XGEOMON5 0x0C02007B
+#define XGEOMON5CDT 0x0C02007C
+#define XGEOSTA3 0x0C02007D
+#define XGEOSTA3CDT 0x0C02007E
+#define XGEOSTA5 0x0C02007F
+#define XGEOSTA5CDT 0x0C020080
+#define XGEOSTAT 0x0C020081
+#define XGEOSTATCDT 0x0C020082
+ // 131 entities in TXTs, 131 in datafiles.
+ // room47
+#define R47L0 0x0C030000
+#define R47L1 0x0C030001
+#define R47L2 0x0C030002
+#define R47G1 0x0C030003
+#define R47G2 0x0C030004
+#define R47PAL 0x0C030005
+#define R47FLR 0x0C030006
+#define CAR1 0x0C030007
+#define CAR1CDT 0x0C030008
+#define CAR2 0x0C030009
+#define CAR2CDT 0x0C03000A
+#define CAR3 0x0C03000B
+#define CAR3CDT 0x0C03000C
+#define CAR4 0x0C03000D
+#define CAR4CDT 0x0C03000E
+#define CAR5 0x0C03000F
+#define CAR5CDT 0x0C030010
+#define CAR6 0x0C030011
+#define CAR6CDT 0x0C030012
+#define CRPMOV 0x0C030013
+#define CRPMOVCDT 0x0C030014
+#define GEOSYR3 0x0C030015
+#define GEOSYR3CDT 0x0C030016
+#define GEOSYR3A 0x0C030017
+#define GEOSYR3ACDT 0x0C030018
+#define GEOSYR4 0x0C030019
+#define GEOSYR4CDT 0x0C03001A
+#define GEOSYR4A 0x0C03001B
+#define GEOSYR4ACDT 0x0C03001C
+ // 29 entities in TXTs, 29 in datafiles.
+ // room49
+#define R49L0 0x0C040000
+#define R49L1 0x0C040001
+#define R49L2 0x0C040002
+#define R49G1 0x0C040003
+#define R49G2 0x0C040004
+#define R49PAL 0x0C040005
+#define R49FLR 0x0C040006
+#define DOOR49 0x0C040007
+#define DOOR49CDT 0x0C040008
+#define DOOR49CDR 0x0C040009
+#define GEOKEYS1 0x0C04000A
+#define GEOKEYS1CDT 0x0C04000B
+#define GEOSYR43 0x0C04000C
+#define GEOSYR43CDT 0x0C04000D
+#define KEYS 0x0C04000E
+#define KEYSCDT 0x0C04000F
+#define MAN1 0x0C040010
+#define MAN1CDT 0x0C040011
+#define MAN2 0x0C040012
+#define MAN2CDT 0x0C040013
+#define MAN3 0x0C040014
+#define MAN3CDT 0x0C040015
+#define MAN4 0x0C040016
+#define MAN4CDT 0x0C040017
+#define MAN4A 0x0C040018
+#define MAN4ACDT 0x0C040019
+#define ULT10 0x0C04001A
+#define ULT10CDT 0x0C04001B
+#define ULT15 0x0C04001C
+#define ULT15CDT 0x0C04001D
+#define ULT3 0x0C04001E
+#define ULT3CDT 0x0C04001F
+#define ULTTAK 0x0C040020
+#define ULTTAKCDT 0x0C040021
+ // 34 entities in TXTs, 34 in datafiles.
+ // room50
+#define R50L0 0x0C050000
+#define R50L1 0x0C050001
+#define R50L2 0x0C050002
+#define R50L3 0x0C050003
+#define R50G1 0x0C050004
+#define R50G2 0x0C050005
+#define R50G3 0x0C050006
+#define R50PAL 0x0C050007
+#define R50FLR 0x0C050008
+#define CHAIN50 0x0C050009
+#define CHAIN50CDT 0x0C05000A
+#define CUBDOR50 0x0C05000B
+#define CUBDOR50CDT 0x0C05000C
+#define DOOR50 0x0C05000D
+#define DOOR50CDT 0x0C05000E
+#define DOOR50CDR 0x0C05000F
+#define GEOSYR48 0x0C050010
+#define GEOSYR48CDT 0x0C050011
+#define GEOSYR49 0x0C050012
+#define GEOSYR49CDT 0x0C050013
+#define GEOSYR50 0x0C050014
+#define GEOSYR50CDT 0x0C050015
+#define GEOSYR51 0x0C050016
+#define GEOSYR51CDT 0x0C050017
+#define GEOSYR51CDR 0x0C050018
+#define GEOSYR52 0x0C050019
+#define GEOSYR52CDT 0x0C05001A
+#define GEOSYR53 0x0C05001B
+#define GEOSYR53CDT 0x0C05001C
+#define GEOSYR54 0x0C05001D
+#define GEOSYR54CDT 0x0C05001E
+#define TOWEL1 0x0C05001F
+#define TOWEL1CDT 0x0C050020
+#define TOWEL4 0x0C050021
+#define TOWEL4CDT 0x0C050022
+ // 35 entities in TXTs, 35 in datafiles.
+ // room53
+#define R53L0 0x0C060000
+#define R53PAL 0x0C060001
+#define BACK53PLX 0x0C060002
+#define FRONT53PLX 0x0C060003
+#define R53SPRPAL 0x0C060004
+ // 5 entities in TXTs, 5 in datafiles.
+ // room54
+#define R54L0 0x0C070000
+#define R54L1 0x0C070001
+#define R54G1 0x0C070002
+#define R54PAL 0x0C070003
+#define R54FLR 0x0C070004
+#define R54PLX 0x0C070005
+#define GEOSYR19 0x0C070006
+#define GEOSYR19CDT 0x0C070007
+#define GEOSYR20 0x0C070008
+#define GEOSYR20CDT 0x0C070009
+#define GEOSYR22 0x0C07000A
+#define GEOSYR22CDT 0x0C07000B
+#define GEOSYR23 0x0C07000C
+#define GEOSYR23CDT 0x0C07000D
+#define GEOSYR25 0x0C07000E
+#define GEOSYR25CDT 0x0C07000F
+#define GEOSYR26 0x0C070010
+#define GEOSYR26CDT 0x0C070011
+#define GEOSYR27 0x0C070012
+#define GEOSYR27CDT 0x0C070013
+#define GEOSYR37 0x0C070014
+#define GEOSYR37CDT 0x0C070015
+#define GEOSYR39 0x0C070016
+#define GEOSYR39CDT 0x0C070017
+#define GEOSYR40 0x0C070018
+#define GEOSYR40CDT 0x0C070019
+#define GEOSYR41 0x0C07001A
+#define GEOSYR41CDT 0x0C07001B
+#define GEOSYR42 0x0C07001C
+#define GEOSYR42CDT 0x0C07001D
+#define GEOSYR99 0x0C07001E
+#define GEOSYR99CDT 0x0C07001F
+#define GUN54 0x0C070020
+#define GUN54CDT 0x0C070021
+#define KHS10 0x0C070022
+#define KHS10CDT 0x0C070023
+#define KHS12 0x0C070024
+#define KHS12CDT 0x0C070025
+#define KHS5 0x0C070026
+#define KHS5CDT 0x0C070027
+#define KHS7 0x0C070028
+#define KHS7CDT 0x0C070029
+#define KHS8 0x0C07002A
+#define KHS8CDT 0x0C07002B
+#define KHS9 0x0C07002C
+#define KHS9CDT 0x0C07002D
+#define KHSTLK54 0x0C07002E
+#define KHSTLK54CDT 0x0C07002F
+#define SECDOR 0x0C070030
+#define SECDORCDT 0x0C070031
+#define STCKTREE 0x0C070032
+#define STCKTREECDT 0x0C070033
+#define STICKIN 0x0C070034
+#define STICKINCDT 0x0C070035
+#define XGEOSY21 0x0C070036
+#define XGEOSY21CDT 0x0C070037
+ // 56 entities in TXTs, 56 in datafiles.
+ // room55
+#define R55SPRPAL 0x0C080000
+#define R55L0 0x0C080001
+#define R55PAL 0x0C080002
+#define R55FLR 0x0C080003
+#define R55PLX 0x0C080004
+#define BODY55 0x0C080005
+#define BODY55CDT 0x0C080006
+#define BRITMAP 0x0C080007
+#define BRITMAP_PAL 0x0C080008
+#define DOOR55 0x0C080009
+#define DOOR55CDT 0x0C08000A
+#define DOOR55CDR 0x0C08000B
+#define GEOSY30T 0x0C08000C
+#define GEOSY30TCDT 0x0C08000D
+#define GEOSY30U 0x0C08000E
+#define GEOSY30UCDT 0x0C08000F
+#define GEOSYR29 0x0C080010
+#define GEOSYR29CDT 0x0C080011
+#define GEOSYR30 0x0C080012
+#define GEOSYR30CDT 0x0C080013
+#define GEOSYR31 0x0C080014
+#define GEOSYR31CDT 0x0C080015
+#define GEOSYR33 0x0C080016
+#define GEOSYR33CDT 0x0C080017
+#define GEOSYR34 0x0C080018
+#define GEOSYR34CDT 0x0C080019
+#define GEOSYR34CDR 0x0C08001A
+#define GEOSYR35 0x0C08001B
+#define GEOSYR35CDT 0x0C08001C
+#define GEOSYR56 0x0C08001D
+#define GEOSYR56CDT 0x0C08001E
+#define KHS2 0x0C08001F
+#define KHS2CDT 0x0C080020
+#define KHS3 0x0C080021
+#define KHS3CDT 0x0C080022
+#define KHS6 0x0C080023
+#define KHS6CDT 0x0C080024
+ // 37 entities in TXTs, 37 in datafiles.
+// train
+ // sound_fx
+#define FX_SHOCK63 0x0D000000
+#define FX_TRAINEXT 0x0D000001
+#define FX_TRAININT 0x0D000002
+#define FX_DOOR65 0x0D000003
+#define FX_WIND66 0x0D000004
+#define FX_WINDOW66 0x0D000005
+#define FX_BRAKES 0x0D000006
+#define FX_DOOR69 0x0D000007
+#define FX_EKSHOOT 0x0D000008
+#define FX_FIGHT69 0x0D000009
+#define FX_PNEUMO69 0x0D00000A
+#define FX_TICK69 0x0D00000B
+#define FX_TRNPASS 0x0D00000C
+ // 13 entities in TXTs, 13 in datafiles.
+ // room63
+#define TRAIN_PAL 0x0D010000
+#define R63L0 0x0D010001
+#define R63L1 0x0D010002
+#define R63G1 0x0D010003
+#define R63PAL 0x0D010004
+#define R63FLR 0x0D010005
+#define GEOTRAIN_MEGA 0x0D010006
+#define GEOTRAIN_WLK 0x0D010007
+#define BASHER63 0x0D010008
+#define BASHER63CDT 0x0D010009
+#define BOXDOR64 0x0D01000A
+#define BOXDOR64CDT 0x0D01000B
+#define BUSHA63 0x0D01000C
+#define BUSHA63CDT 0x0D01000D
+#define BUSHB63 0x0D01000E
+#define BUSHB63CDT 0x0D01000F
+#define BUSHC63 0x0D010010
+#define BUSHC63CDT 0x0D010011
+#define DOOR63C1 0x0D010012
+#define DOOR63C1CDT 0x0D010013
+#define DOOR63C1CDR 0x0D010014
+#define DOOR63C2 0x0D010015
+#define DOOR63C2CDT 0x0D010016
+#define DOOR63C2CDR 0x0D010017
+#define DOOR63C3 0x0D010018
+#define DOOR63C3CDT 0x0D010019
+#define DOOR63C3CDR 0x0D01001A
+#define GEOCLI64 0x0D01001B
+#define GEOCLI64CDT 0x0D01001C
+#define GEOJGL64 0x0D01001D
+#define GEOJGL64CDT 0x0D01001E
+#define GEOJGR64 0x0D01001F
+#define GEOJGR64CDT 0x0D010020
+#define GEOLAD64 0x0D010021
+#define GEOLAD64CDT 0x0D010022
+#define GEOSHK64 0x0D010023
+#define GEOSHK64CDT 0x0D010024
+#define GEOSTDL 0x0D010025
+#define GEOSTDLCDT 0x0D010026
+#define GEOSTDR 0x0D010027
+#define GEOSTDRCDT 0x0D010028
+#define GUIDOR63 0x0D010029
+#define GUIDOR63CDT 0x0D01002A
+#define GUIDSM63 0x0D01002B
+#define GUIDSM63CDT 0x0D01002C
+#define LADY63 0x0D01002D
+#define LADY63CDT 0x0D01002E
+#define LIGHT63A 0x0D01002F
+#define LIGHT63ACDT 0x0D010030
+#define LIGHT63B 0x0D010031
+#define LIGHT63BCDT 0x0D010032
+#define LIGHT63C 0x0D010033
+#define LIGHT63CCDT 0x0D010034
+#define LIGHT63D 0x0D010035
+#define LIGHT63DCDT 0x0D010036
+#define LIGHT63E 0x0D010037
+#define LIGHT63ECDT 0x0D010038
+#define NICO63 0x0D010039
+#define NICO63CDT 0x0D01003A
+#define POLE63 0x0D01003B
+#define POLE63CDT 0x0D01003C
+#define WHEELA63 0x0D01003D
+#define WHEELA63CDT 0x0D01003E
+#define WHEELB63 0x0D01003F
+#define WHEELB63CDT 0x0D010040
+#define WHEELC63 0x0D010041
+#define WHEELC63CDT 0x0D010042
+#define WHEELD63 0x0D010043
+#define WHEELD63CDT 0x0D010044
+#define WHEELE63 0x0D010045
+#define WHEELE63CDT 0x0D010046
+#define WHEELF63 0x0D010047
+#define WHEELF63CDT 0x0D010048
+ // 73 entities in TXTs, 73 in datafiles.
+ // room65
+#define R65L0 0x0D020000
+#define R65L1 0x0D020001
+#define R65G1 0x0D020002
+#define R65PAL 0x0D020003
+#define R65FLR 0x0D020004
+#define DOOR65 0x0D020005
+#define DOOR65CDT 0x0D020006
+#define DOOR65CDR 0x0D020007
+#define GEOGUA 0x0D020008
+#define GEOGUACDT 0x0D020009
+#define GEOLNK3 0x0D02000A
+#define GEOLNK3CDT 0x0D02000B
+#define GEONIC65 0x0D02000C
+#define GEONIC65CDT 0x0D02000D
+#define GEOSIT 0x0D02000E
+#define GEOSITCDT 0x0D02000F
+#define GEOSIT65 0x0D020010
+#define GEOSIT65CDT 0x0D020011
+#define GEOSTD65 0x0D020012
+#define GEOSTD65CDT 0x0D020013
+#define GEOSTD65CDR 0x0D020014
+#define GEOTIK 0x0D020015
+#define GEOTIKCDT 0x0D020016
+#define GEOTN652 0x0D020017
+#define GEOTN652CDT 0x0D020018
+#define GEOTN652CDR 0x0D020019
+#define GEOTRN65 0x0D02001A
+#define GEOTRN65CDT 0x0D02001B
+#define GEOTRN65CDR 0x0D02001C
+#define GUADOR65 0x0D02001D
+#define GUADOR65CDT 0x0D02001E
+#define GUALEA65 0x0D02001F
+#define GUALEA65CDT 0x0D020020
+#define GUATGN 0x0D020021
+#define GUATGNCDT 0x0D020022
+#define GUATGNCDR 0x0D020023
+#define GUATIK1 0x0D020024
+#define GUATIK1CDT 0x0D020025
+#define GUATIK2 0x0D020026
+#define GUATIK2CDT 0x0D020027
+#define GUATLK1 0x0D020028
+#define GUATLK1CDT 0x0D020029
+#define GUATLK2 0x0D02002A
+#define GUATLK2CDT 0x0D02002B
+#define NICGEO65 0x0D02002C
+#define NICGEO65CDT 0x0D02002D
+#define NICSIT65 0x0D02002E
+#define NICSIT65CDT 0x0D02002F
+#define NICTRN65 0x0D020030
+#define NICTRN65CDT 0x0D020031
+#define NICTRN65CDR 0x0D020032
+#define OLDREAD 0x0D020033
+#define OLDREADCDT 0x0D020034
+#define OLDREADCDR 0x0D020035
+#define OLDTIK1 0x0D020036
+#define OLDTIK1CDT 0x0D020037
+#define OLDTLK1 0x0D020038
+#define OLDTLK1CDT 0x0D020039
+ // 58 entities in TXTs, 58 in datafiles.
+ // room66
+#define R66L0 0x0D030000
+#define R66PAL 0x0D030001
+#define R66FLR 0x0D030002
+#define BASHBURP 0x0D030003
+#define BASHBURPCDT 0x0D030004
+#define BASHCAN 0x0D030005
+#define BASHCANCDT 0x0D030006
+#define BASHCLA 0x0D030007
+#define BASHCLACDT 0x0D030008
+#define BASHDRI 0x0D030009
+#define BASHDRICDT 0x0D03000A
+#define BASHSTD 0x0D03000B
+#define BASHSTDCDT 0x0D03000C
+#define BASHTLK1 0x0D03000D
+#define BASHTLK1CDT 0x0D03000E
+#define CAN66 0x0D03000F
+#define CAN66CDT 0x0D030010
+#define GEOLEA 0x0D030011
+#define GEOLEACDT 0x0D030012
+#define GEOOPN1 0x0D030013
+#define GEOOPN1CDT 0x0D030014
+#define GEOOUT66 0x0D030015
+#define GEOOUT66CDT 0x0D030016
+#define SLEEPY1 0x0D030017
+#define SLEEPY1CDT 0x0D030018
+#define SLEEPY1CDR 0x0D030019
+#define SLEEPY2 0x0D03001A
+#define SLEEPY2CDT 0x0D03001B
+ // 28 entities in TXTs, 28 in datafiles.
+ // room67
+#define R67L0 0x0D040000
+#define R67L1 0x0D040001
+#define R67G1 0x0D040002
+#define R67PAL 0x0D040003
+#define R67FLR 0x0D040004
+#define DOOR67 0x0D040005
+#define DOOR67CDT 0x0D040006
+#define DOOR67CDR 0x0D040007
+ // 8 entities in TXTs, 8 in datafiles.
+ // room69
+#define R69SPRPAL 0x0D050000
+#define R69L0 0x0D050001
+#define R69L1 0x0D050002
+#define R69G1 0x0D050003
+#define R69PAL 0x0D050004
+#define R69FLR 0x0D050005
+#define ASSDIE69 0x0D050006
+#define ASSDIE69CDT 0x0D050007
+#define ASSDWN69 0x0D050008
+#define ASSDWN69CDT 0x0D050009
+#define ASSLIFT 0x0D05000A
+#define ASSLIFTCDT 0x0D05000B
+#define ASSTLK69 0x0D05000C
+#define ASSTLK69CDT 0x0D05000D
+#define BOXES69 0x0D05000E
+#define BOXES69CDT 0x0D05000F
+#define EKLBOX69 0x0D050010
+#define EKLBOX69CDT 0x0D050011
+#define EKLGUN 0x0D050012
+#define EKLGUNCDT 0x0D050013
+#define EKLGUN69 0x0D050014
+#define EKLGUN69CDT 0x0D050015
+#define EKLTLK69 0x0D050016
+#define EKLTLK69CDT 0x0D050017
+#define EKLFIGHT 0x0D050018
+#define EKLFIGHTCDT 0x0D050019
+#define FIGHT69 0x0D05001A
+#define FIGHT69CDT 0x0D05001B
+#define GEODIE69 0x0D05001C
+#define GEODIE69CDT 0x0D05001D
+#define GEOENT69 0x0D05001E
+#define GEOENT69CDT 0x0D05001F
+#define GEOSTD69 0x0D050020
+#define GEOSTD69CDT 0x0D050021
+#define GEOSTP69 0x0D050022
+#define GEOSTP69CDT 0x0D050023
+#define GEOTLK69 0x0D050024
+#define GEOTLK69CDT 0x0D050025
+#define GEOUNTIE 0x0D050026
+#define GEOUNTIECDT 0x0D050027
+#define GEOXIT69 0x0D050028
+#define GEOXIT69CDT 0x0D050029
+#define NICTKB69 0x0D05002A
+#define NICTKB69CDT 0x0D05002B
+#define NICTLK69 0x0D05002C
+#define NICTLK69CDT 0x0D05002D
+#define NICTRN69 0x0D05002E
+#define NICTRN69CDT 0x0D05002F
+#define NICTRN69CDR 0x0D050030
+#define NICTUG69 0x0D050031
+#define NICTUG69CDT 0x0D050032
+#define NICWLK69 0x0D050033
+#define NICWLK69CDT 0x0D050034
+#define NICXIT69 0x0D050035
+#define NICXIT69CDT 0x0D050036
+#define RGTDOR69 0x0D050037
+#define RGTDOR69CDT 0x0D050038
+ // 57 entities in TXTs, 57 in datafiles.
+// scotland
+ // sound_fx
+#define FX_WIND71 0x0E000000
+#define FX_GUST71 0x0E000001
+#define FX_OWL71A 0x0E000002
+#define FX_OWL71B 0x0E000003
+#define FX_COG72A 0x0E000004
+#define FX_PING 0x0E000005
+#define FX_RUMMAGE1 0x0E000006
+#define FX_RUMMAGE2 0x0E000007
+#define FX_SECDOR72 0x0E000008
+#define FX_CHANT 0x0E000009
+#define FX_DAGGER1 0x0E00000A
+#define FX_GDROP73 0x0E00000B
+#define FX_GUNPOWDR 0x0E00000C
+#define FX_STAFF 0x0E00000D
+#define FX_TORCH73 0x0E00000E
+#define FX_BAPHAMB 0x0E00000F
+#define FX_FIGHT1 0x0E000010
+#define FX_REFORGE2 0x0E000011
+#define FX_ROSSODIE 0x0E000012
+#define FX_GKSWORD 0x0E000013
+#define FX_REFORGE1 0x0E000014
+#define FX_REFORGE4 0x0E000015
+#define FX_CHOKE1 0x0E000016
+#define FX_CHOKE2 0x0E000017
+#define FX_EKDIES 0x0E000018
+#define FX_FIGHT2 0x0E000019
+#define FX_GUN79 0x0E00001A
+ // 27 entities in TXTs, 27 in datafiles.
+ // room71
+#define R71L0 0x0E010000
+#define R71L1 0x0E010001
+#define R71G1 0x0E010002
+#define R71PAL 0x0E010003
+#define R71FLR 0x0E010004
+#define R71PLX 0x0E010005
+ // 6 entities in TXTs, 6 in datafiles.
+ // room72
+#define R72L0 0x0E020000
+#define R72L1 0x0E020001
+#define R72G1 0x0E020002
+#define R72PAL 0x0E020003
+#define R72FLR 0x0E020004
+#define COGL72 0x0E020005
+#define COGL72CDT 0x0E020006
+#define COGR72 0x0E020007
+#define COGR72CDT 0x0E020008
+#define GEOJMP72 0x0E020009
+#define GEOJMP72CDT 0x0E02000A
+#define GEOPIPE 0x0E02000B
+#define GEOPIPECDT 0x0E02000C
+#define GEOPIPECDR 0x0E02000D
+#define GEOPSH72 0x0E02000E
+#define GEOPSH72CDT 0x0E02000F
+#define GEOPUT72 0x0E020010
+#define GEOPUT72CDT 0x0E020011
+#define GEOTAK72 0x0E020012
+#define GEOTAK72CDT 0x0E020013
+#define GEOTAK72CDR 0x0E020014
+#define GEOTRY72 0x0E020015
+#define GEOTRY72CDT 0x0E020016
+#define GEOWIND2 0x0E020017
+#define GEOWIND2CDT 0x0E020018
+#define GEOWIND3 0x0E020019
+#define GEOWIND3CDT 0x0E02001A
+#define GEOWIND4 0x0E02001B
+#define GEOWIND4CDT 0x0E02001C
+#define GEOWND72 0x0E02001D
+#define GEOWND72CDT 0x0E02001E
+#define HANDLE72 0x0E02001F
+#define HANDLE72CDT 0x0E020020
+#define NICGEO72 0x0E020021
+#define NICGEO72CDT 0x0E020022
+#define NICJMP72 0x0E020023
+#define NICJMP72CDT 0x0E020024
+#define NICLNK72 0x0E020025
+#define NICLNK72CDT 0x0E020026
+#define NICLNK72CDR 0x0E020027
+#define NICOPY72 0x0E020028
+#define NICOPY72CDT 0x0E020029
+#define NICOPY72CDR 0x0E02002A
+#define NICTLK72 0x0E02002B
+#define NICTLK72CDT 0x0E02002C
+#define NOSE72 0x0E02002D
+#define NOSE72CDT 0x0E02002E
+#define PANEL72 0x0E02002F
+#define PANEL72CDT 0x0E020030
+#define PIPE72 0x0E020031
+#define PIPE72CDT 0x0E020032
+#define SPINDL72 0x0E020033
+#define SPINDL72CDT 0x0E020034
+#define WHEEL72 0x0E020035
+#define WHEEL72CDT 0x0E020036
+ // 55 entities in TXTs, 55 in datafiles.
+ // room73
+#define R73SPRPAL 0x0E030000
+#define R73L0 0x0E030001
+#define R73L1 0x0E030002
+#define R73L2 0x0E030003
+#define R73G1 0x0E030004
+#define R73G2 0x0E030005
+#define R73PAL 0x0E030006
+#define R73FLR 0x0E030007
+#define DAGGER1 0x0E030008
+#define DAGGER1CDT 0x0E030009
+#define DAGGER2 0x0E03000A
+#define DAGGER2CDT 0x0E03000B
+#define DARKWALL 0x0E03000C
+#define DARKWALLCDT 0x0E03000D
+#define FLAME73 0x0E03000E
+#define FLAME73CDT 0x0E03000F
+#define GEOCRCH 0x0E030010
+#define GEOCRCHCDT 0x0E030011
+#define GEOCREEP 0x0E030012
+#define GEOCREEPCDT 0x0E030013
+#define GEODIE1 0x0E030014
+#define GEODIE1CDT 0x0E030015
+#define GEODIE2 0x0E030016
+#define GEODIE2CDT 0x0E030017
+#define GEOTHROW 0x0E030018
+#define GEOTHROWCDT 0x0E030019
+#define GEOTLK73 0x0E03001A
+#define GEOTLK73CDT 0x0E03001B
+#define GEOTN73 0x0E03001C
+#define GEOTN73CDT 0x0E03001D
+#define GEOTN73CDR 0x0E03001E
+#define GMENTER 0x0E03001F
+#define GMENTERCDT 0x0E030020
+#define GMSPEAK 0x0E030021
+#define GMSPEAKCDT 0x0E030022
+#define GUIDLE 0x0E030023
+#define GUIDLECDT 0x0E030024
+#define GUITALK 0x0E030025
+#define GUITALKCDT 0x0E030026
+#define GUITHROW 0x0E030027
+#define GUITHROWCDT 0x0E030028
+#define GUITURN7 0x0E030029
+#define GUITURN7CDT 0x0E03002A
+#define GUITURN7CDR 0x0E03002B
+#define NICENT73 0x0E03002C
+#define NICENT73CDT 0x0E03002D
+#define NICEX73 0x0E03002E
+#define NICEX73CDT 0x0E03002F
+#define NICOTHRO 0x0E030030
+#define NICOTHROCDT 0x0E030031
+#define NICPANIC 0x0E030032
+#define NICPANICCDT 0x0E030033
+#define NICTLK73 0x0E030034
+#define NICTLK73CDT 0x0E030035
+#define NICTRN73 0x0E030036
+#define NICTRN73CDT 0x0E030037
+#define NICTRN73CDR 0x0E030038
+#define NITALK73 0x0E030039
+#define NITALK73CDT 0x0E03003A
+#define SPARKING 0x0E03003B
+#define SPARKINGCDT 0x0E03003C
+#define TORCH1 0x0E03003D
+#define TORCH1CDT 0x0E03003E
+#define TORCH2 0x0E03003F
+#define TORCH2CDT 0x0E030040
+#define TORCH3 0x0E030041
+#define TORCH3CDT 0x0E030042
+ // 67 entities in TXTs, 67 in datafiles.
+ // room74
+#define ENDSPRPAL 0x0E040000
+#define R74L0 0x0E040001
+#define R74L1 0x0E040002
+#define R74G1 0x0E040003
+#define R74PAL 0x0E040004
+#define R74APAL 0x0E040005
+#define R74BPAL 0x0E040006
+#define R74CPAL 0x0E040007
+#define R74DPAL 0x0E040008
+#define CHANT74 0x0E040009
+#define CHANT74CDT 0x0E04000A
+#define EKFIGHT 0x0E04000B
+#define EKFIGHTCDT 0x0E04000C
+#define EKGUN74 0x0E04000D
+#define EKGUN74CDT 0x0E04000E
+#define GEOFIGHT 0x0E04000F
+#define GEOFIGHTCDT 0x0E040010
+#define GEOLUK74 0x0E040011
+#define GEOLUK74CDT 0x0E040012
+#define GEOLUK74CDR 0x0E040013
+#define GEORCT74 0x0E040014
+#define GEORCT74CDT 0x0E040015
+#define GEORUN74 0x0E040016
+#define GEORUN74CDT 0x0E040017
+#define GEOSTND 0x0E040018
+#define GEOSTNDCDT 0x0E040019
+#define GEOTLK74 0x0E04001A
+#define GEOTLK74CDT 0x0E04001B
+#define GKKNEE 0x0E04001C
+#define GKKNEECDT 0x0E04001D
+#define GMGUN 0x0E04001E
+#define GMGUNCDT 0x0E04001F
+#define GMMOV1 0x0E040020
+#define GMMOV1CDT 0x0E040021
+#define GMMOV2 0x0E040022
+#define GMMOV2CDT 0x0E040023
+#define GMMOV3 0x0E040024
+#define GMMOV3CDT 0x0E040025
+#define GMMOV4 0x0E040026
+#define GMMOV4CDT 0x0E040027
+#define GMMOV5 0x0E040028
+#define GMMOV5CDT 0x0E040029
+#define GMMOV6 0x0E04002A
+#define GMMOV6CDT 0x0E04002B
+#define GMTLK1 0x0E04002C
+#define GMTLK1CDT 0x0E04002D
+#define GMTLK2 0x0E04002E
+#define GMTLK2CDT 0x0E04002F
+#define GMTLK3 0x0E040030
+#define GMTLK3CDT 0x0E040031
+#define GMTLK4 0x0E040032
+#define GMTLK4CDT 0x0E040033
+#define GMTLK5 0x0E040034
+#define GMTLK5CDT 0x0E040035
+#define GMTLK6 0x0E040036
+#define GMTLK6CDT 0x0E040037
+#define GMTLK7 0x0E040038
+#define GMTLK7CDT 0x0E040039
+#define GMTLK74 0x0E04003A
+#define GMTLK74CDT 0x0E04003B
+#define GMWLK 0x0E04003C
+#define GMWLKCDT 0x0E04003D
+#define GMWRIT74 0x0E04003E
+#define GMWRIT74CDT 0x0E04003F
+#define MONKFALL 0x0E040040
+#define MONKFALLCDT 0x0E040041
+#define MONKRISE 0x0E040042
+#define MONKRISECDT 0x0E040043
+#define MONKSTRS 0x0E040044
+#define MONKSTRSCDT 0x0E040045
+#define MONKTURN 0x0E040046
+#define MONKTURNCDT 0x0E040047
+#define NICFIGHT 0x0E040048
+#define NICFIGHTCDT 0x0E040049
+#define NICLUK74 0x0E04004A
+#define NICLUK74CDT 0x0E04004B
+#define NICLUK74CDR 0x0E04004C
+#define NICRCVR 0x0E04004D
+#define NICRCVRCDT 0x0E04004E
+#define NICRUN74 0x0E04004F
+#define NICRUN74CDT 0x0E040050
+#define NICSTND 0x0E040051
+#define NICSTNDCDT 0x0E040052
+#define NICTLK74 0x0E040053
+#define NICTLK74CDT 0x0E040054
+#define ROSSFALL 0x0E040055
+#define ROSSFALLCDT 0x0E040056
+#define ROSSTAIR 0x0E040057
+#define ROSSTAIRCDT 0x0E040058
+#define ROSSTND 0x0E040059
+#define ROSSTNDCDT 0x0E04005A
+#define ROSSWLK 0x0E04005B
+#define ROSSWLKCDT 0x0E04005C
+#define RUBBLE 0x0E04005D
+#define RUBBLECDT 0x0E04005E
+#define STONLIT1 0x0E04005F
+#define STONLIT1CDT 0x0E040060
+#define STONLIT2 0x0E040061
+#define STONLIT2CDT 0x0E040062
+#define STONWHT1 0x0E040063
+#define STONWHT1CDT 0x0E040064
+#define STONWHT2 0x0E040065
+#define STONWHT2CDT 0x0E040066
+ // 103 entities in TXTs, 103 in datafiles.
+ // room75
+#define R75L0 0x0E050000
+#define R75PAL 0x0E050001
+#define R75APAL 0x0E050002
+#define R75BPAL 0x0E050003
+#define R75CPAL 0x0E050004
+#define R75DPAL 0x0E050005
+#define EKGUN 0x0E050006
+#define EKGUNCDT 0x0E050007
+#define EKGUN2 0x0E050008
+#define EKGUN2CDT 0x0E050009
+#define EKLITE 0x0E05000A
+#define EKLITECDT 0x0E05000B
+#define EKRELAX 0x0E05000C
+#define EKRELAXCDT 0x0E05000D
+#define EKTLK75 0x0E05000E
+#define EKTLK75CDT 0x0E05000F
+#define GEOLUK75 0x0E050010
+#define GEOLUK75CDT 0x0E050011
+#define GEOLUK75CDR 0x0E050012
+#define GTMP 0x0E050013
+#define GTMPCDT 0x0E050014
+#define NICLUK75 0x0E050015
+#define NICLUK75CDT 0x0E050016
+#define NICLUK75CDR 0x0E050017
+#define NTMP 0x0E050018
+#define NTMPCDT 0x0E050019
+#define TORCH75 0x0E05001A
+#define TORCH75CDT 0x0E05001B
+ // 28 entities in TXTs, 28 in datafiles.
+ // room76
+#define R76L0 0x0E060000
+#define R76PAL 0x0E060001
+#define CHANT76 0x0E060002
+#define CHANT76CDT 0x0E060003
+#define EKGUN76 0x0E060004
+#define EKGUN76CDT 0x0E060005
+#define GKBAK 0x0E060006
+#define GKBAKCDT 0x0E060007
+#define GKKNEE76 0x0E060008
+#define GKKNEE76CDT 0x0E060009
+#define GKLOWER 0x0E06000A
+#define GKLOWERCDT 0x0E06000B
+#define GKSWORD 0x0E06000C
+#define GKSWORDCDT 0x0E06000D
+#define GKTLK 0x0E06000E
+#define GKTLKCDT 0x0E06000F
+#define GKTLK2 0x0E060010
+#define GKTLK2CDT 0x0E060011
+#define GMARMS 0x0E060012
+#define GMARMSCDT 0x0E060013
+#define GMSTONES 0x0E060014
+#define GMSTONESCDT 0x0E060015
+#define GMTLK76 0x0E060016
+#define GMTLK76CDT 0x0E060017
+#define GMTRN76 0x0E060018
+#define GMTRN76CDT 0x0E060019
+#define LSTONE76 0x0E06001A
+#define LSTONE76CDT 0x0E06001B
+#define MONKNEE 0x0E06001C
+#define MONKNEECDT 0x0E06001D
+#define ROSSTND76 0x0E06001E
+#define ROSSTND76CDT 0x0E06001F
+#define RSTONE76 0x0E060020
+#define RSTONE76CDT 0x0E060021
+ // 34 entities in TXTs, 34 in datafiles.
+ // room77
+#define R77L0 0x0E070000
+#define R77PAL 0x0E070001
+#define CHANT77 0x0E070002
+#define CHANT77CDT 0x0E070003
+#define GEOPEER 0x0E070004
+#define GEOPEERCDT 0x0E070005
+#define GMHEAD 0x0E070006
+#define GMHEADCDT 0x0E070007
+#define NICPEER 0x0E070008
+#define NICPEERCDT 0x0E070009
+#define NICTLK77 0x0E07000A
+#define NICTLK77CDT 0x0E07000B
+#define ROSLUK77 0x0E07000C
+#define ROSLUK77CDT 0x0E07000D
+ // 14 entities in TXTs, 14 in datafiles.
+ // room78
+#define R78L0 0x0E080000
+#define R78PAL 0x0E080001
+#define R78APAL 0x0E080002
+#define R78BPAL 0x0E080003
+#define R78CPAL 0x0E080004
+#define R78DPAL 0x0E080005
+#define R78EPAL 0x0E080006
+#define R78FPAL 0x0E080007
+#define LSTONE78 0x0E080008
+#define LSTONE78CDT 0x0E080009
+#define LSTONE78CDR 0x0E08000A
+#define GMPOWER 0x0E08000B
+#define GMPOWERCDT 0x0E08000C
+#define GMWRITH 0x0E08000D
+#define GMWRITHCDT 0x0E08000E
+#define RSTONE78 0x0E08000F
+#define RSTONE78CDT 0x0E080010
+#define RSTONE78CDR 0x0E080011
+ // 18 entities in TXTs, 18 in datafiles.
+ // room79
+#define R79L0 0x0E090000
+#define R79PAL 0x0E090001
+#define EKSTD79 0x0E090002
+#define EKSTD79CDT 0x0E090003
+#define FIGHT79 0x0E090004
+#define FIGHT79CDT 0x0E090005
+#define GEOANG79 0x0E090006
+#define GEOANG79CDT 0x0E090007
+#define GEOTLK79 0x0E090008
+#define GEOTLK79CDT 0x0E090009
+#define NICSTD79 0x0E09000A
+#define NICSTD79CDT 0x0E09000B
+#define ROSENT79 0x0E09000C
+#define ROSENT79CDT 0x0E09000D
+#define ROSSHOT 0x0E09000E
+#define ROSSHOTCDT 0x0E09000F
+#define ROSTLK79 0x0E090010
+#define ROSTLK79CDT 0x0E090011
+ // 18 entities in TXTs, 18 in datafiles.
+
+//} // End of namespace Sword1
+
+#endif //SWORDRES_H
diff --git a/backends/platform/PalmOS/Src/cd_aeroplayer.cpp b/backends/platform/PalmOS/Src/cd_aeroplayer.cpp
new file mode 100644
index 0000000000..d70bf572c9
--- /dev/null
+++ b/backends/platform/PalmOS/Src/cd_aeroplayer.cpp
@@ -0,0 +1,166 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 "stdafx.h"
+#include "common/system.h"
+#include "common/config-manager.h"
+
+#include "cd_aeroplayer.h"
+
+AeroCDPlayer::AeroCDPlayer(OSystem *sys) {
+ _sys = sys;
+ StrCopy(gameP, ConfMan.getActiveDomainName().c_str());
+}
+
+bool AeroCDPlayer::init() {
+ aeroplayer_Startup();
+ _isInitialized = aeroplayer_PlayerIsActive();
+
+ if (_isInitialized)
+ _volumeLimit = aeroplayer_GetMaxVolumeIndex();
+
+ return _isInitialized;
+}
+
+void AeroCDPlayer::release() {
+ aeroplayer_Shutdown();
+
+ // self delete
+ delete this;
+}
+
+UInt32 AeroCDPlayer::getStatus() {
+ return aeroplayer_GetPlaybackStatus();
+}
+
+UInt32 AeroCDPlayer::getPosition() {
+ return aeroplayer_GetPosition_msec();
+}
+
+UInt32 AeroCDPlayer::getDuration() {
+ return aeroplayer_GetDuration_msec();
+}
+
+void AeroCDPlayer::setPosition(UInt32 value) {
+ aeroplayer_Seek_abs_msec(value);
+}
+
+void AeroCDPlayer::setVolume(int volume) {
+ _volumeLevel = volume;
+ aeroplayer_SetVolumeIndex((_volumeLimit * volume) / 100);
+}
+
+bool AeroCDPlayer::poll() {
+ return
+ ( _pckLoops != 0 &&
+ ( getPosition() < _pckTrackEndFrame &&
+ getStatus() == AEROPLAYER_STATUS_PLAY
+ )
+ );
+}
+
+void AeroCDPlayer::update() {
+
+ // stop replay upon request of stopCD()
+ if (_pckStopTime != 0 && _sys->getMillis() >= _pckStopTime) {
+ forceStop();
+ _pckLoops = 0;
+ _pckStopTime = 0;
+ _pckTrackEndFrame = 0;
+ return;
+ }
+
+ // not fully played
+ if (getPosition() < _pckTrackEndFrame && getStatus() == AEROPLAYER_STATUS_PLAY)
+ return;
+
+ aeroplayer_Pause();
+// _pckStopTime = _sys->getMillis();
+
+ // loop again ?
+ if (_pckLoops > 0)
+ _pckLoops--;
+
+ // loop if needed
+ if (_pckLoops == 0)
+ forceStop();
+ else {
+ //_pckStopTime = 0;
+
+ if (_pckTrackStartFrame == 0 && _pckTrackDuration == 0) {
+ setPosition(0);
+ } else {
+ setPosition(_pckTrackStartFrame);
+ }
+
+ aeroplayer_Play();
+ _pckEndTime = _sys->getMillis() + _pckTrackDuration;
+ }
+}
+
+void AeroCDPlayer::stop() {
+ _pckStopTime = _sys->getMillis();
+ _pckLoops = 0;
+ return;
+}
+
+void AeroCDPlayer::forceStop() {
+ if (getStatus() != AEROPLAYER_STATUS_STOP)
+ aeroplayer_PlayTrack(vfsInvalidVolRef, NULL);
+}
+
+void AeroCDPlayer::play(int track, int num_loops, int start_frame, int duration) {
+ if (!num_loops && !start_frame)
+ return;
+
+ Char fileP[100];
+ static const Char *ext[] = { "mp3", "ogg" };
+
+// if (duration > 0)
+// duration += 5;
+
+ _pckTrack = track;
+ _pckLoops = num_loops;
+ _pckTrackStartFrame = TO_MSECS(start_frame);
+ _pckTrackDuration = TO_MSECS(duration);
+
+ StrPrintF(fileP, "/Palm/Programs/ScummVM/Audio/%s_%03ld.%s", gameP, (track + gVars->CD.firstTrack - 1), ext[gVars->CD.format]);
+ aeroplayer_Pause();
+ aeroplayer_PlayTrack(gVars->VFS.volRefNum, fileP);
+ aeroplayer_Pause();
+
+ if (_pckTrackStartFrame == 0 && _pckTrackDuration == 0) {
+ _pckTrackDuration = getDuration();
+ } else {
+ setPosition(_pckTrackStartFrame);
+ if (_pckTrackDuration == 0)
+ _pckTrackDuration = getDuration() - _pckTrackStartFrame;
+ }
+
+ aeroplayer_Play();
+
+ _pckStopTime = 0;
+ _pckTrackEndFrame = _pckTrackStartFrame + _pckTrackDuration;
+ _pckEndTime = _sys->getMillis() + _pckTrackDuration;
+}
diff --git a/backends/platform/PalmOS/Src/cd_aeroplayer.h b/backends/platform/PalmOS/Src/cd_aeroplayer.h
new file mode 100644
index 0000000000..1ea48a4c9b
--- /dev/null
+++ b/backends/platform/PalmOS/Src/cd_aeroplayer.h
@@ -0,0 +1,64 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 CD_AEROPLAYER_H
+#define CD_AEROPLAYER_H
+
+#include "cdaudio.h"
+#include "aeroplayer_public.h"
+
+class AeroCDPlayer : public CDAudio {
+public:
+ AeroCDPlayer(OSystem *sys);
+
+ bool init();
+ void release();
+
+ bool poll();
+ void update();
+ void play(int track, int num_loops, int start_frame, int duration);
+ void stop();
+
+ void setVolume(int volume);
+
+private:
+ OSystem *_sys;
+ Char gameP[15];
+
+ UInt32 getStatus();
+ void setPosition(UInt32 value);
+ UInt32 getDuration();
+ UInt32 getPosition();
+ void forceStop();
+
+ UInt16 _volumeLimit;
+
+ Boolean _isPlaying;
+ // cdrom
+ UInt16 _pckLoops, _pckTrack;
+ UInt32 _pckTrackStartFrame, _pckTrackEndFrame;
+ UInt32 _pckStopTime, _pckEndTime, _pckTrackDuration;
+};
+
+#endif
diff --git a/backends/platform/PalmOS/Src/cd_default.cpp b/backends/platform/PalmOS/Src/cd_default.cpp
new file mode 100644
index 0000000000..4862600b0c
--- /dev/null
+++ b/backends/platform/PalmOS/Src/cd_default.cpp
@@ -0,0 +1,103 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-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 "common/stdafx.h"
+#include "common/system.h"
+#include "cd_default.h"
+
+DefaultCDPlayer::DefaultCDPlayer(OSystem *sys) {
+ _sys = sys;
+}
+
+bool DefaultCDPlayer::init() {
+ _isInitialized = true;
+ return _isInitialized;
+}
+
+void DefaultCDPlayer::release() {
+ // self delete
+ delete this;
+}
+
+bool DefaultCDPlayer::poll() {
+ return (_defLoops != 0 && _sys->getMillis() < _defTrackEndFrame);
+}
+
+void DefaultCDPlayer::update() {
+
+ // stop replay upon request of stopCD()
+ if (_defStopTime != 0 && _sys->getMillis() >= _defStopTime) {
+ _defLoops = 0;
+ _defStopTime = 0;
+ _defTrackEndFrame = 0;
+ return;
+ }
+
+ // not fully played
+ if (_sys->getMillis() < _defTrackEndFrame)
+ return;
+
+ if (_defLoops == 0)
+ return;
+
+ // loop again ?
+ if (_defLoops > 0)
+ _defLoops--;
+
+ // loop if needed
+ if (_defLoops != 0) {
+ _defTrackEndFrame = _sys->getMillis() + _defTrackLength;
+ }
+}
+
+void DefaultCDPlayer::stop() { /* Stop CD Audio in 1/10th of a second */
+ _defStopTime = _sys->getMillis() + 100;
+ _defLoops = 0;
+ return;
+}
+
+void DefaultCDPlayer::play(int track, int num_loops, int start_frame, int duration) {
+ if (!num_loops && !start_frame)
+ return;
+
+ UInt32 fullLength;
+
+ _defLoops = num_loops;
+ start_frame = TO_MSECS(start_frame);
+ duration = TO_MSECS(duration);
+
+ // frame in milli-seconds
+ _defStopTime = 0;
+ fullLength = start_frame + gVars->CD.defaultTrackLength * 1000;
+
+ if (duration > 0) {
+ _defTrackLength = duration;
+ } else if (start_frame > 0) {
+ _defTrackLength = fullLength;
+ _defTrackLength -= start_frame;
+ } else {
+ _defTrackLength = fullLength;
+ }
+
+ // try to play the track
+ _defTrackEndFrame = _sys->getMillis() + _defTrackLength;
+}
diff --git a/backends/platform/PalmOS/Src/cd_default.h b/backends/platform/PalmOS/Src/cd_default.h
new file mode 100644
index 0000000000..9dac0d7c16
--- /dev/null
+++ b/backends/platform/PalmOS/Src/cd_default.h
@@ -0,0 +1,49 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-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 CD_DEFAULT_H
+ #define CD_DEFAULT_H
+
+ #include "cdaudio.h"
+
+ class DefaultCDPlayer : public CDAudio {
+ public:
+ DefaultCDPlayer(OSystem *sys);
+
+ bool init();
+ void release();
+
+ bool poll();
+ void update();
+ void play(int track, int num_loops, int start_frame, int duration);
+ void stop();
+
+ private:
+ OSystem *_sys;
+
+ // cdrom
+ UInt16 _defLoops;
+ UInt32 _defStopTime, _defTrackEndFrame, _defTrackLength;
+ };
+
+ #endif
diff --git a/backends/platform/PalmOS/Src/cd_msa.cpp b/backends/platform/PalmOS/Src/cd_msa.cpp
new file mode 100644
index 0000000000..553551ce7f
--- /dev/null
+++ b/backends/platform/PalmOS/Src/cd_msa.cpp
@@ -0,0 +1,260 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-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 <SonyClie.h>
+#include "common/stdafx.h"
+#include "common/system.h"
+#include "cd_msa.h"
+#include "start.h" // for appFileCreat
+
+static void doErr(Err e, const Char *msg) {
+ Char err[100];
+ StrPrintF(err, "%ld : " , e);
+ StrCat(err,msg);
+ FrmCustomAlert(1000,err,0,0);
+}
+
+MsaCDPlayer::MsaCDPlayer(OSystem *sys) {
+ _sys = sys;
+ _msaRefNum = sysInvalidRefNum;
+
+ _msaLoops = 0;
+ _msaStopTime = 0;
+ _msaTrackEndSu = 0;
+}
+
+bool MsaCDPlayer::init() {
+ SonySysFtrSysInfoP sonySysFtrSysInfoP;
+ Err error = errNone;
+
+ if (!(error = FtrGet(sonySysFtrCreator, sonySysFtrNumSysInfoP, (UInt32*)&sonySysFtrSysInfoP))) {
+ // not found with audio adapter ?!
+ //if (sonySysFtrSysInfoP->libr & sonySysFtrSysInfoLibrMsa) {
+ if ((error = SysLibFind(sonySysLibNameMsa, &_msaRefNum)))
+ if (error == sysErrLibNotFound)
+ error = SysLibLoad(sonySysFileTMsaLib, sonySysFileCMsaLib, &_msaRefNum);
+
+ // FIXME : still don't understand how this lib works, it seems to be very unstable
+ // and with the very bad documentation provided by Sony it's difficult to find out why
+ // this doesn't work the same way on build-in MP3 device and external MP3 devices
+ if (!error) {
+ //MsaLibClose(_msaRefNum, msaLibOpenModeAlbum); // close the lib if we previously let it open (?) Need to add Notify for sonySysNotifyMsaEnforceOpenEvent just in case ...
+ error = MsaLibOpen(_msaRefNum, msaLibOpenModeAlbum);
+
+ //if (error == msaErrAlreadyOpen)
+ // error = MsaLibEnforceOpen(_msaRefNum, msaLibOpenModeAlbum, appFileCreator);
+
+ //error = (error != msaErrStillOpen) ? error : errNone;
+ }
+ //}
+ }
+
+// if (error)
+// _msaRefNum = sysInvalidRefNum;
+
+ _isInitialized = (_msaRefNum != sysInvalidRefNum);
+ initInternal();
+ return _isInitialized;
+}
+
+void MsaCDPlayer::initInternal() {
+ if (!_isInitialized)
+ return;
+
+ Err e;
+ Char nameP[256];
+ UInt32 dummy, albumIterater = albumIteratorStart;
+
+ MemSet(&_msaAlbum, sizeof(_msaAlbum), 0);
+ _msaAlbum.maskflag = msa_INF_ALBUM;
+ _msaAlbum.code = msa_LANG_CODE_ASCII;
+ _msaAlbum.nameP = nameP;
+ _msaAlbum.fileNameLength = 256;
+
+ e = MsaAlbumEnumerate(_msaRefNum, &albumIterater, &_msaAlbum);
+ e = MsaSetAlbum(_msaRefNum, _msaAlbum.albumRefNum, &dummy);
+
+ // TODO : use RMC to control volume
+ MsaOutCapabilityType capability;
+ MsaOutGetCapability(_msaRefNum, &capability);
+ _volumeLLimit = capability.volumeLLimit;
+ _volumeRLimit = capability.volumeRLimit;
+}
+
+void MsaCDPlayer::setVolume(int volume) {
+ _volumeLevel = volume;
+ MsaOutSetVolume(_msaRefNum, (_volumeLLimit * volume) / 100, (_volumeRLimit * volume) / 100);
+}
+
+void MsaCDPlayer::release() {
+ if (_isInitialized) {
+ if (_msaRefNum != sysInvalidRefNum) {
+ // stop the current track if any (needed if we use enforce open to prevent the track to play after exit)
+ MsaStop(_msaRefNum, true);
+ MsaLibClose(_msaRefNum, msaLibOpenModeAlbum);
+ }
+ }
+
+ // self delete
+ delete this;
+}
+
+bool MsaCDPlayer::poll() {
+ if (!_isInitialized)
+ return false;
+
+ MsaPBStatus pb;
+ MsaGetPBStatus(_msaRefNum, &pb);
+ return (_msaLoops != 0 && (pb.currentSU < _msaTrackEndSu || pb.status != msa_STOPSTATUS));
+}
+
+void MsaCDPlayer::update() {
+ if (!_isInitialized)
+ return;
+
+ // get playback status
+ MsaPBStatus pb;
+ MsaGetPBStatus(_msaRefNum, &pb);
+
+ // stop replay upon request of stopCD()
+ if (_msaStopTime != 0 && _sys->getMillis() >= _msaStopTime) {
+ MsaStop(_msaRefNum, true);
+ _msaLoops = 0;
+ _msaStopTime = 0;
+ _msaTrackEndSu = 0;
+ return;
+ }
+
+ // not fully played nad still playing the correct track
+ // (when playing a full track the return SU is not correct
+ // and so we need to check if we are still playing the correct track)
+ if (pb.currentSU < _msaTrackEndSu) {
+ UInt16 trackNo;
+ MsaPBListIndexToTrackNo(_msaRefNum, pb.currentpblistindex, &trackNo);
+ if (trackNo == _msaTrack)
+ return;
+ }
+
+ MsaStop(_msaRefNum, true);
+
+ if (_msaLoops == 0)
+ return;
+
+ // track ends and last play, force stop if still playing
+/* if (_msaLoops != 1 && pb.status != msa_STOPSTATUS) {
+ MsaStop(_msaRefNum, true);
+ return;
+ }
+*/
+ // loop again ?
+ if (_msaLoops > 0)
+ _msaLoops--;
+
+ // loop if needed
+ if (_msaLoops != 0) {
+ if (_msaStartFrame == 0 && _msaDuration == 0)
+ MsaPlay(_msaRefNum, _msaTrack, 0, msa_PBRATE_SP);
+ else
+ MsaPlay(_msaRefNum, _msaTrack, _msaTrackStartSu, msa_PBRATE_SP);
+ }
+}
+
+void MsaCDPlayer::stop() { /* Stop CD Audio in 1/10th of a second */
+ if (!_isInitialized)
+ return;
+
+ _msaStopTime = _sys->getMillis() + 100;
+ _msaLoops = 0;
+ return;
+}
+
+void MsaCDPlayer::play(int track, int num_loops, int start_frame, int duration) {
+ if (!_isInitialized)
+ return;
+
+ if (!num_loops && !start_frame)
+ return;
+
+ _msaTrack = track + gVars->CD.firstTrack - 1; // first track >= 1 ?, not 0 (0=album)
+ _msaLoops = num_loops;
+ _msaStartFrame = TO_MSECS(start_frame);
+ _msaDuration = TO_MSECS(duration);
+
+ Err e;
+ MemHandle trackH;
+
+ // stop current play if any
+ MsaStop(_msaRefNum, true);
+ _msaStopTime = 0;
+
+ // retreive track infos
+ e = MsaGetTrackInfo(_msaRefNum, _msaTrack, 0, msa_LANG_CODE_ASCII, &trackH);
+
+ // track exists
+ if (!e && trackH) {
+ MsaTime msaTime;
+ MsaTrackInfo *trackP;
+ UInt32 SU, fullLength;
+
+ // FIXME (?) : this enable MsaSuToTime to return the right value in some cases
+ MsaPlay(_msaRefNum, _msaTrack, 0, msa_PBRATE_SP);
+ MsaStop(_msaRefNum, true);
+
+ // get the msa time
+ trackP = (MsaTrackInfo *)MemHandleLock(trackH);
+ MsaSuToTime(_msaRefNum, trackP->totalsu, &msaTime);
+ SU = trackP->totalsu;
+ MemPtrUnlock(trackP);
+ MemHandleFree(trackH);
+
+ // MSA frame in milli-seconds
+ fullLength = FROM_MIN(msaTime.minute);
+ fullLength += FROM_SEC(msaTime.second);
+ fullLength += msaTime.frame;
+
+ if (_msaDuration > 0) {
+ _msaTrackLength = _msaDuration;
+ } else if (_msaStartFrame > 0) {
+ _msaTrackLength = fullLength;
+ _msaTrackLength -= _msaStartFrame;
+ } else {
+ _msaTrackLength = fullLength;
+ }
+
+ // try to play the track
+ if (start_frame == 0 && duration == 0) {
+ MsaPlay(_msaRefNum, _msaTrack, 0, msa_PBRATE_SP);
+ _msaTrackEndSu = SU;
+ } else {
+ // FIXME : MsaTimeToSu doesn't work ... (may work with previous FIXME)
+ _msaTrackStartSu = (UInt32) ((float)(_msaStartFrame) / ((float)fullLength / (float)SU));
+ _msaTrackEndSu = (UInt32) ((float)(_msaTrackLength) / ((float)fullLength / (float)SU));
+ _msaTrackEndSu += _msaTrackStartSu;
+
+ if (_msaTrackEndSu > SU)
+ _msaTrackEndSu = SU;
+
+ MsaPlay(_msaRefNum, _msaTrack, _msaTrackStartSu, msa_PBRATE_SP);
+ }
+ }
+ // TODO : use default track length if track not found
+}
diff --git a/backends/platform/PalmOS/Src/cd_msa.h b/backends/platform/PalmOS/Src/cd_msa.h
new file mode 100644
index 0000000000..44dbc6672b
--- /dev/null
+++ b/backends/platform/PalmOS/Src/cd_msa.h
@@ -0,0 +1,66 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-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 CD_MSA_H
+#define CD_MSA_H
+
+#include "cdaudio.h"
+
+class MsaCDPlayer : public CDAudio {
+public:
+ MsaCDPlayer(OSystem *sys);
+
+ bool init();
+ void release();
+
+ bool poll();
+ void update();
+ void play(int track, int num_loops, int start_frame, int duration);
+ void stop();
+
+ void setVolume(int volume);
+
+ private:
+ void initInternal();
+
+ OSystem *_sys;
+ UInt16 _msaRefNum;
+
+ UInt32 _volumeLLimit;
+ UInt32 _volumeRLimit;
+
+ // cdrom
+ AlbumInfoType _msaAlbum;
+ UInt16 _msaLoops;
+
+ UInt32 _msaStopTime;
+
+ UInt32 _msaStartFrame;
+ UInt32 _msaDuration;
+
+ UInt16 _msaTrack;
+ UInt32 _msaTrackStartSu, _msaTrackEndSu;
+ UInt32 _msaTrackLength;
+};
+
+#endif
diff --git a/backends/platform/PalmOS/Src/cd_pockettunes.cpp b/backends/platform/PalmOS/Src/cd_pockettunes.cpp
new file mode 100644
index 0000000000..75574b9802
--- /dev/null
+++ b/backends/platform/PalmOS/Src/cd_pockettunes.cpp
@@ -0,0 +1,237 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-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 "common/stdafx.h"
+#include "common/system.h"
+#include "common/config-manager.h"
+
+#include "cd_pockettunes.h"
+
+PckTunesCDPlayer::PckTunesCDPlayer(OSystem *sys) {
+ _sys = sys;
+ StrCopy(gameP, ConfMan.getActiveDomainName().c_str());
+}
+
+bool PckTunesCDPlayer::init() {
+ PocketTunesStart();
+ _isInitialized = PocketTunesIsRunning();
+ _isPlaying = false;
+ _pAction = NULL;
+
+ if (_isInitialized) {
+ _pAction = (PocketTunesAction*)MemPtrNew(sizeof(PocketTunesAction));
+ _volumeLimit = getVolumeLimit();
+ }
+
+ _isInitialized = (_isInitialized && _pAction);
+ return _isInitialized;
+}
+
+void PckTunesCDPlayer::release() {
+ PocketTunesStop();
+ if (_pAction)
+ MemPtrFree(_pAction);
+
+ // self delete
+ delete this;
+}
+
+UInt32 PckTunesCDPlayer::getVolumeLimit() {
+ UInt32 value = 0;
+
+ if (!_pAction)
+ return value;
+
+ _pAction->action = kPocketTunesActionGetValue;
+ _pAction->data.getValueAction.which = kPtunesValueMaxVolume;
+
+ EvtGetEvent(&_eAction, evtNoWait);
+ if (PocketTunesCallSynch(_pAction) == errNone)
+ value = _pAction->data.getValueAction.value;
+
+ return value;
+}
+
+UInt32 PckTunesCDPlayer::getStatus() {
+ UInt32 status = kPtunesStopped;
+
+ if (!_isPlaying || !_pAction)
+ return status;
+
+ _pAction->action = kPocketTunesActionGetStatus;
+
+ EvtGetEvent(&_eAction, evtNoWait);
+ if (PocketTunesCallSynch(_pAction) == errNone)
+ status = _pAction->data.getStatusAction.status;
+
+ return status;
+}
+
+UInt32 PckTunesCDPlayer::getPosition(UInt32 deflt) {
+ UInt32 value = deflt;
+
+ if (!_isPlaying || !_pAction)
+ return value;
+
+ _pAction->action = kPocketTunesActionGetValue;
+ _pAction->data.getValueAction.which = kPtunesValueSongPosition;
+
+ EvtGetEvent(&_eAction, evtNoWait);
+ if (PocketTunesCallSynch(_pAction) == errNone)
+ value = _pAction->data.getValueAction.value;
+
+ return value;
+}
+
+UInt32 PckTunesCDPlayer::getDuration() {
+ UInt32 value = gVars->CD.defaultTrackLength;
+
+ if (!_isPlaying || !_pAction)
+ return value;
+
+ _pAction->action = kPocketTunesActionGetValue;
+ _pAction->data.getValueAction.which = kPtunesValueSongDuration;
+
+ EvtGetEvent(&_eAction, evtNoWait);
+ if (PocketTunesCallSynch(_pAction) == errNone)
+ value = _pAction->data.getValueAction.value;
+
+ return value;
+}
+
+void PckTunesCDPlayer::setPosition(UInt32 value) {
+ if (!_isPlaying)
+ return;
+
+ PocketTunesAction *pAction = AllocateAsynchronousActionStruct();
+ if (!pAction)
+ return;
+
+ pAction->action = kPocketTunesActionSetValue;
+ pAction->data.getValueAction.which = kPtunesValueSongPosition;
+ pAction->data.getValueAction.value = value;
+
+ EvtGetEvent(&_eAction, evtNoWait);
+ PocketTunesCall(pAction);
+}
+
+void PckTunesCDPlayer::setVolume(int volume) {
+ _volumeLevel = volume;
+
+ PocketTunesAction *pAction = AllocateAsynchronousActionStruct();
+ if (!pAction)
+ return;
+
+ pAction->action = kPocketTunesActionSetValue;
+ pAction->data.getValueAction.which = kPtunesValueVolume;
+ pAction->data.getValueAction.value = (_volumeLimit * volume) / 100;
+
+ EvtGetEvent(&_eAction, evtNoWait);
+ PocketTunesCall(pAction);
+}
+
+bool PckTunesCDPlayer::poll() {
+ return (_pckLoops != 0 && (getPosition(_pckTrackEndFrame) < _pckTrackEndFrame || getStatus() != kPtunesStopped));
+}
+
+void PckTunesCDPlayer::update() {
+
+ // stop replay upon request of stopCD()
+ if (_pckStopTime != 0 && _sys->getMillis() >= _pckStopTime) {
+ PocketTunesStop();
+ _pckLoops = 0;
+ _pckStopTime = 0;
+ _pckTrackEndFrame = 0;
+ return;
+ }
+
+ // not fully played
+ if (getPosition(_pckTrackEndFrame) < _pckTrackEndFrame && getStatus() != kPtunesStopped)
+ return;
+
+ PocketTunesStop();
+
+ if (_pckLoops == 0)
+ return;
+
+ // loop again ?
+ if (_pckLoops > 0)
+ _pckLoops--;
+
+ // loop if needed
+ if (_pckLoops != 0 && _isPlaying) {
+ if (_pckTrackStartFrame == 0 && _pckTrackDuration == 0) {
+ setPosition(0);
+ } else {
+ setPosition(_pckTrackStartFrame);
+ }
+
+ PocketTunesPlay();
+ }
+}
+
+void PckTunesCDPlayer::stop() { /* Stop CD Audio in 1/10th of a second */
+ _pckStopTime = _sys->getMillis() + 100;
+ _pckLoops = 0;
+ return;
+}
+
+void PckTunesCDPlayer::play(int track, int num_loops, int start_frame, int duration) {
+ if (!num_loops && !start_frame)
+ return;
+
+ EventType e;
+ Char nameP[256], fileP[100];
+ static const Char *ext[] = { "mp3", "ogg" };
+
+ _pckTrack = track;
+ _pckLoops = num_loops;
+ _pckTrackStartFrame = TO_MSECS(start_frame);
+ _pckTrackDuration = TO_MSECS(duration);
+
+ VFSVolumeGetLabel(gVars->VFS.volRefNum, nameP, 256);
+
+ StrPrintF(fileP, "/Palm/Programs/ScummVM/Audio/%s_%03ld.%s", gameP, (track + gVars->CD.firstTrack - 1), ext[gVars->CD.format]);
+
+ if (PocketTunesOpenFile(nameP, fileP, 0) == errNone) {
+ EvtGetEvent(&e, evtNoWait);
+ PocketTunesPauseIfPlaying();
+ _isPlaying = true;
+
+ if (_pckTrackStartFrame == 0 && _pckTrackDuration == 0) {
+ _pckTrackDuration = getDuration();
+ } else {
+ setPosition(_pckTrackStartFrame);
+ if (_pckTrackDuration == 0)
+ _pckTrackDuration = getDuration() - _pckTrackStartFrame;
+ }
+
+ PocketTunesPlay();
+
+ } else {
+ _isPlaying = false;
+ _pckTrackDuration = gVars->CD.defaultTrackLength * 1000;
+ }
+
+ _pckStopTime = 0;
+ _pckTrackEndFrame = _pckTrackStartFrame + _pckTrackDuration;
+}
diff --git a/backends/platform/PalmOS/Src/cd_pockettunes.h b/backends/platform/PalmOS/Src/cd_pockettunes.h
new file mode 100644
index 0000000000..81493d87ad
--- /dev/null
+++ b/backends/platform/PalmOS/Src/cd_pockettunes.h
@@ -0,0 +1,67 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-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 CD_POCKETTUNES_H
+ #define CD_POCKETTUNES_H
+
+ #include "cdaudio.h"
+ #include "pockettunes.h"
+
+ class PckTunesCDPlayer : public CDAudio {
+ public:
+ PckTunesCDPlayer(OSystem *sys);
+
+ bool init();
+ void release();
+
+ bool poll();
+ void update();
+ void play(int track, int num_loops, int start_frame, int duration);
+ void stop();
+
+ void setVolume(int volume);
+
+ private:
+ OSystem *_sys;
+ Char gameP[15];
+
+ PocketTunesAction *_pAction; // prevent memory fragmentation
+ EventType _eAction;
+
+ UInt32 getStatus();
+ void setPosition(UInt32 value);
+ UInt32 getDuration();
+ UInt32 getPosition(UInt32 deft);
+
+ UInt32 _volumeLimit;
+ UInt32 getVolumeLimit();
+
+ Boolean _isPlaying;
+ // cdrom
+ UInt16 _pckLoops, _pckTrack;
+ UInt32 _pckTrackStartFrame, _pckTrackEndFrame;
+ UInt32 _pckStopTime, _pckTrackDuration;
+ };
+
+ #endif
+
diff --git a/backends/platform/PalmOS/Src/cdaudio.h b/backends/platform/PalmOS/Src/cdaudio.h
new file mode 100644
index 0000000000..1c1d42e7e9
--- /dev/null
+++ b/backends/platform/PalmOS/Src/cdaudio.h
@@ -0,0 +1,65 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-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 CDAUDIO_H
+#define CDAUDIO_H
+
+#include "common/system.h"
+
+// CD frames are 1/75 sec
+#define CD_FPS 75
+#define TO_MSECS(frame) ((UInt32)((frame) * 1000 / CD_FPS))
+
+// consider frame at 1/1000 sec
+#define FROM_MIN(mins) ((UInt32)((mins) * 60 * 1000))
+#define FROM_SEC(secs) ((UInt32)((secs) * 1000))
+
+class CDAudio {
+public:
+ CDAudio() {
+ _isInitialized = false;
+ _volumeLevel = 100;
+ };
+
+ virtual bool init() = 0;
+ virtual void release() = 0;
+
+ // OSystem functions
+ virtual bool poll() = 0;
+ virtual void play(int track, int num_loops, int start_frame, int duration) = 0;
+ virtual void stop() = 0;
+ virtual void update() = 0;
+
+ // volume in percent
+ virtual void setVolume(int volume) { _volumeLevel = volume; }
+ virtual int getVolume() const { return _volumeLevel; }
+
+ virtual void upVolume(int value) {};
+ virtual void downVolume(int value) {};
+
+protected:
+ int _volumeLevel;
+ bool _isInitialized;
+};
+
+#endif
diff --git a/backends/platform/PalmOS/Src/extend.cpp b/backends/platform/PalmOS/Src/extend.cpp
new file mode 100644
index 0000000000..297eb28c16
--- /dev/null
+++ b/backends/platform/PalmOS/Src/extend.cpp
@@ -0,0 +1,108 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 <stdlib.h>
+#include "globals.h"
+
+#include "modulesrsc.h"
+
+const Char *SCUMMVM_SAVEPATH = "/PALM/Programs/ScummVM/Saved";
+
+void PalmFatalError(const Char *err) {
+ WinSetDrawWindow(WinGetDisplayWindow());
+ WinPalette(winPaletteSetToDefault,0,0,0);
+ WinSetBackColor(0);
+ WinEraseWindow();
+ FrmCustomAlert(FrmFatalErrorAlert, err, 0,0);
+}
+
+void DrawStatus(Boolean show) {
+ if (OPTIONS_TST(kOptDisableOnScrDisp))
+ return;
+
+ UInt8 x,y;
+ UInt32 depth, d1;
+ Boolean d2;
+ WinScreenMode(winScreenModeGet, &d1, &d1, &depth, &d2);
+ Int16 color = (show ? gVars->indicator.on : gVars->indicator.off);
+
+ if (depth == 8) {
+ UInt8 *src = (UInt8 *)BmpGetBits(WinGetBitmap(WinGetDisplayWindow()));
+ src += gVars->screenPitch + 1;
+ for(y=0; y < 4; y++) {
+ for(x=0; x < 4; x++)
+ src[x] = color;
+
+ src += gVars->screenPitch;
+ }
+
+ } else if (depth == 16) {
+ Int16 *src = (Int16 *)BmpGetBits(WinGetBitmap(WinGetDisplayWindow()));
+ src += gVars->screenPitch + 1;
+ for(y=0; y < 4; y++) {
+ for(x=0; x < 4; x++)
+ src[x] = color;
+
+ src += gVars->screenPitch;
+ }
+ }
+}
+
+#ifndef PALMOS_ARM
+
+// This is now required since some classes are now very big :)
+#include "MemGlue.h"
+void *operator new(UInt32 size) {
+ void *ptr = MemGluePtrNew(size);
+ MemSet(ptr, 0, size);
+ return ptr;
+}
+
+void *operator new [] (UInt32 size) {
+ void *ptr = MemGluePtrNew(size);
+ MemSet(ptr, 0, size);
+ return ptr;
+}
+#elif defined(COMPILE_OS5)
+
+__inline void *operator new(UInt32 size) {
+ void *ptr = malloc(size);
+ MemSet(ptr, 0, size);
+ return ptr;
+}
+
+__inline void *operator new [] (UInt32 size) {
+ void *ptr = malloc(size);
+ MemSet(ptr, 0, size);
+ return ptr;
+}
+
+__inline void operator delete(void *ptr) throw() {
+ if (ptr) free(ptr);
+}
+
+__inline void operator delete[](void *ptr) throw() {
+ if (ptr) free(ptr);
+}
+#endif
diff --git a/backends/platform/PalmOS/Src/extend.h b/backends/platform/PalmOS/Src/extend.h
new file mode 100644
index 0000000000..c5c74852a2
--- /dev/null
+++ b/backends/platform/PalmOS/Src/extend.h
@@ -0,0 +1,34 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 EXTEND_H
+#define EXTEND_H
+
+extern const Char *SCUMMVM_SAVEPATH;
+
+int main(int argc, char **argv);
+void PalmFatalError(const Char *err);
+void DrawStatus(Boolean show);
+
+#endif
diff --git a/backends/platform/PalmOS/Src/features.h b/backends/platform/PalmOS/Src/features.h
new file mode 100644
index 0000000000..f82c7692fa
--- /dev/null
+++ b/backends/platform/PalmOS/Src/features.h
@@ -0,0 +1,17 @@
+#ifndef __FEATURES_H__
+#define __FEATURES_H__
+
+enum {
+ ftrBufferOverlay = 1000,
+ ftrBufferBackup,
+ ftrBufferHotSwap
+};
+
+#define FREE_FTR(num) \
+ { \
+ UInt32 ptr; \
+ FtrGet(appFileCreator, num, &ptr); \
+ if (ptr) FtrPtrFree(appFileCreator, num); \
+ }
+
+#endif
diff --git a/backends/platform/PalmOS/Src/globals.h b/backends/platform/PalmOS/Src/globals.h
new file mode 100644
index 0000000000..07034aeb02
--- /dev/null
+++ b/backends/platform/PalmOS/Src/globals.h
@@ -0,0 +1,142 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 GLOBALS_H
+#define GLOBALS_H
+
+#include <VFSMgr.h>
+#include "stuffs.h"
+
+#ifdef PALMOS_68K
+
+#include "scumm_globals.h"
+
+enum {
+ kMemScummOldCostGames = 0,
+ kMemScummNewCostGames,
+ kMemSimon1Games,
+ kMemSimon2Games,
+
+ kMemGamesCount
+};
+
+#endif
+
+enum {
+ INIT_VIBRATOR = 1 << 0x00,
+ INIT_PA1LIB = 1 << 0x01,
+ INIT_ARM = 1 << 0x02,
+ INIT_AUTOOFF = 1 << 0x03,
+ INIT_GOLCD = 1 << 0x04
+};
+
+enum {
+ FM_QUALITY_LOW = 0,
+ FM_QUALITY_MED,
+ FM_QUALITY_HI,
+ FM_QUALITY_INI
+};
+
+typedef struct {
+ // common parts
+ UInt32 _4B, _2B;
+
+ // 4 bytes part
+ UInt32 startupMemory;
+ UInt32 slkVersion;
+ UInt32 options;
+ UInt32 screenPitch;
+
+ struct {
+ FileRef logFile;
+ UInt32 cacheSize;
+ UInt16 volRefNum;
+ UInt16 dummy;
+ } VFS;
+
+ // 2 bytes part
+ UInt16 HRrefNum;
+ UInt16 slkRefNum;
+ Coord screenWidth, screenHeight; // silkarea shown
+ Coord screenFullWidth, screenFullHeight; // silkarea hidden
+ Int16 autoSave;
+ struct {
+ Int16 on;
+ Int16 off;
+ Int16 showLED;
+ } indicator;
+
+ // 1 byte part
+ Boolean vibrator;
+ Boolean stdPalette;
+ Boolean filter;
+ Boolean stylusClick;
+ Boolean arrowKeys;
+ UInt8 init;
+ UInt8 palmVolume;
+ UInt8 fmQuality;
+ UInt8 advancedMode;
+
+#ifdef PALMOS_68K
+ // 68k only part
+ struct {
+ Boolean enable;
+ UInt8 driver, format;
+ UInt16 defaultTrackLength;
+ UInt16 firstTrack;
+ UInt8 volume;
+ } CD;
+
+ DmOpenRef globals[GBVARS_COUNT];
+ UInt32 memory[kMemGamesCount];
+#endif
+
+} GlobalsDataType, *GlobalsDataPtr;
+
+extern GlobalsDataPtr gVars;
+
+#define VARS_EXPORT() gVars->_4B = 6; \
+ gVars->_2B = 12;
+
+#define DO_VARS(z, t, o) \
+ { Int8 *tmp = (Int8 *)gVars + o + 8; \
+ for (Int8 cnt = 0; cnt < gVars->z; cnt++) \
+ { UInt##t val = *((UInt##t *)tmp); \
+ val = ByteSwap##t(val); \
+ *((UInt##t *)tmp) = val; \
+ tmp += (t / 8); \
+ } \
+ }
+
+#define OPTIONS_DEF() gVars->options
+
+#define HWR_INIT(x) (gVars->init & (x))
+#define HWR_SET(x) gVars->init |= (x)
+#define HWR_RST(x) gVars->init &= ~(x)
+#define HWR_RSTALL() gVars->init = 0
+#define HWR_GET() (gVars->init)
+
+#define ARM(x) gVars->arm[x]
+
+#endif
diff --git a/backends/platform/PalmOS/Src/i_zodiac.cpp b/backends/platform/PalmOS/Src/i_zodiac.cpp
new file mode 100644
index 0000000000..20b06aa61f
--- /dev/null
+++ b/backends/platform/PalmOS/Src/i_zodiac.cpp
@@ -0,0 +1,41 @@
+#include <PalmOS.h>
+#include "extend.h"
+
+#ifndef DISABLE_TAPWAVE
+
+#include "tapwave.h"
+#include "i_zodiac.h"
+
+// _twBmpV3 = offscreen bitmap, must be set before this call
+Err ZodiacInit(void **ptrP, Int32 w, Int32 h) {
+ Err e;
+
+ TwGfxSurfaceInfoType surface = {
+ sizeof(TwGfxSurfaceInfoType),
+ w, h, w * 2,
+ twGfxLocationAcceleratorMemory,
+ twGfxPixelFormatRGB565_LE
+ };
+
+ e = SysSetOrientation(sysOrientationLandscape);
+ e = TwGfxOpen((TwGfxType **)&_twGfxLib, NULL);
+ e = TwGfxAllocSurface( (TwGfxType *)_twGfxLib,
+ (TwGfxSurfaceType **)&_twSrc,
+ &surface);
+
+ e = TwGfxGetPalmDisplaySurface( (TwGfxType *)_twGfxLib,
+ (TwGfxSurfaceType **)&_twDst);
+
+ return e;
+}
+
+Err ZodiacRelease(void **ptrP) {
+ Err e = errNone;
+
+ TwGfxFreeSurface((TwGfxSurfaceType *)_twSrc);
+ TwGfxClose((TwGfxType *)_twGfxLib);
+
+ return e;
+}
+
+#endif
diff --git a/backends/platform/PalmOS/Src/i_zodiac.h b/backends/platform/PalmOS/Src/i_zodiac.h
new file mode 100644
index 0000000000..96a373a22e
--- /dev/null
+++ b/backends/platform/PalmOS/Src/i_zodiac.h
@@ -0,0 +1,12 @@
+#ifndef _I_ZODIAC_H_
+#define _I_ZODIAC_H_
+
+#define _twGfxLib ptrP[0]
+#define _twSrc ptrP[1]
+#define _twDst ptrP[2]
+#define _twBmpV3 ptrP[3]
+
+Err ZodiacInit(void **ptrP, Int32 w, Int32 h);
+Err ZodiacRelease(void **ptrP);
+
+#endif
diff --git a/backends/platform/PalmOS/Src/init_golcd.cpp b/backends/platform/PalmOS/Src/init_golcd.cpp
new file mode 100644
index 0000000000..63cc98e0ab
--- /dev/null
+++ b/backends/platform/PalmOS/Src/init_golcd.cpp
@@ -0,0 +1,121 @@
+#include <PalmOS.h>
+#include <PalmGoLCD.h>
+
+#include "init_golcd.h"
+
+// you can use this handle directly
+MemHandle gGoLcdH;
+
+Err GoLCDInit(MemHandle *goLcdH) {
+ if (!goLcdH)
+ return sysErrParamErr;
+
+ Err e;
+ UInt16 refNum;
+ Boolean loaded = false;
+ *goLcdH = NULL;
+
+ if (e = SysLibFind(goLcdLibName, &refNum))
+ loaded = !(e = SysLibLoad(goLcdLibType, goLcdLibCreator, &refNum));
+
+ if (!e)
+ if ((e = GoLcdLibOpen(refNum)))
+ SysLibRemove(refNum);
+
+ if (!e) {
+ MemHandle lcdH = MemHandleNew(sizeof(GoLCDType));
+ GoLCDType *lcdP = (GoLCDType *)MemHandleLock(lcdH);
+ MemSet(lcdP, MemHandleSize(lcdH), 0);
+ lcdP->refNum = refNum;
+ lcdP->timeout = GoLcdGetTimeout(refNum, goLcdPenTapMode);
+ MemPtrUnlock(lcdP);
+ *goLcdH = lcdH;
+ }
+
+ return e;
+}
+
+Err GoLCDRelease(MemHandle goLcdH) {
+ if (!goLcdH)
+ return sysErrParamErr;
+
+ Err e;
+ GoLCDType *lcdP = (GoLCDType *)MemHandleLock(goLcdH);
+ if (lcdP->refNum != sysInvalidRefNum)
+ if (!(e = GoLcdLibClose(lcdP->refNum)))
+ e = SysLibRemove(lcdP->refNum);
+
+ MemPtrUnlock(lcdP);
+ MemHandleFree(goLcdH);
+
+ return e;
+}
+
+Boolean GoLCDPointInBounds(MemHandle goLcdH, Coord x, Coord y) {
+ Boolean inBounds = false;
+
+ if (!goLcdH)
+ return inBounds;
+
+ GoLCDType *lcdP = (GoLCDType *)MemHandleLock(goLcdH);
+ inBounds = (lcdP->active && RctPtInRectangle(x, y, &(lcdP->bounds)));
+ MemPtrUnlock(lcdP);
+
+ return inBounds;
+}
+
+void GoLCDSetInk(MemHandle goLcdH, RGBColorType *inkP) {
+ if (!goLcdH)
+ return;
+
+ GoLCDType *lcdP = (GoLCDType *)MemHandleLock(goLcdH);
+ MemMove(&(lcdP->ink), inkP, sizeof(RGBColorType));
+ MemPtrUnlock(lcdP);
+}
+
+void GoLCDSetBounds(MemHandle goLcdH, RectangleType *boundsP) {
+ if (!goLcdH)
+ return;
+
+ GoLCDType *lcdP = (GoLCDType *)MemHandleLock(goLcdH);
+ MemMove(&(lcdP->bounds), boundsP, sizeof(RectangleType));
+ MemPtrUnlock(lcdP);
+}
+
+void GoLCDActivate(MemHandle goLcdH, Boolean active) {
+ if (!goLcdH)
+ return;
+
+ GoLCDType *lcdP = (GoLCDType *)MemHandleLock(goLcdH);
+
+ if (active) {
+ if (!lcdP->active) {
+ lcdP->active = true;
+ GoLcdSetInkState(lcdP->refNum, goLcdInkEnabled, goLcdColorOverride, &(lcdP->ink));
+ GoLcdSetBounds(lcdP->refNum, &(lcdP->bounds));
+ GoLcdSetGsiState(lcdP->refNum, goLcdGsiNormal, goLcdColorDefault, 0);
+ GoLcdSetTimeout(lcdP->refNum, goLcdPenTapMode, lcdP->timeout);
+ GoLcdSetStatus(lcdP->refNum, goLcdEnabled);
+ }
+
+ } else {
+ lcdP->active = false;
+ GoLcdSetInkState(lcdP->refNum, goLcdInkDisabled, goLcdColorDefault, 0);
+ GoLcdSetStatus(lcdP->refNum, goLcdDisabled);
+ }
+
+ MemPtrUnlock(lcdP);
+}
+
+Boolean GoLCDToggle(MemHandle goLcdH) {
+ if (!goLcdH)
+ return;
+
+ Boolean active;
+ GoLCDType *lcdP = (GoLCDType *)MemHandleLock(goLcdH);
+ active = lcdP->active;
+ MemPtrUnlock(lcdP);
+
+ GoLCDActivate(goLcdH, !active);
+ return (!active);
+}
diff --git a/backends/platform/PalmOS/Src/init_golcd.h b/backends/platform/PalmOS/Src/init_golcd.h
new file mode 100644
index 0000000000..7750a13a52
--- /dev/null
+++ b/backends/platform/PalmOS/Src/init_golcd.h
@@ -0,0 +1,22 @@
+#ifndef INIT_GOLCD_H
+#define INIT_GOLCD_H
+
+typedef struct {
+ Boolean active;
+ UInt16 refNum;
+ RectangleType bounds;
+ RGBColorType ink;
+ UInt32 timeout;
+} GoLCDType;
+
+extern MemHandle gGoLcdH;
+
+Err GoLCDInit(MemHandle *goLcdH);
+Err GoLCDRelease(MemHandle goLcdH);
+void GoLCDSetInk(MemHandle goLcdH, RGBColorType *inkP);
+void GoLCDSetBounds(MemHandle goLcdH, RectangleType *boundsP);
+void GoLCDActivate(MemHandle goLcdH, Boolean active);
+Boolean GoLCDToggle(MemHandle goLcdH);
+Boolean GoLCDPointInBounds(MemHandle goLcdH, Coord x, Coord y);
+
+#endif
diff --git a/backends/platform/PalmOS/Src/init_mathlib.cpp b/backends/platform/PalmOS/Src/init_mathlib.cpp
new file mode 100644
index 0000000000..88cf8a21f2
--- /dev/null
+++ b/backends/platform/PalmOS/Src/init_mathlib.cpp
@@ -0,0 +1,29 @@
+#include <PalmOS.h>
+
+#include "globals.h"
+#include "init_mathlib.h"
+#include "mathlib.h"
+
+Err MathlibInit() {
+ Err e;
+
+ if ((e = SysLibFind(MathLibName, &MathLibRef)))
+ if (e == sysErrLibNotFound) // couldn't find lib
+ e = SysLibLoad(LibType, MathLibCreator, &MathLibRef);
+
+ if (e) return sysErrLibNotFound;
+
+ e = MathLibOpen(MathLibRef, MathLibVersion);
+ return e;
+}
+
+void MathlibRelease() {
+ UInt16 useCount;
+
+ if (MathLibRef != sysInvalidRefNum) {
+ MathLibClose(MathLibRef, &useCount);
+
+ if (!useCount)
+ SysLibRemove(MathLibRef);
+ }
+} \ No newline at end of file
diff --git a/backends/platform/PalmOS/Src/init_mathlib.h b/backends/platform/PalmOS/Src/init_mathlib.h
new file mode 100644
index 0000000000..1901e1330d
--- /dev/null
+++ b/backends/platform/PalmOS/Src/init_mathlib.h
@@ -0,0 +1,7 @@
+#ifndef INIT_MATHLIB_H
+#define INIT_MATHLIB_H
+
+Err MathlibInit();
+void MathlibRelease();
+
+#endif
diff --git a/backends/platform/PalmOS/Src/init_pa1lib.cpp b/backends/platform/PalmOS/Src/init_pa1lib.cpp
new file mode 100644
index 0000000000..d5b0340cae
--- /dev/null
+++ b/backends/platform/PalmOS/Src/init_pa1lib.cpp
@@ -0,0 +1,32 @@
+#include <PalmOS.h>
+#include <Sonyclie.h>
+
+#include "pa1lib.h"
+#include "init_pa1lib.h"
+
+void *sndStateOnFuncP = NULL;
+void *sndStateOffFuncP = NULL;
+
+#define SndStateOn(a,b,c) if (sndStateOnFuncP)((sndStateOnType)(sndStateOnFuncP))(a, b, c);
+#define SndStateOff(a) if (sndStateOffFuncP)((sndStateOffType)(sndStateOffFuncP))(a);
+
+void Pa1libInit(UInt16 vol) {
+ Pa1Lib_Open();
+
+ // Doesn't work on T4xx and T6xx series ?
+ FtrGet(sonySysFtrCreatorSystem, sonySysFtrNumSystemAOutSndStateOnHandlerP, (UInt32*) &sndStateOnFuncP);
+ FtrGet(sonySysFtrCreatorSystem, sonySysFtrNumSystemAOutSndStateOffHandlerP, (UInt32*) &sndStateOffFuncP);
+
+ SndStateOn(aOutSndKindSp, vol, vol);
+ SndStateOn(aOutSndKindHp, vol, vol);
+
+ Pa1Lib_devHpVolume(vol, vol);
+ Pa1Lib_devSpVolume(vol);
+}
+
+void Pa1libRelease() {
+ SndStateOff(aOutSndKindSp);
+ SndStateOff(aOutSndKindHp);
+
+ Pa1Lib_Close();
+}
diff --git a/backends/platform/PalmOS/Src/init_pa1lib.h b/backends/platform/PalmOS/Src/init_pa1lib.h
new file mode 100644
index 0000000000..d5be11d278
--- /dev/null
+++ b/backends/platform/PalmOS/Src/init_pa1lib.h
@@ -0,0 +1,22 @@
+#ifndef INIT_PA1LIB_H
+#define INIT_PA1LIB_H
+
+// need to move this on a .h file
+#define sonySysFileCSystem 'SsYs' /* Sony overall System */
+#define sonySysFtrCreatorSystem sonySysFileCSystem
+
+#define sonySysFtrNumSystemBase 10000
+#define sonySysFtrNumSystemAOutSndStateOnHandlerP (sonySysFtrNumSystemBase + 4)
+#define sonySysFtrNumSystemAOutSndStateOffHandlerP (sonySysFtrNumSystemBase + 5)
+
+typedef void (*sndStateOnType) (UInt8 /* kind */, UInt8 /* L volume 0-31 */, UInt8 /* R volume 0-31 */);
+typedef void (*sndStateOffType) (UInt8 /* kind */);
+
+/* kind */
+#define aOutSndKindSp (0) /* Speaker volume */
+#define aOutSndKindHp (2) /* HeadPhone volume */
+
+void Pa1libInit(UInt16 vol);
+void Pa1libRelease();
+
+#endif
diff --git a/backends/platform/PalmOS/Src/init_palmos.cpp b/backends/platform/PalmOS/Src/init_palmos.cpp
new file mode 100644
index 0000000000..d789580e7a
--- /dev/null
+++ b/backends/platform/PalmOS/Src/init_palmos.cpp
@@ -0,0 +1,171 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 <PalmOS.h>
+
+#include "globals.h"
+#include "init_palmos.h"
+
+static UInt16 autoOffDelay;
+
+void PalmInit(UInt8 init) {
+ // set screen depth
+ UInt32 depth = 8;
+ WinScreenMode(winScreenModeSet, NULL, NULL, &depth, NULL);
+
+ if (init & INIT_AUTOOFF) {
+ autoOffDelay = SysSetAutoOffTime(0);
+ EvtResetAutoOffTimer();
+ }
+
+}
+
+void PalmRelease(UInt8 init) {
+ if (init & INIT_AUTOOFF) {
+ SysSetAutoOffTime(autoOffDelay);
+ EvtResetAutoOffTimer();
+ }
+}
+
+Err PalmHRInit(UInt32 depth) {
+ Err e;
+ UInt32 width = 320;
+ UInt32 height = 320;
+ Boolean color = true;
+
+ e = WinScreenMode (winScreenModeSet, &width, &height, &depth, &color);
+
+ if (!e) {
+ UInt32 attr;
+ WinScreenGetAttribute(winScreenDensity, &attr);
+ e = (attr != kDensityDouble);
+ }
+
+ return e;
+}
+
+void PalmHRRelease() {
+ // should i do something here ?
+}
+
+UInt8 PalmScreenSize(Coord *stdw, Coord *stdh, Coord *fullw, Coord *fullh) {
+ UInt32 ftr;
+ UInt8 mode = 0;
+
+ Coord sw = 160;
+ Coord sh = 160;
+
+ // Hi-Density present ?
+ if (!FtrGet(sysFtrCreator, sysFtrNumWinVersion, &ftr)) {
+ if (ftr >= 4) {
+ sw = 320;
+ sh = 320;
+ }
+ }
+
+ Coord fw = sw;
+ Coord fh = sh;
+
+ // if feature set, not set on Garmin iQue3600 ???
+ if (!(FtrGet(sysFtrCreator, sysFtrNumInputAreaFlags, &ftr))) {
+ if (ftr & grfFtrInputAreaFlagCollapsible) {
+ UInt16 curOrientation = SysGetOrientation();
+
+ if (curOrientation == sysOrientationLandscape ||
+ curOrientation == sysOrientationReverseLandscape
+ )
+ mode = PALM_LANDSCAPE;
+ else
+ mode = PALM_PORTRAIT;
+
+ PINSetInputTriggerState(pinInputTriggerEnabled);
+ PINSetInputAreaState(pinInputAreaClosed);
+ StatHide();
+
+ WinGetDisplayExtent(&fw, &fh);
+ fw *= 2;
+ fh *= 2;
+
+ StatShow();
+ PINSetInputAreaState(pinInputAreaOpen);
+ PINSetInputTriggerState(pinInputTriggerDisabled);
+ }
+ }
+
+ if (stdw) *stdw = sw;
+ if (stdh) *stdh = sh;
+ if (fullw) *fullw = fw;
+ if (fullh) *fullh = fh;
+
+ return mode;
+}
+
+void PalmGetMemory(UInt32* storageMemoryP, UInt32* dynamicMemoryP, UInt32 *storageFreeP, UInt32 *dynamicFreeP) {
+ UInt32 free, max;
+
+ Int16 i;
+ Int16 nCards;
+ UInt16 cardNo;
+ UInt16 heapID;
+
+ UInt32 storageMemory = 0;
+ UInt32 dynamicMemory = 0;
+ UInt32 storageFree = 0;
+ UInt32 dynamicFree = 0;
+
+ // Iterate through each card to support devices with multiple cards.
+ nCards = MemNumCards();
+
+ for (cardNo = 0; cardNo < nCards; cardNo++) {
+ // Iterate through the RAM heaps on a card (excludes ROM).
+ for (i=0; i< MemNumRAMHeaps(cardNo); i++) {
+ // Obtain the ID of the heap.
+ heapID = MemHeapID(cardNo, i);
+ // Calculate the total memory and free memory of the heap.
+ MemHeapFreeBytes(heapID, &free, &max);
+
+ // If the heap is dynamic, increment the dynamic memory total.
+ if (MemHeapDynamic(heapID)) {
+ dynamicMemory += MemHeapSize(heapID);
+ dynamicFree += free;
+
+ // The heap is nondynamic (storage ?).
+ } else {
+ storageMemory += MemHeapSize(heapID);
+ storageFree += free;
+ }
+ }
+ }
+ // Reduce the stats to KB. Round the results.
+ dynamicMemory = dynamicMemory / 1024L;
+ storageMemory = storageMemory / 1024L;
+
+ dynamicFree = dynamicFree / 1024L;
+ storageFree = storageFree / 1024L;
+
+ if (dynamicMemoryP) *dynamicMemoryP = dynamicMemory;
+ if (storageMemoryP) *storageMemoryP = storageMemory;
+ if (dynamicFreeP) *dynamicFreeP = dynamicFree;
+ if (storageFreeP) *storageFreeP = storageFree;
+}
diff --git a/backends/platform/PalmOS/Src/init_palmos.h b/backends/platform/PalmOS/Src/init_palmos.h
new file mode 100644
index 0000000000..a979f02cd3
--- /dev/null
+++ b/backends/platform/PalmOS/Src/init_palmos.h
@@ -0,0 +1,41 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 INIT_PALMOS_H
+#define INIT_PALMOS_H
+
+#define PALM_PORTRAIT 1
+#define PALM_LANDSCAPE 2
+
+void PalmInit(UInt8 init);
+void PalmRelease(UInt8 init);
+
+Err PalmHRInit(UInt32 depth);
+void PalmHRRelease();
+
+
+UInt8 PalmScreenSize(Coord *stdw, Coord *stdh, Coord *fullw, Coord *fullh);
+void PalmGetMemory(UInt32* storageMemoryP, UInt32* dynamicMemoryP, UInt32 *storageFreeP, UInt32 *dynamicFreeP);
+
+#endif \ No newline at end of file
diff --git a/backends/platform/PalmOS/Src/init_sony.cpp b/backends/platform/PalmOS/Src/init_sony.cpp
new file mode 100644
index 0000000000..3ba4e8b8d0
--- /dev/null
+++ b/backends/platform/PalmOS/Src/init_sony.cpp
@@ -0,0 +1,162 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 <PalmOS.h>
+#include <SonyClie.h>
+#include "init_sony.h"
+
+UInt16 SilkInit(UInt32 *retVersion) {
+ SonySysFtrSysInfoP sonySysFtrSysInfoP;
+ UInt32 version;
+ UInt16 slkRefNum;
+ Err e;
+
+ // Sony HiRes+
+ if (!(e = FtrGet(sonySysFtrCreator, sonySysFtrNumSysInfoP, (UInt32*)&sonySysFtrSysInfoP))) {
+ if (sonySysFtrSysInfoP->libr & sonySysFtrSysInfoLibrSilk) {
+
+ if ((e = SysLibFind(sonySysLibNameSilk, &slkRefNum)))
+ if (e == sysErrLibNotFound)
+ e = SysLibLoad(sonySysFileTSilkLib, sonySysFileCSilkLib, &slkRefNum);
+
+ if (!e) {
+ e = FtrGet(sonySysFtrCreator, sonySysFtrNumVskVersion, &version);
+ if (e) {
+ // v1 = NR
+ e = SilkLibOpen(slkRefNum);
+ if(!e) version = vskVersionNum1;
+
+ } else {
+ // v2 = NX/NZ
+ // v3 = UX...
+ e = VskOpen(slkRefNum);
+ }
+ }
+ } else
+ e = sysErrLibNotFound;
+ }
+
+ if (e) {
+ version = 0;
+ slkRefNum = sysInvalidRefNum;
+ }
+
+ *retVersion = version;
+ return slkRefNum;
+}
+
+void SilkRelease(UInt16 slkRefNum) {
+ if (slkRefNum != sysInvalidRefNum)
+ SilkLibClose(slkRefNum);
+}
+
+UInt16 SonyHRInit(UInt32 depth) {
+ SonySysFtrSysInfoP sonySysFtrSysInfoP;
+ Err e;
+ UInt16 HRrefNum;
+
+ // test if sonyHR is present
+ if (!(e = FtrGet(sonySysFtrCreator, sonySysFtrNumSysInfoP, (UInt32*)&sonySysFtrSysInfoP))) {
+ if (sonySysFtrSysInfoP->libr & sonySysFtrSysInfoLibrHR) { // HR available
+
+ if ((e = SysLibFind(sonySysLibNameHR, &HRrefNum)))
+ if (e == sysErrLibNotFound) // can't find lib
+ e = SysLibLoad( 'libr', sonySysFileCHRLib, &HRrefNum);
+
+ // Now we can use HR lib. Executes Open library.
+ if (!e) e = HROpen(HRrefNum);
+ }
+ }
+
+ if (e) HRrefNum = sysInvalidRefNum;
+
+ if (HRrefNum != sysInvalidRefNum) {
+ UInt32 width = hrWidth;
+ UInt32 height = hrHeight;
+ Boolean color = true;
+
+ e = HRWinScreenMode(HRrefNum, winScreenModeSet, &width, &height, &depth, &color);
+ // error ? release and return an invalid reference number
+ if (e) {
+ SonyHRRelease(HRrefNum);
+ HRrefNum = sysInvalidRefNum;
+ }
+ }
+
+ return HRrefNum;
+}
+
+void SonyHRRelease(UInt16 HRrefNum) {
+ if (HRrefNum != sysInvalidRefNum) {
+ HRClose(HRrefNum);
+ //SysLibRemove(HRrefNum); // never call this !!
+ }
+}
+
+UInt8 SonyScreenSize(UInt16 HRrefNum, Coord *stdw, Coord *stdh, Coord *fullw, Coord *fullh) {
+ UInt32 version;
+ UInt16 slkRefNum;
+ UInt8 mode = 0;
+
+ Coord sw = 160;
+ Coord sh = 160;
+ Coord fw = sw;
+ Coord fh = sh;
+
+ if (HRrefNum != sysInvalidRefNum) {
+ sw = hrWidth;
+ sh = hrHeight;
+ fw = sw;
+ fh = sh;
+
+ slkRefNum = SilkInit(&version);
+
+ if (slkRefNum != sysInvalidRefNum) {
+ if (version == vskVersionNum1) {
+ SilkLibEnableResize(slkRefNum);
+ SilkLibResizeDispWin(slkRefNum, silkResizeMax);
+ HRWinGetWindowExtent(HRrefNum, &fw, &fh);
+ SilkLibResizeDispWin(slkRefNum, silkResizeNormal);
+ SilkLibDisableResize(slkRefNum);
+ mode = SONY_PORTRAIT;
+
+ } else {
+ VskSetState(slkRefNum, vskStateEnable, (version == vskVersionNum2 ? vskResizeVertically : vskResizeHorizontally));
+ VskSetState(slkRefNum, vskStateResize, vskResizeNone);
+ HRWinGetWindowExtent(HRrefNum, &fw, &fh);
+ VskSetState(slkRefNum, vskStateResize, vskResizeMax);
+ VskSetState(slkRefNum, vskStateEnable, vskResizeDisable);
+ mode = (version == vskVersionNum3 ? SONY_LANDSCAPE : SONY_PORTRAIT);
+ }
+ SilkRelease(slkRefNum);
+ }
+ }
+
+ *stdw = sw;
+ *stdh = sh;
+ *fullw = fw;
+ *fullh = fh;
+
+ return mode;
+}
diff --git a/backends/platform/PalmOS/Src/init_sony.h b/backends/platform/PalmOS/Src/init_sony.h
new file mode 100644
index 0000000000..ed783cc9ff
--- /dev/null
+++ b/backends/platform/PalmOS/Src/init_sony.h
@@ -0,0 +1,39 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 INIT_SONY_H
+#define INIT_SONY_H
+
+#define SONY_PORTRAIT 1
+#define SONY_LANDSCAPE 2
+
+UInt16 SilkInit(UInt32 *retVersion);
+void SilkRelease(UInt16 slkRefNum);
+
+UInt16 SonyHRInit(UInt32 depth);
+void SonyHRRelease(UInt16 HRrefNum);
+
+UInt8 SonyScreenSize(UInt16 HRrefNum, Coord *stdw, Coord *stdh, Coord *fullw, Coord *fullh);
+
+#endif \ No newline at end of file
diff --git a/backends/platform/PalmOS/Src/init_stuffs.cpp b/backends/platform/PalmOS/Src/init_stuffs.cpp
new file mode 100644
index 0000000000..3b2ab9c869
--- /dev/null
+++ b/backends/platform/PalmOS/Src/init_stuffs.cpp
@@ -0,0 +1,130 @@
+#include <PalmOS.h>
+#include <SonyClie.h>
+#include <PalmNavigator.h>
+#include <HsExtCommon.h>
+#include <HsNavCommon.h>
+#include <PalmGoLCD.h>
+
+#include "globals.h" // for OPTIONS_DEF()
+#include "init_stuffs.h"
+#include "stuffs.h"
+
+#ifndef DISABLE_TAPWAVE
+#define __TWKEYS_H__ // bad hack
+#include "tapwave.h"
+#endif
+
+#ifndef DISABLE_PA1LIB
+#include "Pa1Lib.h"
+#endif
+
+#ifndef DISABLE_LIGHTSPEED
+#include "lightspeed_public.h"
+#endif
+
+// TODO : check the depth to set correct value
+// works only for 8bit for now
+UInt32 StuffsGetPitch(Coord fullw) {
+ UInt32 pitch = 0;
+
+ if (OPTIONS_TST(kOptModeHiDensity)) {
+ WinScreenGetAttribute(winScreenRowBytes, &pitch);
+
+ // FIXME : hack for TT3 simulator (and real ?) return 28 on landscape mode
+ if (pitch < fullw)
+ pitch = fullw;
+
+ } else {
+ pitch = fullw;
+ }
+
+ return pitch;
+}
+
+void *StuffsForceVG() {
+ // create an empty form to force the VG to be shown
+ FormType *frmP = FrmNewForm(4567, NULL, 0,0,0,0, false, 0, 0, 0);
+ FrmDrawForm(frmP);
+ return frmP;
+}
+
+void StuffsReleaseVG(void *vg) {
+ FrmDeleteForm((FormPtr)vg);
+}
+
+void StuffsGetFeatures() {
+ UInt32 ulProcessorType, manufacturer, version, depth;
+ Boolean color;
+
+#ifndef DISABLE_TAPWAVE
+ // Tapwave Zodiac libs ?
+ if (!FtrGet(sysFileCSystem, sysFtrNumOEMCompanyID, &manufacturer))
+ if (manufacturer == twCreatorID) {
+ OPTIONS_SET(kOptDeviceZodiac);
+ OPTIONS_SET(kOpt5WayNavigatorV2);
+ }
+#endif
+
+ // Hi-Density present ?
+ if (!FtrGet(sysFtrCreator, sysFtrNumWinVersion, &version))
+ if (version >= 4)
+ OPTIONS_SET(kOptModeHiDensity);
+
+ // OS5 ?
+ if (!FtrGet(sysFtrCreator, sysFtrNumROMVersion, &version))
+ if (version >= kOS5Version)
+ OPTIONS_SET(kOptDeviceOS5);
+
+ // ARM ?
+ if (!FtrGet(sysFileCSystem, sysFtrNumProcessorID, &ulProcessorType))
+ if (sysFtrNumProcessorIsARM(ulProcessorType))
+ OPTIONS_SET(kOptDeviceARM);
+ else if (ulProcessorType == sysFtrNumProcessorx86)
+ OPTIONS_SET(kOptDeviceProcX86);
+
+ // 5Way Navigator
+ if (!FtrGet(hsFtrCreator, hsFtrIDNavigationSupported, &version)) {
+ if (version >= 2)
+ OPTIONS_SET(kOpt5WayNavigatorV2);
+
+ } else if (!FtrGet(sysFtrCreator, sysFtrNumFiveWayNavVersion, &version)) {
+ if (version >= 2)
+ OPTIONS_SET(kOpt5WayNavigatorV2);
+ else
+ OPTIONS_SET(kOpt5WayNavigatorV1);
+
+ } else if (!FtrGet(navFtrCreator, navFtrVersion, &version)) {
+ if (version >= 2)
+ OPTIONS_SET(kOpt5WayNavigatorV2);
+ else
+ OPTIONS_SET(kOpt5WayNavigatorV1);
+ }
+
+ // Palm Sound API ?
+ if (!FtrGet(sysFileCSoundMgr, sndFtrIDVersion, &version))
+ if (version >= 1)
+ OPTIONS_SET(kOptPalmSoundAPI);
+
+#ifndef DISABLE_PA1LIB
+ // Sony Pa1 Sound API
+ if (Pa1Lib_Open()) {
+ OPTIONS_SET(kOptSonyPa1LibAPI);
+ Pa1Lib_Close();
+ }
+#endif
+
+ // GoLCD
+ if (!FtrGet(goLcdLibCreator, goLcdLibFtrNum, &version))
+ OPTIONS_SET(kOptGoLcdAPI);
+
+#ifndef DISABLE_LIGHTSPEED
+ // Lightspeed
+ if (LS_Installed())
+ OPTIONS_SET(kOptLightspeedAPI);
+#endif
+
+ // check for 16bit mode
+ if (!WinScreenMode(winScreenModeGetSupportedDepths, NULL, NULL, &depth, &color))
+ OPTIONS_SET(((depth & 0x8000) ? kOptMode16Bit : kOptNone));
+
+} \ No newline at end of file
diff --git a/backends/platform/PalmOS/Src/init_stuffs.h b/backends/platform/PalmOS/Src/init_stuffs.h
new file mode 100644
index 0000000000..124510eeac
--- /dev/null
+++ b/backends/platform/PalmOS/Src/init_stuffs.h
@@ -0,0 +1,11 @@
+#ifndef INIT_STUFFS_H
+#define INIT_STUFFS_H
+
+#define kOS5Version sysMakeROMVersion(5,0,0,sysROMStageRelease,0)
+
+void StuffsGetFeatures();
+UInt32 StuffsGetPitch(Coord fullw);
+void *StuffsForceVG();
+void StuffsReleaseVG(void *vg);
+
+#endif
diff --git a/backends/platform/PalmOS/Src/launcher/app.cpp b/backends/platform/PalmOS/Src/launcher/app.cpp
new file mode 100644
index 0000000000..784ad935c2
--- /dev/null
+++ b/backends/platform/PalmOS/Src/launcher/app.cpp
@@ -0,0 +1,374 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 <PalmOS.h>
+#include <SonyClie.h>
+
+#include "StarterRsc.h"
+#include "palmdefs.h"
+#include "start.h"
+#include "globals.h"
+#include "rumble.h"
+
+#include "mathlib.h"
+#include "formCards.h"
+#include "games.h"
+#include "extend.h"
+
+#include "modules.h"
+#include "init_mathlib.h"
+#include "init_sony.h"
+#include "init_palmos.h"
+#include "init_stuffs.h"
+
+/***********************************************************************
+ *
+ * FUNCTION: AppStart
+ *
+ * DESCRIPTION: Get the current application's preferences.
+ *
+ * PARAMETERS: nothing
+ *
+ * RETURNED: Err value 0 if nothing went wrong
+ *
+ * REVISION HISTORY:
+ *
+ *
+ ***********************************************************************/
+static Err AppStartCheckHRmode()
+{
+ Err e = errNone;
+ UInt32 depth = (OPTIONS_TST(kOptMode16Bit) && OPTIONS_TST(kOptDeviceOS5)) ? 16 : 8;
+
+ // try to init Sony HR mode then Palm HR mode
+ gVars->HRrefNum = SonyHRInit(depth);
+
+ if (gVars->HRrefNum == sysInvalidRefNum) {
+ if (e = PalmHRInit(depth))
+ FrmCustomAlert(FrmErrorAlert,"Your device doesn't seem to support Hi-Res or 256color mode.",0,0);
+ } else {
+ OPTIONS_SET(kOptDeviceClie);
+ }
+
+ return e;
+}
+
+static void AppStopHRMode() {
+ if (gVars->HRrefNum != sysInvalidRefNum)
+ SonyHRRelease(gVars->HRrefNum);
+ else
+ PalmHRRelease();
+}
+
+static Err AppStartCheckNotify() {
+ UInt32 romVersion;
+ Err err;
+
+ err = FtrGet(sysFtrCreator, sysFtrNumNotifyMgrVersion, &romVersion);
+ if (!err) {
+ UInt16 cardNo;
+ LocalID dbID;
+
+ err = SysCurAppDatabase(&cardNo, &dbID);
+ if (!err) {
+ SysNotifyRegister(cardNo, dbID, sysNotifyVolumeMountedEvent, NULL, sysNotifyNormalPriority, NULL);
+ SysNotifyRegister(cardNo, dbID, sysNotifyVolumeUnmountedEvent, NULL, sysNotifyNormalPriority, NULL);
+ SysNotifyRegister(cardNo, dbID, sonySysNotifyMsaEnforceOpenEvent, NULL, sysNotifyNormalPriority, NULL);
+ SysNotifyRegister(cardNo, dbID, sysNotifyDisplayResizedEvent, NULL, sysNotifyNormalPriority, NULL);
+ }
+ }
+
+ return err;
+}
+
+static Err AppStartLoadSkin() {
+ Err err = errNone;
+
+ // if skin defined, check if the db still exists
+ if (gPrefs->skin.dbID) {
+ UInt32 type, creator;
+
+ // check if the DB still exists
+ DmSearchStateType state;
+ UInt16 cardNo;
+ LocalID dbID;
+ Boolean found = false;
+ err = DmGetNextDatabaseByTypeCreator(true, &state, 'skin', appFileCreator, false, &cardNo, &dbID);
+ while (!err && dbID && !found) {
+ found = (cardNo == gPrefs->skin.cardNo && dbID == gPrefs->skin.dbID);
+ err = DmGetNextDatabaseByTypeCreator(false, &state, 'skin', appFileCreator, false, &cardNo, &dbID);
+ }
+
+ if (found) {
+ // remember to check version for next revision of the skin
+ err = DmDatabaseInfo (gPrefs->skin.cardNo, gPrefs->skin.dbID, gPrefs->skin.nameP, 0, 0, 0, 0, 0, 0, 0,0, &type, &creator);
+ if (!err)
+ if (type != 'skin' || creator != appFileCreator)
+ err = dmErrInvalidParam;
+ }
+
+ if (!found || err)
+ MemSet(&(gPrefs->skin),sizeof(SkinInfoType),0);
+ }
+
+ // No skin ? try to get the first one
+ if (!gPrefs->skin.dbID) {
+ DmSearchStateType stateInfo;
+
+ err = DmGetNextDatabaseByTypeCreator(true, &stateInfo, 'skin', appFileCreator, false, &gPrefs->skin.cardNo, &gPrefs->skin.dbID);
+ if (!err)
+ err = DmDatabaseInfo (gPrefs->skin.cardNo, gPrefs->skin.dbID, gPrefs->skin.nameP, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+ }
+
+ return err;
+}
+
+static Err AppStartCheckMathLib() {
+ Err e = MathlibInit();
+
+ switch (e) {
+ case errNone:
+ break;
+ case sysErrLibNotFound:
+ FrmCustomAlert(FrmErrorAlert,"Can't find MathLib !",0,0);
+ break;
+ default:
+ FrmCustomAlert(FrmErrorAlert,"Can't open MathLib !",0,0);
+ break;
+ }
+
+ return e;
+}
+
+static void AppStopMathLib() {
+ MathlibRelease();
+}
+
+static void AppStartCheckScreenSize() {
+ Coord sw, sh, fw, fh;
+ UInt8 mode;
+
+ OPTIONS_RST(kOptCollapsible);
+ OPTIONS_RST(kOptModeWide);
+ OPTIONS_RST(kOptModeLandscape);
+
+ // we are on a sony device
+ if (OPTIONS_TST(kOptDeviceClie)) {
+ mode = SonyScreenSize(gVars->HRrefNum, &sw, &sh, &fw, &fh);
+ if (mode) {
+ OPTIONS_SET(kOptModeWide);
+ OPTIONS_SET((mode == SONY_LANDSCAPE) ? kOptModeLandscape : kOptNone);
+ }
+ } else {
+ mode = PalmScreenSize(&sw, &sh, &fw, &fh);
+ if (mode) {
+ OPTIONS_SET(kOptCollapsible);
+ OPTIONS_SET(kOptModeWide);
+ OPTIONS_SET((mode == PALM_LANDSCAPE) ? kOptModeLandscape : kOptNone);
+ }
+ }
+
+ gVars->screenWidth = sw;
+ gVars->screenHeight = sh;
+
+ gVars->screenFullWidth = fw;
+ gVars->screenFullHeight = fh;
+}
+
+#define max(id,value) gVars->memory[id] = (gVars->memory[id] < value ? value : gVars->memory[id])
+#define min(id,value) gVars->memory[id] = (gVars->memory[id] > value ? value : gVars->memory[id])
+#define threshold 700
+
+static void AppStartSetMemory() {
+ UInt32 mem, def;
+ PalmGetMemory(0,0,0,&mem);
+ def = (mem > threshold) ? (mem - threshold) * 1024 : 0;
+ gVars->startupMemory = mem;
+
+ // default values
+ gVars->memory[kMemScummOldCostGames] = (mem >= 550 + threshold) ? 550000 : def;
+ gVars->memory[kMemScummNewCostGames] = (mem >= 2500 + threshold) ? 2500000 : def;
+ gVars->memory[kMemSimon1Games] = (mem >= 1000 + threshold) ? 1000000 : def;
+ gVars->memory[kMemSimon2Games] = (mem >= 2000 + threshold) ? 2000000 : def;
+
+ // set min required values
+ max(kMemScummOldCostGames, 450000);
+ max(kMemScummNewCostGames, 450000);
+ max(kMemSimon1Games, 500000);
+ max(kMemSimon2Games, 500000);
+
+ // set max required values
+ min(kMemScummOldCostGames, 550000);
+ min(kMemScummNewCostGames, 2500000);
+ min(kMemSimon1Games, 1000000);
+ min(kMemSimon2Games, 2000000);
+
+}
+
+#undef threshold
+#undef min
+#undef max
+
+Err AppStart(void) {
+ UInt16 dataSize, checkSize = 0;
+ Err error;
+
+#ifndef _DEBUG_ENGINE
+ // delete old databases
+ ModDelete();
+#endif
+
+ // allocate global variables space
+ dataSize = sizeof(GlobalsDataType);
+ gVars = (GlobalsDataType *)MemPtrNew(dataSize);
+ MemSet(gVars, dataSize, 0);
+
+ gVars->indicator.on = 255;
+ gVars->indicator.off = 0;
+ gVars->HRrefNum = sysInvalidRefNum;
+ gVars->VFS.volRefNum = vfsInvalidVolRef;
+ gVars->slkRefNum = sysInvalidRefNum;
+ gVars->options = kOptNone;
+
+ // set memory required by the differents engines
+ AppStartSetMemory();
+ StuffsGetFeatures();
+
+ // allocate prefs space
+ dataSize = sizeof(GlobalsPreferenceType);
+ gPrefs = (GlobalsPreferenceType *)MemPtrNew(dataSize);
+ MemSet(gPrefs, dataSize, 0);
+
+ // Read the saved preferences / saved-state information.
+ if (PrefGetAppPreferences(appFileCreator, appPrefID, NULL, &checkSize, true) == noPreferenceFound || checkSize != dataSize) {
+ // reset all elements
+ MemSet(gPrefs, dataSize, 0);
+
+ gPrefs->card.volRefNum = vfsInvalidVolRef;
+ gPrefs->card.cacheSize = 4096;
+ gPrefs->card.useCache = true;
+ gPrefs->card.showLED = true;
+
+ gPrefs->autoOff = true;
+ gPrefs->vibrator = RumbleExists();
+ gPrefs->debug = false;
+ gPrefs->exitLauncher = true;
+ gPrefs->stdPalette = OPTIONS_TST(kOptDeviceOS5);
+ gPrefs->stylusClick = true;
+
+ } else {
+ PrefGetAppPreferences(appFileCreator, appPrefID, gPrefs, &dataSize, true);
+ }
+
+ if (!OPTIONS_TST(kOptDeviceARM)) {
+ error = AppStartCheckMathLib();
+ if (error) return (error);
+ }
+
+ error = AppStartCheckHRmode();
+ if (error) return (error);
+
+ bDirectMode = (AppStartLoadSkin() != errNone);
+
+ // if volref previously defined, check if it's a valid one
+ if (gPrefs->card.volRefNum != vfsInvalidVolRef) {
+ VolumeInfoType volInfo;
+ Err err = VFSVolumeInfo(gPrefs->card.volRefNum, &volInfo);
+ if (err)
+ gPrefs->card.volRefNum = parseCards();
+ }
+ else
+ gPrefs->card.volRefNum = parseCards();
+ if (gPrefs->card.volRefNum != vfsInvalidVolRef)
+ CardSlotCreateDirs();
+
+ // open games database
+ error = GamOpenDatabase();
+ if (error) return (error);
+ GamImportDatabase();
+
+ AppStartCheckScreenSize();
+ AppStartCheckNotify(); // not fatal error if not avalaible
+
+ return error;
+}
+
+/***********************************************************************
+ *
+ * FUNCTION: AppStop
+ *
+ * DESCRIPTION: Save the current state of the application.
+ *
+ * PARAMETERS: nothing
+ *
+ * RETURNED: nothing
+ *
+ * REVISION HISTORY:
+ *
+ *
+ ***********************************************************************/
+static Err AppStopCheckNotify()
+{
+ UInt32 romVersion;
+ Err err;
+
+ err = FtrGet(sysFtrCreator, sysFtrNumNotifyMgrVersion, &romVersion);
+ if (!err) {
+ UInt16 cardNo;
+ LocalID dbID;
+
+ err = SysCurAppDatabase(&cardNo, &dbID);
+ if (!err) {
+ SysNotifyUnregister(cardNo, dbID, sysNotifyVolumeUnmountedEvent, sysNotifyNormalPriority);
+ SysNotifyUnregister(cardNo, dbID, sysNotifyVolumeMountedEvent, sysNotifyNormalPriority);
+ // sonySysNotifyMsaEnforceOpenEvent
+ SysNotifyUnregister(cardNo, dbID, sysNotifyDisplayResizedEvent, sysNotifyNormalPriority);
+ }
+ }
+
+ return err;
+}
+
+void AppStop(void) {
+ // Close all the open forms.
+ FrmCloseAllForms();
+ WinEraseWindow();
+ WinPalette(winPaletteSetToDefault, 0, 256, NULL);
+
+ // Close and move Game list database
+ GamCloseDatabase(false);
+
+ // Write the saved preferences / saved-state information. This data
+ // will saved during a HotSync backup.
+ SavePrefs();
+
+ // stop all
+ AppStopCheckNotify();
+ if (!OPTIONS_TST(kOptDeviceARM))
+ AppStopMathLib();
+ AppStopHRMode();
+
+ if (!bLaunched)
+ MemPtrFree(gVars);
+}
diff --git a/backends/platform/PalmOS/Src/launcher/forms/formCards.cpp b/backends/platform/PalmOS/Src/launcher/forms/formCards.cpp
new file mode 100644
index 0000000000..1c22ea647a
--- /dev/null
+++ b/backends/platform/PalmOS/Src/launcher/forms/formCards.cpp
@@ -0,0 +1,378 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 <PalmOS.h>
+#include <VFSMgr.h>
+#include <PmPalmOSNVFS.h>
+
+#include "start.h"
+#include "formTabs.h"
+#include "forms.h"
+#include "globals.h"
+
+typedef struct {
+ UInt16 volRefNum;
+ Char nameP[expCardInfoStringMaxLen+1];
+
+} CardInfoType;
+
+static TabType *myTabP;
+static UInt16 lastTab = 0;
+
+static void CardSlotFormExit(Boolean bSave);
+
+static void CardSlotFreeList() {
+ MemHandle cards = NULL;
+ MemHandle items = NULL;
+
+ if (itemsText && itemsList) {
+ cards = MemPtrRecoverHandle(itemsList);
+ items = MemPtrRecoverHandle(itemsText);
+
+ itemsText = NULL;
+ itemsList = NULL;
+ }
+ itemsType = ITEM_TYPE_UNKNOWN;
+
+ if (items && cards) {
+ MemHandleUnlock(items);
+ MemHandleUnlock(cards);
+ MemHandleFree(items);
+ MemHandleFree(cards);
+ }
+}
+
+static UInt16 CardSlotFillList(Boolean getRefNum = false) {
+ Err err;
+ UInt16 index;
+ UInt16 volRefNum;
+ UInt32 volIterator = vfsIteratorStart|vfsIncludePrivateVolumes;
+ UInt8 counter = 0;
+ UInt32 other = 1;
+
+ MemHandle items = NULL;
+ MemHandle cards = NULL;
+ CardInfoType *cardsInfo;
+
+ // retreive card infos
+ while (volIterator != vfsIteratorStop) {
+ err = VFSVolumeEnumerate(&volRefNum, &volIterator);
+
+ if (!err) {
+ Char labelP[expCardInfoStringMaxLen+1];
+ MemSet(labelP, expCardInfoStringMaxLen+1, 0);
+ err = VFSVolumeGetLabel(volRefNum, labelP, expCardInfoStringMaxLen+1);
+
+ if (err || StrLen(labelP) == 0) { // if no label try to retreive card type
+ VolumeInfoType volInfo;
+ err = VFSVolumeInfo(volRefNum, &volInfo);
+
+ if (!err) {
+ ExpCardInfoType info;
+ err = ExpCardInfo(volInfo.slotRefNum, &info);
+ StrCopy(labelP, info.deviceClassStr);
+ }
+
+ if (err) // if err default name
+ StrPrintF(labelP,"Other Card %ld", other++);
+ }
+
+ if (!cards)
+ cards = MemHandleNew(sizeof(CardInfoType));
+ else
+ MemHandleResize(cards, MemHandleSize(cards) + sizeof(CardInfoType));
+
+ cardsInfo = (CardInfoType *)MemHandleLock(cards);
+ cardsInfo[counter].volRefNum = volRefNum;
+ StrCopy(cardsInfo[counter].nameP, labelP);
+ MemHandleUnlock(cards);
+ counter++;
+ }
+ }
+
+ if (counter > 0) {
+ // set the list items ...
+ if (!getRefNum) {
+ for (index = 0; index < counter; index++) {
+ if (!items)
+ items = MemHandleNew(sizeof(Char *));
+ else
+ MemHandleResize(items, MemHandleSize(items) + sizeof(Char *));
+
+ itemsText = (Char **)MemHandleLock(items);
+ itemsText[index] = cardsInfo[index].nameP;
+ MemHandleUnlock(items);
+ }
+
+ // save globals
+ itemsText = (Char **)MemHandleLock(items);
+ itemsList = (void *)MemHandleLock(cards);
+ itemsType = ITEM_TYPE_CARD;
+
+ // ... or just return a default volRefNum
+ } else {
+ UInt16 volRefNum;
+
+ cardsInfo = (CardInfoType *)MemHandleLock(cards);
+ volRefNum = cardsInfo[0].volRefNum; // return the first volref
+ MemHandleUnlock(cards);
+ MemHandleFree(cards);
+
+ return volRefNum;
+ }
+
+ // no card found ? free old list in any or return invalid volref
+ } else {
+ if (!getRefNum)
+ CardSlotFreeList();
+ else
+ return vfsInvalidVolRef;
+ }
+
+ return counter;
+}
+
+static void ConfigTabInit(Boolean update = false) {
+ ListPtr listP;
+
+ UInt16 index;
+ Int16 selected = -1;
+
+ UInt16 counter = CardSlotFillList();
+ listP = (ListType *)GetObjectPtr(TabCardConfigSlotList);
+
+ // itemsText can be NULL if counter = 0
+ LstSetListChoices (listP, itemsText, counter);
+ if (counter > 0) {
+ CardInfoType *cardsInfo = (CardInfoType *)itemsList;
+
+ for (index = 0; index < counter; index++) {
+ if (cardsInfo[index].volRefNum == gPrefs->card.volRefNum) {
+ selected = index;
+ break;
+ }
+ }
+
+ LstSetSelection(listP, selected);
+ }
+
+ if (!update) {
+ FieldType *fld1P;
+ Char *cacheP;
+ MemHandle cacheH;
+
+ fld1P = (FieldType *)GetObjectPtr(TabCardConfigCacheSizeField);
+ cacheH = MemHandleNew(FldGetMaxChars(fld1P)+1);
+ cacheP = (Char *)MemHandleLock(cacheH);
+ StrIToA(cacheP, gPrefs->card.cacheSize / 1024);
+ MemHandleUnlock(cacheH);
+
+ FldSetTextHandle(fld1P, cacheH);
+ CtlSetValue((ControlType *)GetObjectPtr(TabCardConfigCacheCheckbox), gPrefs->card.useCache);
+ CtlSetValue((ControlType *)GetObjectPtr(TabCardConfigLedCheckbox), gPrefs->card.showLED);
+ // update ? redraw the list
+ } else {
+ WinScreenLock(winLockCopy);
+ LstDrawList(listP);
+ WinScreenUnlock();
+ }
+}
+
+static UInt16 ConfigTabSave() {
+ ControlType *cckP[2];
+ FieldType *fld1P;
+ ListPtr listP;
+ FormPtr frmP;
+ UInt16 updateCode = frmRedrawUpdateMS;
+
+ cckP[0] = (ControlType *)GetObjectPtr(TabCardConfigCacheCheckbox);
+ cckP[1] = (ControlType *)GetObjectPtr(TabCardConfigLedCheckbox);
+
+ gPrefs->card.useCache = CtlGetValue(cckP[0]);
+ gPrefs->card.showLED = CtlGetValue(cckP[1]);
+
+ fld1P = (FieldType *)GetObjectPtr(TabCardConfigCacheSizeField);
+ frmP = FrmGetActiveForm();
+ if (FldGetTextLength(fld1P) == 0 && CtlGetValue(cckP[0]) == 1) {
+ TabSetActive(frmP, myTabP, 0);
+ FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabCardConfigCacheSizeField));
+ FrmCustomAlert(FrmWarnAlert,"You must specified a cache size.",0,0);
+ return 0;
+ }
+ gPrefs->card.cacheSize = StrAToI(FldGetTextPtr(fld1P)) * 1024;
+
+ Int16 selected;
+ CardInfoType *cardsInfo = (CardInfoType *)itemsList;
+
+ listP = (ListType *)GetObjectPtr(TabCardConfigSlotList);
+ selected = LstGetSelection(listP);
+ if (selected == -1) {
+ gPrefs->card.volRefNum = vfsInvalidVolRef;
+ } else if (gPrefs->card.volRefNum != cardsInfo[selected].volRefNum) {
+ updateCode = frmRedrawUpdateMSImport;
+ gPrefs->card.volRefNum = cardsInfo[selected].volRefNum;
+ }
+
+ CardSlotCreateDirs();
+ CardSlotFreeList();
+
+ return updateCode;
+}
+
+static void GameListTabInit() {
+ CtlSetValue((ControlType *)GetObjectPtr(TabCardGameListMoveCheckbox), gPrefs->card.moveDB);
+ CtlSetValue((ControlType *)GetObjectPtr(TabCardGameListDeleteCheckbox), gPrefs->card.deleteDB);
+ CtlSetValue((ControlType *)GetObjectPtr(TabCardGameListConfirmCheckbox), gPrefs->card.confirmMoveDB);
+}
+
+static void GameListTabSave() {
+ ControlType *cckP[3];
+
+ cckP[0] = (ControlType *)GetObjectPtr(TabCardGameListMoveCheckbox);
+ cckP[1] = (ControlType *)GetObjectPtr(TabCardGameListDeleteCheckbox);
+ cckP[2] = (ControlType *)GetObjectPtr(TabCardGameListConfirmCheckbox);
+
+ gPrefs->card.moveDB = CtlGetValue(cckP[0]);
+ gPrefs->card.deleteDB = CtlGetValue(cckP[1]);
+ gPrefs->card.confirmMoveDB = CtlGetValue(cckP[2]);
+}
+
+static void GameListTabDraw() {
+ ControlType *cck1P;
+ FormPtr frmP = FrmGetActiveForm();
+
+ cck1P = (ControlType *)GetObjectPtr(TabCardGameListMoveCheckbox);
+ if (CtlGetValue(cck1P)) {
+ FrmShowObject(frmP, FrmGetObjectIndex (frmP, TabCardGameListDeleteCheckbox));
+ FrmShowObject(frmP, FrmGetObjectIndex (frmP, TabCardGameListConfirmCheckbox));
+ } else {
+ FrmHideObject(frmP, FrmGetObjectIndex (frmP, TabCardGameListDeleteCheckbox));
+ FrmHideObject(frmP, FrmGetObjectIndex (frmP, TabCardGameListConfirmCheckbox));
+ }
+}
+
+static void CardSlotFormInit() {
+ TabType *tabP;
+ FormType *frmP = FrmGetActiveForm();
+
+ tabP = TabNewTabs(2);
+ TabAddContent(&frmP, tabP, "Cards", TabCardConfigForm);
+ TabAddContent(&frmP, tabP, "Game List", TabCardGameListForm, GameListTabDraw);
+
+ ConfigTabInit();
+ GameListTabInit();
+
+ FrmDrawForm(frmP);
+ TabSetActive(frmP, tabP, lastTab);
+
+ myTabP = tabP;
+}
+
+static void CardSlotFormSave() {
+ UInt16 updateCode;
+ updateCode = ConfigTabSave();
+ if (!updateCode) return;
+ GameListTabSave();
+ CardSlotCreateDirs();
+
+ TabDeleteTabs(myTabP);
+ FrmReturnToMain(updateCode);
+}
+
+static void CardSlotFormCancel() {
+ CardSlotFreeList();
+ TabDeleteTabs(myTabP);
+ FrmReturnToMain();
+}
+
+Boolean CardSlotFormHandleEvent(EventPtr eventP) {
+ FormPtr frmP = FrmGetActiveForm();
+ Boolean handled = false;
+
+ switch (eventP->eType) {
+ case frmOpenEvent:
+ CardSlotFormInit();
+ handled = true;
+ break;
+
+ case frmCloseEvent:
+ CardSlotFormCancel();
+ handled = true;
+ break;
+
+ case ctlSelectEvent:
+ switch (eventP->data.ctlSelect.controlID)
+ {
+ case (CardSlotForm + 1) :
+ case (CardSlotForm + 2) :
+ lastTab = (eventP->data.ctlSelect.controlID - CardSlotForm - 1);
+ TabSetActive(frmP, myTabP, lastTab);
+ break;
+
+ case CardSlotOkButton:
+ CardSlotFormSave();
+ break;
+
+ case CardSlotCancelButton:
+ CardSlotFormCancel();
+ break;
+
+ case TabCardGameListMoveCheckbox:
+ GameListTabDraw();
+ break;
+ }
+ handled = true;
+ break;
+
+ default:
+ break;
+ }
+
+ return handled;
+}
+
+void CardSlotCreateDirs() {
+ if (gPrefs->card.volRefNum != vfsInvalidVolRef) {
+ VFSDirCreate(gPrefs->card.volRefNum, "/PALM");
+ VFSDirCreate(gPrefs->card.volRefNum, "/PALM/Programs");
+ VFSDirCreate(gPrefs->card.volRefNum, "/PALM/Programs/ScummVM");
+ VFSDirCreate(gPrefs->card.volRefNum, "/PALM/Programs/ScummVM/Games");
+ VFSDirCreate(gPrefs->card.volRefNum, "/PALM/Programs/ScummVM/Saved");
+ VFSDirCreate(gPrefs->card.volRefNum, "/PALM/Programs/ScummVM/Audio");
+ VFSDirCreate(gPrefs->card.volRefNum, "/PALM/Programs/ScummVM/Mods");
+ }
+}
+
+void CardSlotFormUpdate() {
+ if (itemsType == ITEM_TYPE_CARD) {
+ CardSlotFreeList();
+ ConfigTabInit(true);
+ }
+}
+
+UInt16 parseCards() {
+ UInt16 volRefNum = CardSlotFillList(true);
+ CardSlotFreeList();
+ return volRefNum;
+}
diff --git a/backends/platform/PalmOS/Src/launcher/forms/formCards.h b/backends/platform/PalmOS/Src/launcher/forms/formCards.h
new file mode 100644
index 0000000000..956ef86340
--- /dev/null
+++ b/backends/platform/PalmOS/Src/launcher/forms/formCards.h
@@ -0,0 +1,32 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 __FORMCARDS_H__
+#define __FORMCARDS_H__
+
+UInt16 parseCards();
+void CardSlotFormUpdate();
+void CardSlotCreateDirs();
+
+#endif
diff --git a/backends/platform/PalmOS/Src/launcher/forms/formEditGame.cpp b/backends/platform/PalmOS/Src/launcher/forms/formEditGame.cpp
new file mode 100644
index 0000000000..42953ad15e
--- /dev/null
+++ b/backends/platform/PalmOS/Src/launcher/forms/formEditGame.cpp
@@ -0,0 +1,611 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 <PalmOS.h>
+#include <VFSMgr.h>
+#include <FileBrowserLibCommon.h>
+#include <FileBrowserLib68K.h>
+
+#include "formTabs.h"
+#include "forms.h"
+
+#include "start.h"
+#include "games.h"
+#include "skin.h"
+
+#define errBadParam 0x1000
+
+static TabType *myTabP;
+static UInt16 lastTab = 0;
+
+UInt8 gFormEditMode;
+
+static void GameTabInit(GameInfoType *gameInfoP) {
+ FieldType *fld1P, *fld2P, *fld3P;
+ Char *nameP, *pathP, *gameP;
+ MemHandle nameH, pathH, gameH;
+ ListType *list1P;
+
+ list1P = (ListType *)GetObjectPtr(TabGameInfoEngineList);
+
+ itemsText = (Char **)MemPtrNew(ENGINE_COUNT * sizeof(Char *));
+ for (int i = 0; i < ENGINE_COUNT; i++)
+ itemsText[i] = (Char *)engines[i].nameP;
+ LstSetListChoices(list1P, itemsText, ENGINE_COUNT);
+
+ fld1P = (FieldType *)GetObjectPtr(TabGameInfoEntryNameField);
+ fld2P = (FieldType *)GetObjectPtr(TabGameInfoPathField);
+ fld3P = (FieldType *)GetObjectPtr(TabGameInfoGameField);
+
+ nameH = MemHandleNew(FldGetMaxChars(fld1P)+1);
+ pathH = MemHandleNew(FldGetMaxChars(fld2P)+1);
+ gameH = MemHandleNew(FldGetMaxChars(fld3P)+1);
+
+ nameP = (Char *)MemHandleLock(nameH);
+ pathP = (Char *)MemHandleLock(pathH);
+ gameP = (Char *)MemHandleLock(gameH);
+
+ if (gameInfoP) {
+ LstSetSelection(list1P, gameInfoP->engine);
+ LstSetTopItem(list1P, gameInfoP->engine);
+ StrCopy(nameP, gameInfoP->nameP);
+ StrCopy(pathP, gameInfoP->pathP);
+ StrCopy(gameP, gameInfoP->gameP);
+ } else {
+ LstSetSelection(list1P, 0);
+ MemSet(nameP,MemHandleSize(nameH),0);
+ MemSet(pathP,MemHandleSize(pathH),0);
+ MemSet(gameP,MemHandleSize(gameH),0);
+ }
+
+ CtlSetLabel((ControlType *)GetObjectPtr(TabGameInfoEnginePopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P)));
+
+ MemHandleUnlock(nameH);
+ MemHandleUnlock(pathH);
+ MemHandleUnlock(gameH);
+
+ FldSetTextHandle(fld1P, nameH);
+ FldSetTextHandle(fld2P, pathH);
+ FldSetTextHandle(fld3P, gameH);
+}
+
+static Err GameTabSave(GameInfoType *gameInfoP) {
+ FieldType *fld1P, *fld2P, *fld3P;
+ ListType *list1P;
+
+ FormType *frmP = FrmGetActiveForm();
+ list1P = (ListType *)GetObjectPtr(TabGameInfoEngineList);
+
+ fld1P = (FieldType *)GetObjectPtr(TabGameInfoEntryNameField);
+ fld2P = (FieldType *)GetObjectPtr(TabGameInfoPathField);
+ fld3P = (FieldType *)GetObjectPtr(TabGameInfoGameField);
+
+ FldTrimText(fld1P);
+ FldTrimText(fld2P);
+ FldTrimText(fld3P);
+
+ // test case
+ if (!gameInfoP) {
+ if (FldGetTextLength(fld1P) == 0) {
+ FrmCustomAlert(FrmWarnAlert,"You must specify an entry name.",0,0);
+ TabSetActive(frmP, myTabP, 0);
+ FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabGameInfoEntryNameField));
+ return errBadParam;
+
+ } else if (FldGetTextLength(fld2P) == 0) {
+ FrmCustomAlert(FrmWarnAlert,"You must specify a path.",0,0);
+ TabSetActive(frmP, myTabP, 0);
+ FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabGameInfoPathField));
+ return errBadParam;
+
+ } else if (FldGetTextLength(fld3P) == 0) {
+ FrmCustomAlert(FrmWarnAlert,"You must specify a game.",0,0);
+ TabSetActive(frmP, myTabP, 0);
+ FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabGameInfoGameField));
+ return errBadParam;
+ }
+
+ } else {
+ gameInfoP->engine = LstGetSelection(list1P);
+ StrCopy(gameInfoP->nameP, FldGetTextPtr(fld1P));
+ StrCopy(gameInfoP->pathP, FldGetTextPtr(fld2P));
+ StrCopy(gameInfoP->gameP, FldGetTextPtr(fld3P));
+
+ if (gameInfoP->pathP[StrLen(gameInfoP->pathP)-1] != '/')
+ StrCat(gameInfoP->pathP, "/");
+
+ MemPtrFree(itemsText);
+ itemsText = NULL;
+ }
+
+ return errNone;
+}
+
+static void DisplayInit(GameInfoType *gameInfoP) {
+ ListType *list1P, *list2P;
+
+ list1P = (ListType *)GetObjectPtr(TabGameDisplayGfxListList);
+ list2P = (ListType *)GetObjectPtr(TabGameDisplayRenderList);
+
+ if (gameInfoP) {
+ LstSetSelection(list1P, gameInfoP->gfxMode);
+ LstSetSelection(list2P, gameInfoP->renderMode);
+ CtlSetValue((ControlType *)GetObjectPtr(TabGameDisplayFilterCheckbox), gameInfoP->filter);
+ CtlSetValue((ControlType *)GetObjectPtr(TabGameDisplayFullscreenCheckbox), gameInfoP->fullscreen);
+ CtlSetValue((ControlType *)GetObjectPtr(TabGameDisplayAspectRatioCheckbox), gameInfoP->aspectRatio);
+
+ } else {
+ LstSetSelection(list1P, 0);
+ CtlSetValue((ControlType *)GetObjectPtr(TabGameDisplayFilterCheckbox), 0);
+ CtlSetValue((ControlType *)GetObjectPtr(TabGameDisplayFullscreenCheckbox), 0);
+ CtlSetValue((ControlType *)GetObjectPtr(TabGameDisplayAspectRatioCheckbox), 0);
+ }
+
+ CtlSetLabel((ControlType *)GetObjectPtr(TabGameDisplayGfxPopupPopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P)));
+ CtlSetLabel((ControlType *)GetObjectPtr(TabGameDisplayRenderPopTrigger), LstGetSelectionText(list2P, LstGetSelection(list2P)));
+}
+
+static Err DisplaySave(GameInfoType *gameInfoP) {
+ ListType *list1P, *list2P;
+ ControlType *cck6P, *cck7P, *cck8P;
+
+ FormType *frmP = FrmGetActiveForm();
+
+ list1P = (ListType *)GetObjectPtr(TabGameDisplayGfxListList);
+ list2P = (ListType *)GetObjectPtr(TabGameDisplayRenderList);
+ cck6P = (ControlType *)GetObjectPtr(TabGameDisplayFilterCheckbox);
+ cck7P = (ControlType *)GetObjectPtr(TabGameDisplayFullscreenCheckbox);
+ cck8P = (ControlType *)GetObjectPtr(TabGameDisplayAspectRatioCheckbox);
+
+ if (!gameInfoP) {
+ } else {
+ gameInfoP->gfxMode = LstGetSelection(list1P);
+ gameInfoP->renderMode = LstGetSelection(list2P);
+ gameInfoP->filter = CtlGetValue(cck6P);
+ gameInfoP->fullscreen = CtlGetValue(cck7P);
+ gameInfoP->aspectRatio = CtlGetValue(cck8P);
+ }
+
+ return errNone;
+}
+
+static void OptionsInit(GameInfoType *gameInfoP) {
+ ListType *list2P, *list3P;
+ FieldType *fld4P, *fld5P, *fld6P;
+ Char *loadP, *roomP, *talkP;
+ MemHandle loadH, roomH, talkH;
+
+ list2P = (ListType *)GetObjectPtr(TabGameOptionsLanguageList);
+ list3P = (ListType *)GetObjectPtr(TabGameOptionsPlatformList);
+
+ fld4P = (FieldType *)GetObjectPtr(TabGameOptionsLoadSlotField);
+ fld5P = (FieldType *)GetObjectPtr(TabGameOptionsStartRoomField);
+ fld6P = (FieldType *)GetObjectPtr(TabGameOptionsTalkSpeedField);
+
+ loadH = MemHandleNew(FldGetMaxChars(fld4P)+1);
+ roomH = MemHandleNew(FldGetMaxChars(fld5P)+1);
+ talkH = MemHandleNew(FldGetMaxChars(fld6P)+1);
+
+ loadP = (Char *)MemHandleLock(loadH);
+ roomP = (Char *)MemHandleLock(roomH);
+ talkP = (Char *)MemHandleLock(talkH);
+
+ if (gameInfoP) {
+ LstSetSelection(list2P, gameInfoP->language);
+ LstSetTopItem(list2P, gameInfoP->language);
+ LstSetSelection(list3P, gameInfoP->platform);
+ LstSetTopItem(list3P, gameInfoP->platform);
+
+ StrIToA(loadP, gameInfoP->loadSlot);
+ StrIToA(roomP, gameInfoP->bootValue);
+ StrIToA(talkP, gameInfoP->talkValue);
+
+ CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsLoadSlotCheckbox), gameInfoP->autoLoad);
+ CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsStartRoomCheckbox), gameInfoP->bootParam);
+ CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsAmigaCheckbox), gameInfoP->setPlatform);
+ CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsSubtitlesCheckbox), gameInfoP->subtitles);
+ CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsTalkSpeedCheckbox), gameInfoP->talkSpeed);
+
+ } else {
+ LstSetSelection(list2P, 0);
+ LstSetSelection(list3P, 0);
+
+ StrIToA(loadP, 0);
+ StrIToA(roomP, 0);
+ StrIToA(talkP, 60);
+
+ CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsLoadSlotCheckbox), 0);
+ CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsStartRoomCheckbox), 0);
+ CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsAmigaCheckbox), 0);
+ CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsSubtitlesCheckbox), 1);
+ CtlSetValue((ControlType *)GetObjectPtr(TabGameOptionsTalkSpeedCheckbox), 0);
+ }
+
+ MemHandleUnlock(loadH);
+ MemHandleUnlock(roomH);
+ MemHandleUnlock(talkH);
+
+ FldSetTextHandle(fld4P, loadH);
+ FldSetTextHandle(fld5P, roomH);
+ FldSetTextHandle(fld6P, talkH);
+
+ CtlSetLabel((ControlType *)GetObjectPtr(TabGameOptionsLanguagePopTrigger), LstGetSelectionText(list2P, LstGetSelection(list2P)));
+ CtlSetLabel((ControlType *)GetObjectPtr(TabGameOptionsPlatformPopTrigger), LstGetSelectionText(list3P, LstGetSelection(list3P)));
+}
+
+static Err OptionsSave(GameInfoType *gameInfoP) {
+ FieldType *fld4P, *fld5P, *fld6P;
+ ControlType *cck1P, *cck2P, *cck3P, *cck4P, *cck5P;
+ ListType *list2P, *list3P;
+
+ FormType *frmP = FrmGetActiveForm();
+
+ list2P = (ListType *)GetObjectPtr(TabGameOptionsLanguageList);
+ list3P = (ListType *)GetObjectPtr(TabGameOptionsPlatformList);
+
+ fld4P = (FieldType *)GetObjectPtr(TabGameOptionsLoadSlotField);
+ fld5P = (FieldType *)GetObjectPtr(TabGameOptionsStartRoomField);
+ fld6P = (FieldType *)GetObjectPtr(TabGameOptionsTalkSpeedField);
+
+ cck1P = (ControlType *)GetObjectPtr(TabGameOptionsLoadSlotCheckbox);
+ cck2P = (ControlType *)GetObjectPtr(TabGameOptionsStartRoomCheckbox);
+ cck3P = (ControlType *)GetObjectPtr(TabGameOptionsAmigaCheckbox);
+ cck4P = (ControlType *)GetObjectPtr(TabGameOptionsSubtitlesCheckbox);
+ cck5P = (ControlType *)GetObjectPtr(TabGameOptionsTalkSpeedCheckbox);
+
+ if (!gameInfoP) {
+ if (FldGetTextLength(fld5P) == 0 && CtlGetValue(cck2P) == 1) {
+ FrmCustomAlert(FrmWarnAlert,"You must specify a room number.",0,0);
+ TabSetActive(frmP, myTabP, 2);
+ FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabGameOptionsStartRoomField));
+ return errBadParam;
+
+ } else if (FldGetTextLength(fld6P) == 0 && CtlGetValue(cck5P) == 1) {
+ FrmCustomAlert(FrmWarnAlert,"You must specify a talk speed.",0,0);
+ TabSetActive(frmP, myTabP, 2);
+ FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabGameOptionsTalkSpeedField));
+ return errBadParam;
+ }
+ } else {
+ gameInfoP->language = LstGetSelection(list2P);
+ gameInfoP->platform = LstGetSelection(list3P);
+
+ gameInfoP->autoLoad = CtlGetValue(cck1P);
+ gameInfoP->bootParam = CtlGetValue(cck2P);
+ gameInfoP->setPlatform = CtlGetValue(cck3P);
+ gameInfoP->subtitles = (CtlGetValue(cck4P));
+ gameInfoP->talkSpeed = CtlGetValue(cck5P);
+
+ gameInfoP->loadSlot = StrAToI(FldGetTextPtr(fld4P));
+ gameInfoP->bootValue = StrAToI(FldGetTextPtr(fld5P));
+ gameInfoP->talkValue = StrAToI(FldGetTextPtr(fld6P));
+ }
+
+ return errNone;
+}
+
+static void GameManInit(UInt16 index) {
+ TabType *tabP;
+ FormType *frmP = FrmGetActiveForm();
+ UInt16 active = lastTab;
+
+ tabP = TabNewTabs(3);
+ TabAddContent(&frmP, tabP, "Game", TabGameInfoForm);
+ TabAddContent(&frmP, tabP, "Display", TabGameDisplayForm);
+ TabAddContent(&frmP, tabP, "Options", TabGameOptionsForm);
+
+ UInt16 refNum;
+ if (SysLibFind(kFileBrowserLibName, &refNum))
+ FrmRemoveObject(&frmP, FrmGetObjectIndex(frmP, TabGameInfoBrowsePushButton));
+
+ if (index != dmMaxRecordIndex) {
+ MemHandle recordH = NULL;
+ GameInfoType *gameInfoP;
+
+ recordH = DmQueryRecord(gameDB, index);
+ gameInfoP = (GameInfoType *)MemHandleLock(recordH);
+
+ GameTabInit(gameInfoP);
+ DisplayInit(gameInfoP);
+ OptionsInit(gameInfoP);
+
+ MemHandleUnlock(recordH);
+ CtlSetUsable((ControlType *)GetObjectPtr(GameEditDeleteButton),true);
+ } else {
+ active = 0; // new game ? start with first tab
+ GameTabInit(0);
+ DisplayInit(0);
+ OptionsInit(0);
+ CtlSetUsable((ControlType *)GetObjectPtr(GameEditDeleteButton),false);
+ }
+
+ FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabGameInfoEntryNameField));
+ FrmDrawForm(frmP);
+ TabSetActive(frmP, tabP, active);
+
+ myTabP = tabP;
+}
+
+static void GameManSave(UInt16 index) {
+ MemHandle recordH;
+ GameInfoType *gameInfoP, newGameInfo;
+
+ if (GameTabSave(0) == errBadParam) return;
+ if (DisplaySave(0) == errBadParam) return;
+ if (OptionsSave(0) == errBadParam) return;
+
+ if (index != dmMaxRecordIndex) {
+ recordH = DmGetRecord(gameDB, index);
+ gameInfoP = (GameInfoType *)MemHandleLock(recordH);
+ MemMove(&newGameInfo, gameInfoP, sizeof(GameInfoType));
+
+ } else {
+ index = dmMaxRecordIndex;
+ GamUnselect();
+ recordH = DmNewRecord(gameDB, &index, sizeof(GameInfoType));
+ gameInfoP = (GameInfoType *)MemHandleLock(recordH);
+
+ MemSet(&newGameInfo, sizeof(GameInfoType), 0);
+ newGameInfo.version = curItemVersion;
+ newGameInfo.icnID = 0xFFFF;
+ newGameInfo.selected = true;
+
+ // default sound data
+ newGameInfo.musicInfo.volume.palm = 50;
+ newGameInfo.musicInfo.volume.music = 192;
+ newGameInfo.musicInfo.volume.sfx = 192;
+ newGameInfo.musicInfo.volume.speech = 192;
+ newGameInfo.musicInfo.volume.audiocd = 50;
+
+ newGameInfo.musicInfo.sound.tempo = 100;
+ newGameInfo.musicInfo.sound.defaultTrackLength = 10;
+ newGameInfo.musicInfo.sound.firstTrack = 1;
+ }
+
+ GameTabSave(&newGameInfo);
+ DisplaySave(&newGameInfo);
+ OptionsSave(&newGameInfo);
+
+ DmWrite(gameInfoP, 0, &newGameInfo, sizeof(GameInfoType));
+
+ MemHandleUnlock(recordH);
+ DmReleaseRecord (gameDB, index, 0);
+ GamSortList();
+ // update list position
+ {
+ RectangleType rArea;
+ UInt16 posIndex, maxView;
+
+ // get the sorted index
+ index = GamGetSelected();
+ // if new item is out of the list bounds, change current list pos
+ SknGetListBounds(&rArea, NULL);
+ maxView = rArea.extent.y / sknInfoListItemSize;
+ posIndex = gPrefs->listPosition;
+
+ // if out of the current list position
+ if (!(index >= posIndex && index < (posIndex + maxView)))
+ gPrefs->listPosition = index; // this value is corrected in SknUpdateList if needed
+ }
+
+ TabDeleteTabs(myTabP);
+ FrmReturnToMain();
+ SknUpdateList();
+}
+
+/***********************************************************************
+ *
+ * FUNCTION: EditGameFormSave
+ * FUNCTION: EditGameFormInit
+ * FUNCTION: EditGameFormHandleEvent
+ *
+ * DESCRIPTION:
+ *
+ * REVISION HISTORY:
+ *
+ *
+ ***********************************************************************/
+void EditGameFormDelete(Boolean direct) {
+ UInt16 index = GamGetSelected();
+
+ if (index == dmMaxRecordIndex) {
+ FrmCustomAlert(FrmWarnAlert, "Select an entry first.",0,0);
+ return;
+
+ } else if (FrmCustomAlert(FrmConfirmAlert, "Do you really want to delete this entry ?", 0, 0) == FrmConfirmYes) {
+ DmRemoveRecord(gameDB, index);
+ if (!direct) {
+ TabDeleteTabs(myTabP);
+ FrmReturnToMain();
+ }
+ GamSortList();
+ SknUpdateList();
+ }
+}
+
+static void EditGameCancel() {
+ if (itemsText) {
+ MemPtrFree(itemsText);
+ itemsText = NULL;
+ }
+ TabDeleteTabs(myTabP);
+ FrmReturnToMain();
+}
+
+static void EditGameBowser() {
+ UInt16 refNum;
+ Err e;
+
+ ControlPtr butP = (ControlType *)GetObjectPtr(TabGameInfoBrowsePushButton);
+ CtlSetValue(butP, 0);
+
+ e = SysLibFind (kFileBrowserLibName, &refNum);
+ if (!e) {
+ e = FileBrowserLibOpen (refNum);
+ if (!e) {
+ UInt16 volRefNum = gPrefs->card.volRefNum;
+ Char *textP, *pathP = (Char *)MemPtrNew(kFileBrowserLibPathBufferSize);
+ pathP[0] = chrNull;
+
+ if (FileBrowserLibShowOpenDialog(refNum, &volRefNum, pathP, 0, 0, 0, "Game Data Path", kFileBrowserLibFlagNoFiles)) {
+ FieldPtr fldP;
+ MemHandle textH;
+ Int16 offset, copySize, maxSize;
+
+ fldP = (FieldType *)GetObjectPtr(TabGameInfoPathField);
+ maxSize = FldGetMaxChars(fldP);
+ textH = FldGetTextHandle(fldP);
+
+ FldSetTextHandle(fldP, NULL);
+ textP = (Char *)MemHandleLock(textH);
+ offset = 0;
+ copySize = StrLen(pathP);
+
+ if (StrNCaselessCompare(pathP, "/Palm/Programs/ScummVM/Games/", 29) == 0) {
+ if (StrLen(pathP) == 29) {
+ copySize = 1;
+ pathP[0] = '.';
+ } else {
+ copySize -= 29;
+ offset = 29;
+ }
+ }
+
+ if (copySize > maxSize)
+ copySize = maxSize;
+ StrNCopy(textP, pathP + offset, copySize);
+
+ MemHandleUnlock(textH);
+ FldSetTextHandle(fldP, textH);
+ FldDrawField(fldP);
+ FldGrabFocus(fldP);
+ }
+
+ MemPtrFree(pathP);
+ FileBrowserLibClose(refNum);
+ }
+ }
+}
+
+Boolean EditGameFormHandleEvent(EventPtr eventP) {
+ FormPtr frmP = FrmGetActiveForm();
+ Boolean handled = false;
+
+ switch (eventP->eType) {
+ case frmCloseEvent:
+ EditGameCancel();
+ handled = true;
+ break;
+
+ case frmOpenEvent:
+ switch (gFormEditMode) {
+ case edtModeAdd:
+ GameManInit(dmMaxRecordIndex);
+ break;
+ case edtModeEdit:
+ case edtModeParams:
+ default :
+ GameManInit(GamGetSelected());
+ break;
+ }
+ handled = true;
+ break;
+
+ case keyDownEvent:
+ switch (eventP->data.keyDown.chr) {
+ case chrLineFeed:
+ case chrCarriageReturn:
+ return true;
+ }
+ break;
+
+ case ctlSelectEvent:
+ switch (eventP->data.ctlSelect.controlID)
+ {
+ case (GameEditForm + 1) :
+ case (GameEditForm + 2) :
+ case (GameEditForm + 3) :
+ lastTab = (eventP->data.ctlSelect.controlID - GameEditForm - 1);
+ TabSetActive(frmP, myTabP, lastTab);
+ break;
+
+ case GameEditOKButton:
+ switch (gFormEditMode) {
+ case edtModeAdd:
+ GameManSave(dmMaxRecordIndex);
+ break;
+ case edtModeEdit:
+ case edtModeParams:
+ default :
+ GameManSave(GamGetSelected());
+ break;
+ }
+ break;
+
+ case GameEditCancelButton:
+ EditGameCancel();
+ break;
+
+ case GameEditDeleteButton:
+ EditGameFormDelete(false);
+ break;
+
+ case TabGameInfoBrowsePushButton:
+ EditGameBowser();
+ break;
+
+ case TabGameInfoEnginePopTrigger:
+ FrmList(eventP, TabGameInfoEngineList);
+ FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabGameInfoEngineList));
+ break;
+
+ case TabGameDisplayGfxPopupPopTrigger:
+ FrmList(eventP, TabGameDisplayGfxListList);
+ FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabGameDisplayGfxListList));
+ break;
+
+ case TabGameDisplayRenderPopTrigger:
+ FrmList(eventP, TabGameDisplayRenderList);
+ FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabGameDisplayRenderList));
+ break;
+
+ case TabGameOptionsLanguagePopTrigger:
+ FrmList(eventP, TabGameOptionsLanguageList);
+ FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabGameOptionsLanguageList));
+ break;
+
+ case TabGameOptionsPlatformPopTrigger:
+ FrmList(eventP, TabGameOptionsPlatformList);
+ FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabGameOptionsPlatformList));
+ break;
+ }
+ handled = true;
+ break;
+
+ default:
+ break;
+ }
+
+ return handled;
+}
diff --git a/backends/platform/PalmOS/Src/launcher/forms/formEditGame.h b/backends/platform/PalmOS/Src/launcher/forms/formEditGame.h
new file mode 100644
index 0000000000..2e76e7ebb5
--- /dev/null
+++ b/backends/platform/PalmOS/Src/launcher/forms/formEditGame.h
@@ -0,0 +1,38 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 __FORMEDITGAME_H__
+#define __FORMEDITGAME_H__
+
+// edit game mode
+enum {
+ edtModeAdd,
+ edtModeEdit,
+ edtModeParams
+};
+
+extern UInt8 gFormEditMode;
+void EditGameFormDelete(Boolean direct);
+
+#endif
diff --git a/backends/platform/PalmOS/Src/launcher/forms/formMisc.cpp b/backends/platform/PalmOS/Src/launcher/forms/formMisc.cpp
new file mode 100644
index 0000000000..9b4009294c
--- /dev/null
+++ b/backends/platform/PalmOS/Src/launcher/forms/formMisc.cpp
@@ -0,0 +1,272 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 <PalmOS.h>
+
+#include "start.h"
+#include "formTabs.h"
+#include "forms.h"
+#include "globals.h"
+
+static TabType *myTabP;
+static UInt16 lastTab = 0;
+
+static Boolean ScummVMTabSave() {
+ FieldType *fld1P, *fld2P;
+ ControlType *cckP[11];
+ FormPtr frmP;
+
+ fld1P = (FieldType *)GetObjectPtr(TabMiscScummVMDebugLevelField);
+ fld2P = (FieldType *)GetObjectPtr(TabMiscScummVMAutosaveField);
+
+ cckP[0] = (ControlType *)GetObjectPtr(TabMiscScummVMAutosaveCheckbox);
+ cckP[3] = (ControlType *)GetObjectPtr(TabMiscScummVMDebugCheckbox);
+ cckP[6] = (ControlType *)GetObjectPtr(TabMiscScummVMDemoCheckbox);
+ cckP[9] = (ControlType *)GetObjectPtr(TabMiscScummVMCopyProtectionCheckbox);
+ cckP[10]= (ControlType *)GetObjectPtr(TabMiscScummVMAltIntroCheckbox);
+
+ frmP = FrmGetActiveForm();
+ if (FldGetTextLength(fld1P) == 0 && CtlGetValue(cckP[3]) == 1) {
+ TabSetActive(frmP, myTabP, 1);
+ FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabMiscScummVMDebugLevelField));
+ FrmCustomAlert(FrmWarnAlert,"You must specify a debug level.",0,0);
+ return false;
+
+ } else if (FldGetTextLength(fld2P) == 0 && CtlGetValue(cckP[0]) == 1) {
+ TabSetActive(frmP, myTabP, 1);
+ FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabMiscScummVMAutosaveField));
+ FrmCustomAlert(FrmWarnAlert,"You must specify a period.",0,0);
+ return false;
+ }
+
+ gPrefs->autoSave = CtlGetValue(cckP[0]);
+ gPrefs->debug = CtlGetValue(cckP[3]);
+ gPrefs->demoMode = CtlGetValue(cckP[6]);
+ gPrefs->copyProtection = CtlGetValue(cckP[9]);
+ gPrefs->altIntro = CtlGetValue(cckP[10]);
+
+ gPrefs->debugLevel = StrAToI(FldGetTextPtr(fld1P));
+ gPrefs->autoSavePeriod = StrAToI(FldGetTextPtr(fld2P));
+
+ return true;
+}
+
+static void PalmOSTabSave() {
+ ControlType *cckP[11];
+
+ if (OPTIONS_TST(kOptDeviceARM) && !OPTIONS_TST(kOptDeviceZodiac)) {
+ cckP[3]= (ControlType *)GetObjectPtr(TabMiscPalmOSAdvancedCheckbox);
+ gPrefs->advancedMode = CtlGetValue(cckP[3]);
+ }
+
+ if (!OPTIONS_TST(kOptDeviceARM)) {
+ cckP[2] = (ControlType *)GetObjectPtr(TabMiscPalmOSStdPaletteCheckbox);
+ gPrefs->stdPalette = CtlGetValue(cckP[2]);
+ }
+
+ cckP[0] = (ControlType *)GetObjectPtr(TabMiscPalmOSVibratorCheckbox);
+ cckP[1] = (ControlType *)GetObjectPtr(TabMiscPalmOSNoAutoOffCheckbox);
+ cckP[4] = (ControlType *)GetObjectPtr(TabMiscPalmOSLargerStackCheckbox);
+ cckP[5] = (ControlType *)GetObjectPtr(TabMiscPalmOSExitLauncherCheckbox);
+ cckP[6] = (ControlType *)GetObjectPtr(TabMiscPalmOSStylusClickCheckbox);
+ cckP[7] = (ControlType *)GetObjectPtr(TabMiscPalmOSArrowCheckbox);
+
+ gPrefs->vibrator = CtlGetValue(cckP[0]);
+ gPrefs->autoOff = !CtlGetValue(cckP[1]);
+ gPrefs->setStack = CtlGetValue(cckP[4]);
+ gPrefs->exitLauncher = CtlGetValue(cckP[5]);
+ gPrefs->stylusClick = !CtlGetValue(cckP[6]);
+ gPrefs->arrowKeys = CtlGetValue(cckP[7]);
+}
+
+static void ExtsTabSave() {
+ ControlType *cckP[2];
+
+ if (OPTIONS_TST(kOptLightspeedAPI)) {
+ ListType *list1P = (ListType *)GetObjectPtr(TabMiscExtsLightspeedList);
+ cckP[0] = (ControlType *)GetObjectPtr(TabMiscExtsLightspeedCheckbox);
+
+ gPrefs->lightspeed.enable = CtlGetValue(cckP[0]);
+ gPrefs->lightspeed.mode = LstGetSelection(list1P);
+ }
+ if (OPTIONS_TST(kOptGoLcdAPI)) {
+ cckP[1] = (ControlType *)GetObjectPtr(TabMiscExtsGolcdCheckbox);
+ gPrefs->goLCD = CtlGetValue(cckP[1]);
+ }
+}
+
+static void ScummVMTabInit() {
+ FieldType *fld1P, *fld2P;
+ Char *levelP, *periodP;
+ MemHandle levelH, periodH;
+
+ CtlSetValue((ControlType *)GetObjectPtr(TabMiscScummVMAutosaveCheckbox), gPrefs->autoSave);
+ CtlSetValue((ControlType *)GetObjectPtr(TabMiscScummVMDebugCheckbox), gPrefs->debug);
+ CtlSetValue((ControlType *)GetObjectPtr(TabMiscScummVMDemoCheckbox), gPrefs->demoMode);
+ CtlSetValue((ControlType *)GetObjectPtr(TabMiscScummVMCopyProtectionCheckbox), gPrefs->copyProtection);
+ CtlSetValue((ControlType *)GetObjectPtr(TabMiscScummVMAltIntroCheckbox), gPrefs->altIntro);
+
+ fld1P = (FieldType *)GetObjectPtr(TabMiscScummVMDebugLevelField);
+ fld2P = (FieldType *)GetObjectPtr(TabMiscScummVMAutosaveField);
+
+ levelH = MemHandleNew(FldGetMaxChars(fld1P)+1);
+ levelP = (Char *)MemHandleLock(levelH);
+ StrIToA(levelP, gPrefs->debugLevel);
+ MemHandleUnlock(levelH);
+
+ periodH = MemHandleNew(FldGetMaxChars(fld2P)+1);
+ periodP = (Char *)MemHandleLock(periodH);
+ StrIToA(periodP, gPrefs->autoSavePeriod);
+ MemHandleUnlock(periodH);
+
+ FldSetTextHandle(fld1P, levelH);
+ FldSetTextHandle(fld2P, periodH);
+}
+
+static void PalmOSTabInit() {
+ if (OPTIONS_TST(kOptDeviceARM) && !OPTIONS_TST(kOptDeviceZodiac))
+ CtlSetValue((ControlType *)GetObjectPtr(TabMiscPalmOSAdvancedCheckbox), gPrefs->advancedMode);
+
+ if (!OPTIONS_TST(kOptDeviceARM))
+ CtlSetValue((ControlType *)GetObjectPtr(TabMiscPalmOSStdPaletteCheckbox), gPrefs->stdPalette);
+
+ CtlSetValue((ControlType *)GetObjectPtr(TabMiscPalmOSExitLauncherCheckbox), gPrefs->exitLauncher);
+ CtlSetValue((ControlType *)GetObjectPtr(TabMiscPalmOSLargerStackCheckbox), gPrefs->setStack);
+ CtlSetValue((ControlType *)GetObjectPtr(TabMiscPalmOSVibratorCheckbox), gPrefs->vibrator);
+ CtlSetValue((ControlType *)GetObjectPtr(TabMiscPalmOSNoAutoOffCheckbox), !gPrefs->autoOff);
+ CtlSetValue((ControlType *)GetObjectPtr(TabMiscPalmOSStylusClickCheckbox), !gPrefs->stylusClick);
+ CtlSetValue((ControlType *)GetObjectPtr(TabMiscPalmOSArrowCheckbox), gPrefs->arrowKeys);
+}
+
+static void ExtsTabInit() {
+ if (OPTIONS_TST(kOptLightspeedAPI)) {
+ ListType *list1P = (ListType *)GetObjectPtr(TabMiscExtsLightspeedList);
+ LstSetSelection(list1P, gPrefs->lightspeed.mode);
+ CtlSetLabel((ControlType *)GetObjectPtr(TabMiscExtsLightspeedPopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P)));
+ CtlSetValue((ControlType *)GetObjectPtr(TabMiscExtsLightspeedCheckbox), gPrefs->lightspeed.enable);
+ }
+
+ if (OPTIONS_TST(kOptGoLcdAPI))
+ CtlSetValue((ControlType *)GetObjectPtr(TabMiscExtsGolcdCheckbox), gPrefs->goLCD);
+}
+
+static void MiscFormSave() {
+ if (!ScummVMTabSave()) return;
+ PalmOSTabSave();
+ ExtsTabSave();
+
+ TabDeleteTabs(myTabP);
+ FrmReturnToMain();
+}
+
+static void MiscFormInit() {
+ TabType *tabP;
+ FormType *frmP = FrmGetActiveForm();
+ UInt8 extsCnt = 2;
+
+ tabP = TabNewTabs(3);
+ TabAddContent(&frmP, tabP, "PalmOS", TabMiscPalmOSForm);
+ TabAddContent(&frmP, tabP, "ScummVM", TabMiscScummVMForm);
+ TabAddContent(&frmP, tabP, "More ...", TabMiscExtsForm);
+
+ if (!OPTIONS_TST(kOptDeviceARM) || OPTIONS_TST(kOptDeviceZodiac))
+ FrmRemoveObject(&frmP, FrmGetObjectIndex(frmP, TabMiscPalmOSAdvancedCheckbox));
+
+ if (OPTIONS_TST(kOptDeviceARM))
+ FrmRemoveObject(&frmP, FrmGetObjectIndex(frmP, TabMiscPalmOSStdPaletteCheckbox));
+
+ if (!OPTIONS_TST(kOptGoLcdAPI)) {
+ FrmRemoveObject(&frmP, FrmGetObjectIndex(frmP, TabMiscExtsGolcdCheckbox));
+ // move lightspeed
+ TabMoveUpObject(frmP, TabMiscExtsLightspeedCheckbox, 12);
+ TabMoveUpObject(frmP, TabMiscExtsLightspeedPopTrigger, 12);
+ TabMoveUpObject(frmP, TabMiscExtsLightspeedList, 12);
+ TabMoveUpObject(frmP, TabMiscExtsNothingLabel, 12);
+ extsCnt--;
+ }
+
+ if (!OPTIONS_TST(kOptLightspeedAPI)) {
+ FrmRemoveObject(&frmP, FrmGetObjectIndex(frmP, TabMiscExtsLightspeedCheckbox));
+// FrmRemoveObject(&frmP, FrmGetObjectIndex(frmP, TabMiscExtsLightspeedList)); // cannot remove this ?
+ FrmRemoveObject(&frmP, FrmGetObjectIndex(frmP, TabMiscExtsLightspeedPopTrigger));
+ TabMoveUpObject(frmP, TabMiscExtsNothingLabel, 12);
+ extsCnt--;
+ }
+
+ if (extsCnt)
+ FrmRemoveObject(&frmP, FrmGetObjectIndex(frmP, TabMiscExtsNothingLabel));
+
+ PalmOSTabInit();
+ ScummVMTabInit();
+ ExtsTabInit();
+
+ FrmDrawForm(frmP);
+ TabSetActive(frmP, tabP, lastTab);
+
+ myTabP = tabP;
+}
+
+Boolean MiscFormHandleEvent(EventPtr eventP) {
+ FormPtr frmP = FrmGetActiveForm();
+ Boolean handled = false;
+
+ switch (eventP->eType) {
+ case frmOpenEvent:
+ MiscFormInit();
+ handled = true;
+ break;
+
+ case ctlSelectEvent:
+ switch (eventP->data.ctlSelect.controlID)
+ {
+ case (MiscForm + 1) :
+ case (MiscForm + 2) :
+ case (MiscForm + 3) :
+ lastTab = (eventP->data.ctlSelect.controlID - MiscForm - 1);
+ TabSetActive(frmP, myTabP, lastTab);
+ break;
+
+ case TabMiscExtsLightspeedPopTrigger:
+ FrmList(eventP, TabMiscExtsLightspeedList);
+ FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabMiscExtsLightspeedList));
+ break;
+
+ case MiscOKButton:
+ MiscFormSave();
+ break;
+
+ case MiscCancelButton:
+ TabDeleteTabs(myTabP);
+ FrmReturnToMain();
+ break;
+ }
+ handled = true;
+ break;
+
+ default:
+ break;
+ }
+
+ return handled;
+}
diff --git a/backends/platform/PalmOS/Src/launcher/forms/formSkins.cpp b/backends/platform/PalmOS/Src/launcher/forms/formSkins.cpp
new file mode 100644
index 0000000000..b4c1e222d0
--- /dev/null
+++ b/backends/platform/PalmOS/Src/launcher/forms/formSkins.cpp
@@ -0,0 +1,267 @@
+#include <PalmOS.h>
+
+#include "palmdefs.h"
+#include "start.h"
+#include "forms.h"
+#include "skin.h"
+#include "globals.h"
+
+static Int16 SkinsFormCompare(SkinInfoType *a, SkinInfoType *b, SortRecordInfoPtr, SortRecordInfoPtr, MemHandle) {
+ return StrCompare(a->nameP, b->nameP);
+}
+
+static void SkinsFormInit(Boolean bDraw) {
+ MemHandle skins = NULL;
+ SkinInfoType *skinsInfo;
+ UInt16 numSkins = 0;
+
+ FormPtr frmP;
+ ListType *listP;
+ MemHandle items = NULL;
+ ControlType *cck1P;
+ DmSearchStateType stateInfo;
+ UInt16 cardNo;
+ LocalID dbID;
+
+ Err errInfo;
+ Char nameP[32];
+
+ itemsText = NULL;
+
+ // parse and save skins
+ Err err = DmGetNextDatabaseByTypeCreator(true, &stateInfo, 'skin', appFileCreator, false, &cardNo, &dbID);
+ while (!err && dbID) {
+ errInfo = DmDatabaseInfo (cardNo, dbID, nameP, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+ if (!errInfo)
+ {
+ if (!skins)
+ skins = MemHandleNew(sizeof(SkinInfoType));
+ else
+ MemHandleResize(skins, MemHandleSize(skins) + sizeof(SkinInfoType));
+
+ skinsInfo = (SkinInfoType *)MemHandleLock(skins);
+ StrCopy(skinsInfo[numSkins].nameP, nameP);
+ skinsInfo[numSkins].cardNo = cardNo;
+ skinsInfo[numSkins].dbID = dbID;
+ MemHandleUnlock(skins);
+ numSkins++;
+ }
+ err = DmGetNextDatabaseByTypeCreator(false, &stateInfo, 'skin', appFileCreator, false, &cardNo, &dbID);
+ }
+
+ Int16 selected = -1;
+
+ cck1P = (ControlType *)GetObjectPtr(SkinsSoundClickCheckbox);
+ CtlSetValue(cck1P, gPrefs->soundClick);
+
+ listP = (ListType *)GetObjectPtr(SkinsSkinList);
+ skinsInfo = (SkinInfoType *)MemHandleLock(skins);
+ SysQSort(skinsInfo, numSkins, sizeof(SkinInfoType), (CmpFuncPtr)SkinsFormCompare, 0);
+
+ // create itemsText (TODO: create a custom draw function)
+ for (UInt16 index=0; index < numSkins; index++)
+ {
+ if (!items)
+ items = MemHandleNew(sizeof(Char *));
+ else
+ MemHandleResize(items, MemHandleSize(items) + sizeof(Char *));
+
+ itemsText = (Char **)MemHandleLock(items);
+ itemsText[index] = skinsInfo[index].nameP;
+ MemHandleUnlock(items);
+
+ if ( gPrefs->skin.cardNo == skinsInfo[index].cardNo &&
+ gPrefs->skin.dbID == skinsInfo[index].dbID &&
+ StrCompare(gPrefs->skin.nameP, skinsInfo[index].nameP) == 0)
+ selected = index;
+ }
+ // save globals and set list
+ itemsText = (Char **)MemHandleLock(items);
+ itemsList = (void *)skinsInfo;
+ itemsType = ITEM_TYPE_SKIN;
+
+ LstSetListChoices (listP, itemsText, numSkins);
+ LstSetSelection(listP, selected);
+
+ // bDraw = true -> draw whole from
+ // bDraw = false -> redraw list
+ if (bDraw) {
+ frmP = FrmGetActiveForm();
+ FrmDrawForm(frmP);
+ } else {
+ WinScreenLock(winLockCopy);
+ LstDrawList(listP);
+ WinScreenUnlock();
+// LstSetSelection(listP, 0);
+ }
+}
+
+static void SkinsFormExit(Boolean bSave) {
+ MemHandle skins;
+ MemHandle items;
+ SkinInfoType *skinsInfo;
+
+ ListType *listP;
+ Int16 selected;
+
+ listP = (ListType *)GetObjectPtr(SkinsSkinList);
+ selected = LstGetSelection(listP);
+
+ if (bSave && selected == -1) { // may never occured...
+ FrmCustomAlert(FrmWarnAlert, "You didn't select a skin.", 0, 0);
+ return;
+ }
+
+ skinsInfo = (SkinInfoType *)itemsList;
+ skins = MemPtrRecoverHandle(skinsInfo);
+ items = MemPtrRecoverHandle(itemsText);
+
+ itemsText = NULL;
+ itemsList = NULL;
+ itemsType = ITEM_TYPE_UNKNOWN;
+
+ if (bSave) {
+ ControlType *cck1P;
+
+ StrCopy(gPrefs->skin.nameP, skinsInfo[selected].nameP);
+ gPrefs->skin.cardNo = skinsInfo[selected].cardNo;
+ gPrefs->skin.dbID = skinsInfo[selected].dbID;
+
+/* DmOpenRef skinDB = SknOpenSkin();
+ UInt32 depth = SknGetDepth(skinDB);
+ SknCloseSkin(skinDB);
+
+ if (depth != 8 && depth != 16) depth = 8;
+
+ if (depth == 16 && !OPTIONS_TST(kOptMode16Bit)) {
+ FrmCustomAlert(FrmInfoAlert, "You can only use 8bit skin on your device.", 0, 0);
+ gPrefs->skin.cardNo = cardNo;
+ gPrefs->skin.dbID = dbID;
+ }
+*/
+ cck1P = (ControlType *)GetObjectPtr(SkinsSoundClickCheckbox);
+ gPrefs->soundClick = CtlGetValue(cck1P);
+ }
+
+ FrmReturnToMain();
+
+ MemHandleUnlock(items);
+ MemHandleUnlock(skins);
+ MemHandleFree(items);
+ MemHandleFree(skins);
+
+ if (bSave)
+ SknApplySkin();
+}
+
+static void SkinsFormBeam() {
+ SkinInfoType *skinsInfo;
+
+ ListType *listP;
+ Int16 selected;
+ Err err;
+
+ listP = (ListType *)GetObjectPtr(SkinsSkinList);
+ selected = LstGetSelection(listP);
+
+ if (selected == -1) { // may never occured...
+ FrmCustomAlert(FrmWarnAlert, "You didn't select a skin.", 0, 0);
+ return;
+ }
+
+ skinsInfo = (SkinInfoType *)itemsList;
+ err = SendDatabase(0, skinsInfo[selected].dbID, "skin.pdb", "\nScummVM Skin");
+
+// if (err)
+// FrmCustomAlert(FrmErrorAlert, "Unable to beam this skin.",0,0);
+}
+
+static void SkinsFormDelete() {
+ MemHandle skins;
+ MemHandle items;
+ SkinInfoType *skinsInfo;
+
+ ListType *listP;
+ Int16 selected;
+
+ listP = (ListType *)GetObjectPtr(SkinsSkinList);
+ selected = LstGetSelection(listP);
+
+ if (selected == -1) { // may never occured...
+ FrmCustomAlert(FrmInfoAlert, "You didn't select a skin.", 0, 0);
+ return;
+ }
+
+ skinsInfo = (SkinInfoType *)itemsList;
+ skins = MemPtrRecoverHandle(skinsInfo);
+ items = MemPtrRecoverHandle(itemsText);
+
+ if ( gPrefs->skin.cardNo == skinsInfo[selected].cardNo &&
+ gPrefs->skin.dbID == skinsInfo[selected].dbID &&
+ StrCompare(gPrefs->skin.nameP, skinsInfo[selected].nameP) == 0) {
+ FrmCustomAlert(FrmInfoAlert, "You cannot delete the active skin.",0,0);
+ return;
+
+ } else {
+ Err err = DmDeleteDatabase(0, skinsInfo[selected].dbID);
+ if (!err) {
+
+ itemsText = NULL;
+ itemsList = NULL;
+ itemsType = ITEM_TYPE_UNKNOWN;
+
+ MemHandleUnlock(items);
+ MemHandleUnlock(skins);
+ MemHandleFree(items);
+ MemHandleFree(skins);
+
+ SkinsFormInit(false);
+ } else {
+ FrmCustomAlert(FrmErrorAlert, "Skin deletion failed.",0,0);
+ }
+ }
+
+}
+Boolean SkinsFormHandleEvent(EventPtr eventP) {
+ Boolean handled = false;
+
+ switch (eventP->eType) {
+
+ case frmOpenEvent:
+ SkinsFormInit(true);
+ handled = true;
+ break;
+
+ case frmCloseEvent:
+ SkinsFormExit(false);
+ handled = true;
+ break;
+
+ case ctlSelectEvent:
+ switch (eventP->data.ctlSelect.controlID)
+ {
+ case SkinsOKButton:
+ SkinsFormExit(true);
+ break;
+
+ case SkinsCancelButton:
+ SkinsFormExit(false);
+ break;
+
+ case SkinsBeamButton:
+ SkinsFormBeam();
+ break;
+
+ case SkinsDeleteButton:
+ SkinsFormDelete();
+ break;
+ }
+ handled = true;
+ break;
+
+ default:
+ break;
+ }
+
+ return handled;
+}
diff --git a/backends/platform/PalmOS/Src/launcher/forms/formUtil.cpp b/backends/platform/PalmOS/Src/launcher/forms/formUtil.cpp
new file mode 100644
index 0000000000..6d1d55e6e2
--- /dev/null
+++ b/backends/platform/PalmOS/Src/launcher/forms/formUtil.cpp
@@ -0,0 +1,60 @@
+#include <PalmOS.h>
+#include <TxtGlue.h>
+
+#include "forms.h"
+
+Char **itemsText = NULL;
+void *itemsList = NULL;
+Char itemsType = ITEM_TYPE_UNKNOWN;
+
+void FrmReturnToMain(UInt16 updateCode) {
+ // if there is a form loaded, prevent crash on OS5
+ if (FrmGetFirstForm()) {
+ FrmUpdateForm(MainForm, updateCode);
+ FrmReturnToForm(MainForm);
+ }
+}
+
+void FldTrimText(FieldPtr fldP) {
+ MemHandle tmpH;
+ Char *tmpP;
+
+ tmpH = FldGetTextHandle(fldP);
+ FldSetTextHandle(fldP, NULL);
+ tmpP = (Char *)MemHandleLock(tmpH);
+ TxtGlueStripSpaces(tmpP, true, true);
+ MemHandleUnlock(tmpH);
+ FldSetTextHandle(fldP, tmpH);
+}
+
+/***********************************************************************
+ *
+ * FUNCTION: GetObjectPtr
+ *
+ * DESCRIPTION: This routine returns a pointer to an object in the current
+ * form.
+ *
+ * PARAMETERS: formId - id of the form to display
+ *
+ * RETURNED: void *
+ *
+ * REVISION HISTORY:
+ *
+ *
+ ***********************************************************************/
+void * GetObjectPtr(UInt16 objectID) {
+ FormPtr frmP;
+
+ frmP = FrmGetActiveForm();
+ return FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, objectID));
+}
+
+void FrmList(EventPtr eventP, UInt16 objectID) {
+ ListType *listP;
+ UInt16 listItem;
+
+ listP = (ListType *)GetObjectPtr(objectID);
+ listItem = LstPopupList(listP);
+ CtlSetLabel(eventP->data.ctlSelect.pControl, LstGetSelectionText(listP, LstGetSelection(listP)));
+}
+
diff --git a/backends/platform/PalmOS/Src/launcher/forms/formUtil.h b/backends/platform/PalmOS/Src/launcher/forms/formUtil.h
new file mode 100644
index 0000000000..90cf1ff37a
--- /dev/null
+++ b/backends/platform/PalmOS/Src/launcher/forms/formUtil.h
@@ -0,0 +1,21 @@
+#ifndef __FORMUTIL_H__
+#define __FORMUTIL_H__
+
+#define frmRedrawUpdateMS (frmRedrawUpdateCode + 1)
+#define frmRedrawUpdateMSImport (frmRedrawUpdateCode + 2)
+
+// form list draw
+#define ITEM_TYPE_UNKNOWN 'U'
+#define ITEM_TYPE_CARD 'C'
+#define ITEM_TYPE_SKIN 'S'
+
+extern Char **itemsText;
+extern void *itemsList;
+extern Char itemsType;
+
+void FrmReturnToMain(UInt16 updateCode = frmRedrawUpdateMS);
+void * GetObjectPtr(UInt16 objectID);
+void FldTrimText(FieldPtr fldP);
+void FrmList(EventPtr eventP, UInt16 objectID);
+
+#endif
diff --git a/backends/platform/PalmOS/Src/launcher/forms/forminfo.cpp b/backends/platform/PalmOS/Src/launcher/forms/forminfo.cpp
new file mode 100644
index 0000000000..74622d8f14
--- /dev/null
+++ b/backends/platform/PalmOS/Src/launcher/forms/forminfo.cpp
@@ -0,0 +1,146 @@
+#include <PalmOS.h>
+
+#include "start.h"
+#include "formTabs.h"
+#include "forms.h"
+
+#include "base/version.h"
+#include "globals.h"
+#include "init_palmos.h"
+
+/***********************************************************************
+ *
+ * FUNCTION: MiscOptionsFormSave
+ * FUNCTION: MiscOptionsFormInit
+ * FUNCTION: MiscOptionsFormHandleEvent
+ *
+ * DESCRIPTION: Misc. Options form functions
+ *
+ * REVISION HISTORY:
+ *
+ *
+ ***********************************************************************/
+static TabType *myTabP;
+static UInt16 lastTab = 0;
+
+static UInt32 GetStackSize() {
+ MemPtr startPP, endPP;
+ SysGetStackInfo(&startPP, &endPP);
+
+ return ((Char *)endPP - (Char *)startPP) / 1024L;
+}
+
+static void VersionTabDraw() {
+ WinDrawChars(gScummVMVersion, StrLen(gScummVMVersion), 47, 12 + 30);
+ WinDrawChars(gScummVMBuildDate, StrLen(gScummVMBuildDate), 47, 24 + 30);
+}
+
+static void SystemTabDraw() {
+ Coord x;
+ UInt32 dm, sm, df, sf, stack;
+ Char num[10];
+
+ PalmGetMemory(&sm, &dm, &sf, 0);
+ stack = GetStackSize();
+ df = gVars->startupMemory;
+
+ WinSetTextColor(UIColorGetTableEntryIndex(UIObjectForeground));
+ FntSetFont(stdFont);
+
+ StrIToA(num, dm);
+ x = 147 - FntCharsWidth(num, StrLen(num)) + 5;
+ WinDrawChars(num, StrLen(num), x, 12 + 30);
+
+ StrIToA(num, sm);
+ x = 147 - FntCharsWidth(num, StrLen(num)) + 5;
+ WinDrawChars(num, StrLen(num), x, 24 + 30);
+
+ StrIToA(num, stack);
+ x = 147 - FntCharsWidth(num, StrLen(num)) + 5;
+ WinDrawChars(num, StrLen(num), x, 36 + 30);
+
+ StrIToA(num, df);
+ x = 107 - FntCharsWidth(num, StrLen(num)) + 5;
+ WinDrawChars(num, StrLen(num), x, 12 + 30);
+
+ StrIToA(num, sf);
+ x = 107 - FntCharsWidth(num, StrLen(num)) + 5;
+ WinDrawChars(num, StrLen(num), x, 24 + 30);
+
+ StrCopy(num,"-");
+ x = 107 - FntCharsWidth(num, StrLen(num)) + 5;
+ WinDrawChars(num, StrLen(num), x, 36 + 30);
+}
+
+static void InfoFormSave() {
+ TabDeleteTabs(myTabP);
+ FrmReturnToMain();
+}
+
+static void AboutTabDraw() {
+ MemHandle hTemp;
+ BitmapPtr bmpTemp;
+
+ hTemp = DmGetResource (bitmapRsc, 1200);
+ if (hTemp) {
+ bmpTemp = (BitmapType *)MemHandleLock(hTemp);
+ WinDrawBitmap(bmpTemp,3,44);
+ MemPtrUnlock(bmpTemp);
+ DmReleaseResource(hTemp);
+ }
+}
+
+static void InfoFormInit() {
+ TabType *tabP;
+ FormType *frmP = FrmGetActiveForm();
+
+ tabP = TabNewTabs(3);
+ TabAddContent(&frmP, tabP, "About", TabInfoAboutForm, AboutTabDraw);
+ TabAddContent(&frmP, tabP, "Version", TabInfoVersionForm, VersionTabDraw);
+ TabAddContent(&frmP, tabP, "Memory", TabInfoSystemForm, SystemTabDraw);
+
+ lastTab = 0;
+ FrmDrawForm(frmP);
+ TabSetActive(frmP, tabP, lastTab);
+
+ myTabP = tabP;
+}
+
+Boolean InfoFormHandleEvent(EventPtr eventP) {
+ FormPtr frmP = FrmGetActiveForm();
+ Boolean handled = false;
+
+ switch (eventP->eType) {
+ case frmOpenEvent:
+ InfoFormInit();
+ handled = true;
+ break;
+
+ case frmCloseEvent:
+ InfoFormSave();
+ handled = true;
+ break;
+
+ case ctlSelectEvent:
+ switch (eventP->data.ctlSelect.controlID)
+ {
+ case (InfoForm + 1) :
+ case (InfoForm + 2) :
+ case (InfoForm + 3) :
+ lastTab = (eventP->data.ctlSelect.controlID - InfoForm - 1);
+ TabSetActive(frmP, myTabP, lastTab);
+ break;
+
+ case InfoOKButton:
+ InfoFormSave();
+ break;
+ }
+ handled = true;
+ break;
+
+ default:
+ break;
+ }
+
+ return handled;
+}
diff --git a/backends/platform/PalmOS/Src/launcher/forms/formmain.cpp b/backends/platform/PalmOS/Src/launcher/forms/formmain.cpp
new file mode 100644
index 0000000000..1709b4c7a2
--- /dev/null
+++ b/backends/platform/PalmOS/Src/launcher/forms/formmain.cpp
@@ -0,0 +1,363 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 <PalmOS.h>
+
+#include "StarterRsc.h"
+#include "start.h"
+#include "skin.h"
+#include "games.h"
+#include "scumm_globals.h"
+#include "globals.h"
+
+#include "common/stdafx.h"
+#include "base/version.h"
+
+#include "formEditGame.h"
+#include "formUtil.h"
+
+static UInt16 sknLastOn = skinButtonNone;
+
+static Err BeamMe() {
+ UInt16 cardNo;
+ LocalID dbID;
+ Err err;
+
+ err = SysCurAppDatabase(&cardNo, &dbID);
+ if (dbID)
+ err = SendDatabase(0, dbID, "ScummVM.prc", "\nPlay your favorite LucasArts games");
+ else
+ err = DmGetLastErr();
+
+ return err;
+}
+
+/***********************************************************************
+ *
+ * FUNCTION: MainFormInit
+ *
+ * DESCRIPTION: This routine initializes the MainForm form.
+ *
+ * PARAMETERS: frm - pointer to the MainForm form.
+ *
+ * RETURNED: nothing
+ *
+ * REVISION HISTORY:
+ *
+ *
+ ***********************************************************************/
+static void MainFormInit()
+{
+ SknApplySkin();
+}
+
+/***********************************************************************
+ *
+ * FUNCTION: MainFormDoCommand
+ *
+ * DESCRIPTION: This routine performs the menu command specified.
+ *
+ * PARAMETERS: command - menu item id
+ *
+ * RETURNED: nothing
+ *
+ * REVISION HISTORY:
+ *
+ *
+ ***********************************************************************/
+
+static Boolean MainFormDoCommand(UInt16 command)
+{
+ Boolean handled = false;
+
+ switch (command) {
+ case MainGamesMemoryCard:
+ FrmPopupForm(CardSlotForm);
+ handled = true;
+ break;
+
+ case MainGamesNew:
+ gFormEditMode = edtModeAdd;
+ FrmPopupForm(GameEditForm);
+ handled = true;
+ break;
+
+ case MainGamesEdit:
+ gFormEditMode = edtModeEdit;
+ FrmPopupForm(GameEditForm);
+ handled = true;
+ break;
+
+ case MainGamesDelete:
+ EditGameFormDelete(true);
+ handled = true;
+ break;
+
+ case MainOptionsBeam:
+ BeamMe();
+ //if (BeamMe())
+ //FrmCustomAlert(FrmErrorAlert,"Unable to beam ScummVM for PalmOS.",0,0);
+ handled = true;
+ break;
+
+ case MainOptionsAbout:
+ FrmPopupForm(InfoForm);
+ handled = true;
+ break;
+
+ case MainGamesMusicSound:
+ FrmPopupForm(MusicForm);
+ handled = true;
+ break;
+
+ case MainOptionsSkins:
+ FrmPopupForm(SkinsForm);
+ handled = true;
+ break;
+
+ case MainOptionsMisc:
+ FrmPopupForm(MiscForm);
+ handled = true;
+ break;
+ }
+
+ MenuEraseStatus(0);
+ return handled;
+}
+
+/***********************************************************************
+ *
+ * FUNCTION: MainFormHandleEvent
+ *
+ * DESCRIPTION: This routine is the event handler for the
+ * "MainForm" of this application.
+ *
+ * PARAMETERS: eventP - a pointer to an EventType structure
+ *
+ * RETURNED: true if the event has handle and should not be passed
+ * to a higher level handler.
+ *
+ * REVISION HISTORY:
+ *
+ *
+ ***********************************************************************/
+
+static Boolean PenDownRepeat() {
+ Coord x,y;
+ Boolean penDown, handled = false;
+ EvtGetPen(&x, &y, &penDown);
+
+ if (penDown && sknLastOn) {
+ RectangleType r;
+ DmOpenRef skinDBP;
+
+ skinDBP = SknOpenSkin();
+ SknGetObjectBounds(skinDBP, sknLastOn, &r);
+
+ if (RctPtInRectangle(x*2, y*2, &r)) {
+ if (SknGetState(skinDBP, sknLastOn) != sknStateSelected) {
+ SknSetState(skinDBP, sknLastOn, sknStateSelected);
+ SknShowObject(skinDBP, sknLastOn);
+ }
+
+ switch (sknLastOn) {
+ case skinSliderUpArrow:
+ case skinSliderDownArrow:
+ handled = SknProcessArrowAction(sknLastOn);
+ break;
+ }
+
+ } else {
+ if (SknGetState(skinDBP, sknLastOn) != sknStateNormal) {
+ SknSetState(skinDBP, sknLastOn, sknStateNormal);
+ SknShowObject(skinDBP, sknLastOn);
+ }
+ }
+
+ SknCloseSkin(skinDBP);
+ }
+
+ return handled;
+}
+
+
+Boolean MainFormHandleEvent(EventPtr eventP)
+{
+ Boolean handled = false;
+ FormPtr frmP;
+ Coord x,y;
+ DmOpenRef skinDBP;
+
+ switch (eventP->eType) {
+ case frmUpdateEvent:
+ {
+ RectangleType r;
+ UInt16 idx;
+ IndexedColorType bgColor = UIColorGetTableEntryIndex(UIFormFill);
+ frmP = FrmGetFormPtr(MainForm);
+
+ if (gPrefs->card.volRefNum != vfsInvalidVolRef)
+ idx = FrmGetObjectIndex (frmP, MainMSBitMap);
+ else
+ idx = FrmGetObjectIndex (frmP, MainMSNoneBitMap);
+
+ WinSetDrawMode(winPaint);
+ WinSetBackColor(bgColor);
+ FrmGetObjectBounds(frmP, idx, &r);
+ WinEraseRectangle(&r, 0);
+ FrmShowObject(frmP, idx);
+
+ if (eventP->data.frmUpdate.updateCode == frmRedrawUpdateMSImport) {
+ GamImportDatabase();
+ SknUpdateList();
+ }
+ handled = true;
+ break;
+ }
+ case menuEvent:
+ handled = MainFormDoCommand(eventP->data.menu.itemID);
+ break;
+
+ case frmOpenEvent:
+ MainFormInit();
+ handled = true;
+ break;
+
+ case ctlSelectEvent:
+ switch (eventP->data.ctlSelect.controlID)
+ {
+ case MainCardsButton:
+ //gPrefs->card.volRefNum = parseCards(true);
+ FrmPopupForm(CardSlotForm);
+ break;
+
+ case MainAboutButton:
+ FrmPopupForm(InfoForm);
+ break;
+
+// case MainListTypeSelTrigger:
+// FrmList(eventP, MainListTypeList);
+// break;
+ }
+ handled = true;
+ break;
+
+ case penUpEvent:
+ x = eventP->screenX;
+ y = eventP->screenY;
+ lastIndex = dmMaxRecordIndex; // enable select/unselect list item
+
+ if (sknLastOn != skinButtonNone) {
+ RectangleType r;
+ skinDBP = SknOpenSkin();
+ SknGetObjectBounds(skinDBP, sknLastOn, &r);
+ SknSetState(skinDBP, sknLastOn, sknStateNormal);
+ SknShowObject(skinDBP, sknLastOn);
+ SknCloseSkin(skinDBP);
+
+ if (RctPtInRectangle(x*2, y*2, &r)) {
+ switch (sknLastOn) {
+ case skinButtonGameAdd:
+ gFormEditMode = edtModeAdd;
+ FrmPopupForm(GameEditForm);
+ handled = true;
+ break;
+
+ case skinButtonGameAudio:
+ FrmPopupForm(MusicForm);
+ handled = true;
+ break;
+
+ case skinButtonGameEdit:
+ case skinButtonGameParams:
+ gFormEditMode = edtModeParams;
+ FrmPopupForm(GameEditForm);
+ handled = true;
+ break;
+
+ case skinButtonGameStart:
+ if (gPrefs->card.volRefNum == vfsInvalidVolRef)
+ FrmCustomAlert(FrmWarnAlert,"Please select/insert a memory card.", 0, 0);
+ else
+ bStartScumm = true;
+ handled = true;
+ break;
+
+ case skinButtonGameDelete:
+ EditGameFormDelete(true);
+ break;
+ }
+ }
+ sknLastOn = skinButtonNone;
+ }
+ break;
+
+ case penDownEvent:
+ case penMoveEvent:
+ if (sknLastOn == skinButtonNone) {
+ x = eventP->screenX;
+ y = eventP->screenY;
+ skinDBP = SknOpenSkin();
+
+ switch (sknLastOn = SknCheckClick(skinDBP, x,y)) {
+ case skinButtonNone:
+ break;
+ case skinSliderUpArrow:
+ case skinSliderDownArrow:
+ case skinButtonGameAdd:
+ case skinButtonGameEdit:
+ case skinButtonGameParams:
+ case skinButtonGameStart:
+ case skinButtonGameDelete:
+ case skinButtonGameAudio:
+ SknSetState(skinDBP, sknLastOn, sknStateSelected);
+ SknShowObject(skinDBP, sknLastOn);
+ if (gPrefs->soundClick)
+ SndPlaySystemSound(sndClick);
+ handled = true;
+ break;
+ default:
+ FrmCustomAlert(FrmWarnAlert,"Unknown button !",0,0);
+ }
+ SknCloseSkin(skinDBP);
+ SknSelect(x, y);
+ }
+ break;
+
+ case keyDownEvent:
+ if ( (eventP->data.keyDown.chr >= 'a' && eventP->data.keyDown.chr <= 'z') ||
+ (eventP->data.keyDown.chr >= 'A' && eventP->data.keyDown.chr <= 'Z')) {
+ if (GamJumpTo(eventP->data.keyDown.chr)) {
+ SknUpdateList();
+ handled = true;
+ }
+ }
+ break;
+
+ default:
+ handled = PenDownRepeat();
+ }
+
+ return handled;
+}
diff --git a/backends/platform/PalmOS/Src/launcher/forms/formmusic.cpp b/backends/platform/PalmOS/Src/launcher/forms/formmusic.cpp
new file mode 100644
index 0000000000..9b4b5355a7
--- /dev/null
+++ b/backends/platform/PalmOS/Src/launcher/forms/formmusic.cpp
@@ -0,0 +1,387 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 <PalmOS.h>
+
+#include "start.h"
+#include "formTabs.h"
+#include "forms.h"
+#include "games.h"
+
+#include "globals.h"
+
+static TabType *myTabP;
+static UInt16 lastTab = 0;
+
+static GameInfoType *gameInfoP = NULL;
+
+// Music
+static Boolean MusicTabSave() {
+ ControlType *cck1P, *cck2P;
+ ListType *list1P, *list2P, *list3P;
+ FieldType *fld1P;
+ UInt16 tempo;
+ FormPtr frmP;
+
+ frmP = FrmGetActiveForm();
+
+ cck1P = (ControlType *)GetObjectPtr(TabMusicMusicCheckbox);
+ cck2P = (ControlType *)GetObjectPtr(TabMusicMultiMidiCheckbox);
+
+ list1P = (ListType *)GetObjectPtr(TabMusicDriverList);
+ list2P = (ListType *)GetObjectPtr(TabMusicRateList);
+ list3P = (ListType *)GetObjectPtr(TabMusicQualityList);
+
+ fld1P = (FieldType *)GetObjectPtr(TabMusicTempoField);
+
+ tempo = StrAToI(FldGetTextPtr(fld1P));
+ if (tempo < 50 || tempo > 200) {
+ TabSetActive(frmP, myTabP, 0);
+ FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabMusicTempoField));
+ FrmCustomAlert(FrmErrorAlert, "Invalid tempo value (50...200)", 0, 0);
+ return false;
+ }
+
+ gameInfoP->musicInfo.sound.music = CtlGetValue(cck1P);
+ gameInfoP->musicInfo.sound.multiMidi = CtlGetValue(cck2P);
+
+ gameInfoP->musicInfo.sound.drvMusic = LstGetSelection(list1P);
+ gameInfoP->musicInfo.sound.rate = LstGetSelection(list2P);
+ gameInfoP->fmQuality = LstGetSelection(list3P);
+ gameInfoP->musicInfo.sound.tempo = tempo;
+
+ return true;
+}
+
+static void MusicTabInit() {
+ ControlType *cck1P, *cck2P;
+ ListType *list1P, *list2P, *list3P;
+ FieldType *fld1P;
+ MemHandle tempoH;
+ Char *tempoP;
+
+ cck1P = (ControlType *)GetObjectPtr(TabMusicMusicCheckbox);
+ cck2P = (ControlType *)GetObjectPtr(TabMusicMultiMidiCheckbox);
+
+ list1P = (ListType *)GetObjectPtr(TabMusicDriverList);
+ list2P = (ListType *)GetObjectPtr(TabMusicRateList);
+ list3P = (ListType *)GetObjectPtr(TabMusicQualityList);
+
+ fld1P = (FieldType *)GetObjectPtr(TabMusicTempoField);
+
+ CtlSetValue(cck1P, gameInfoP->musicInfo.sound.music);
+ CtlSetValue(cck2P, gameInfoP->musicInfo.sound.multiMidi);
+
+ if (gameInfoP->musicInfo.sound.drvMusic > 5)
+ gameInfoP->musicInfo.sound.drvMusic = 0;
+
+
+ LstSetSelection(list1P, gameInfoP->musicInfo.sound.drvMusic);
+ LstSetTopItem(list1P, gameInfoP->musicInfo.sound.drvMusic);
+ CtlSetLabel((ControlType *)GetObjectPtr(TabMusicDriverPopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P)));
+
+ LstSetSelection(list2P, gameInfoP->musicInfo.sound.rate);
+ LstSetTopItem(list2P, gameInfoP->musicInfo.sound.rate);
+ CtlSetLabel((ControlType *)GetObjectPtr(TabMusicRatePopTrigger), LstGetSelectionText(list2P, LstGetSelection(list2P)));
+
+ LstSetSelection(list3P, gameInfoP->fmQuality);
+ CtlSetLabel((ControlType *)GetObjectPtr(TabMusicQualityPopTrigger), LstGetSelectionText(list3P, LstGetSelection(list3P)));
+
+ tempoH = MemHandleNew(FldGetMaxChars(fld1P)+1);
+ tempoP = (Char *)MemHandleLock(tempoH);
+ StrIToA(tempoP, gameInfoP->musicInfo.sound.tempo);
+ MemHandleUnlock(tempoH);
+ FldSetTextHandle(fld1P, tempoH);
+}
+
+// Audio CD
+static Boolean AudioCDTabSave() {
+ ControlType *cck3P;
+ FieldType *fld2P, *fld3P;
+ ListType *list1P, *list2P;
+ UInt16 firstTrack;
+ FormPtr frmP;
+
+ frmP = FrmGetActiveForm();
+
+ cck3P = (ControlType *)GetObjectPtr(TabAudioCDMP3Checkbox);
+ fld2P = (FieldType *)GetObjectPtr(TabAudioCDLengthSecsField);
+ fld3P = (FieldType *)GetObjectPtr(TabAudioCDFirstTrackField);
+ list1P = (ListType *)GetObjectPtr(TabAudioCDDriverList);
+ list2P = (ListType *)GetObjectPtr(TabAudioCDFormatList);
+
+ firstTrack = StrAToI(FldGetTextPtr(fld3P));
+ if (firstTrack < 1 || firstTrack > 999) {
+ TabSetActive(frmP, myTabP, 2);
+ FrmSetFocus(frmP, FrmGetObjectIndex(frmP, TabAudioCDFirstTrackField));
+ FrmCustomAlert(FrmErrorAlert, "Invalid track value (1...999)", 0, 0);
+ return false;
+ }
+
+ gameInfoP->musicInfo.sound.CD = CtlGetValue(cck3P);
+
+ gameInfoP->musicInfo.sound.drvCD = LstGetSelection(list1P);
+ gameInfoP->musicInfo.sound.frtCD = LstGetSelection(list2P);
+
+ gameInfoP->musicInfo.sound.defaultTrackLength = StrAToI(FldGetTextPtr(fld2P));
+ gameInfoP->musicInfo.sound.firstTrack = firstTrack;
+
+ return true;
+}
+
+static void AudioCDTabInit() {
+ ControlType *cck3P;
+ FieldType *fld2P, *fld3P;
+ ListType *list1P, *list2P;
+ MemHandle lengthH, firstTrackH;
+ Char *lengthP, *firstTrackP;
+
+ cck3P = (ControlType *)GetObjectPtr(TabAudioCDMP3Checkbox);
+ fld2P = (FieldType *)GetObjectPtr(TabAudioCDLengthSecsField);
+ fld3P = (FieldType *)GetObjectPtr(TabAudioCDFirstTrackField);
+ list1P = (ListType *)GetObjectPtr(TabAudioCDDriverList);
+ list2P = (ListType *)GetObjectPtr(TabAudioCDFormatList);
+
+ LstSetSelection(list1P, gameInfoP->musicInfo.sound.drvCD);
+ CtlSetLabel((ControlType *)GetObjectPtr(TabAudioCDDriverPopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P)));
+
+ LstSetSelection(list2P, gameInfoP->musicInfo.sound.frtCD);
+ CtlSetLabel((ControlType *)GetObjectPtr(TabAudioCDFormatPopTrigger), LstGetSelectionText(list2P, LstGetSelection(list2P)));
+
+ CtlSetValue(cck3P, gameInfoP->musicInfo.sound.CD);
+
+ lengthH = MemHandleNew(FldGetMaxChars(fld2P)+1);
+ lengthP = (Char *)MemHandleLock(lengthH);
+ StrIToA(lengthP, gameInfoP->musicInfo.sound.defaultTrackLength);
+ MemHandleUnlock(lengthH);
+ FldSetTextHandle(fld2P, lengthH);
+
+ firstTrackH = MemHandleNew(FldGetMaxChars(fld3P)+1);
+ firstTrackP = (Char *)MemHandleLock(firstTrackH);
+ StrIToA(firstTrackP, gameInfoP->musicInfo.sound.firstTrack);
+ MemHandleUnlock(firstTrackH);
+ FldSetTextHandle(fld3P, firstTrackH);
+}
+
+// Volume
+static void VolumeTabSave() {
+ SliderControlType *slid1P, *slid2P, *slid3P, *slid4P, *slid5P;
+
+ slid1P = (SliderControlType *)GetObjectPtr(TabVolumePalmSliderControl);
+ slid2P = (SliderControlType *)GetObjectPtr(TabVolumeMusicSliderControl);
+ slid3P = (SliderControlType *)GetObjectPtr(TabVolumeSfxSliderControl);
+ slid4P = (SliderControlType *)GetObjectPtr(TabVolumeSpeechSliderControl);
+ slid5P = (SliderControlType *)GetObjectPtr(TabVolumeAudioCDSliderControl);
+
+ CtlGetSliderValues ((ControlType *)slid1P, 0, 0, 0, &gameInfoP->musicInfo.volume.palm);
+ CtlGetSliderValues ((ControlType *)slid2P, 0, 0, 0, &gameInfoP->musicInfo.volume.music);
+ CtlGetSliderValues ((ControlType *)slid3P, 0, 0, 0, &gameInfoP->musicInfo.volume.sfx);
+ CtlGetSliderValues ((ControlType *)slid4P, 0, 0, 0, &gameInfoP->musicInfo.volume.speech);
+ CtlGetSliderValues ((ControlType *)slid5P, 0, 0, 0, &gameInfoP->musicInfo.volume.audiocd);
+}
+
+static void VolumeTabInit() {
+ SliderControlType *slid1P, *slid2P, *slid3P, *slid4P, *slid5P;
+ UInt16 value;
+
+ slid1P = (SliderControlType *)GetObjectPtr(TabVolumePalmSliderControl);
+ slid2P = (SliderControlType *)GetObjectPtr(TabVolumeMusicSliderControl);
+ slid3P = (SliderControlType *)GetObjectPtr(TabVolumeSfxSliderControl);
+ slid4P = (SliderControlType *)GetObjectPtr(TabVolumeSpeechSliderControl);
+ slid5P = (SliderControlType *)GetObjectPtr(TabVolumeAudioCDSliderControl);
+
+ value = gameInfoP->musicInfo.volume.palm;
+ CtlSetSliderValues ((ControlType *)slid1P, 0, 0, 0, &value);
+ value = gameInfoP->musicInfo.volume.music;
+ CtlSetSliderValues ((ControlType *)slid2P, 0, 0, 0, &value);
+ value = gameInfoP->musicInfo.volume.sfx;
+ CtlSetSliderValues ((ControlType *)slid3P, 0, 0, 0, &value);
+ value = gameInfoP->musicInfo.volume.speech;
+ CtlSetSliderValues ((ControlType *)slid4P, 0, 0, 0, &value);
+ value = gameInfoP->musicInfo.volume.audiocd;
+ CtlSetSliderValues ((ControlType *)slid5P, 0, 0, 0, &value);
+}
+
+static void MusicFormSave(UInt16 index) {
+ if (index != dmMaxRecordIndex) {
+ MemHandle recordH;
+ GameInfoType *ogameInfoP;
+
+ if (!MusicTabSave()) return;
+ if (!AudioCDTabSave()) return;
+ VolumeTabSave();
+
+ recordH = DmGetRecord(gameDB, index);
+ ogameInfoP = (GameInfoType *)MemHandleLock(recordH);
+ DmWrite(ogameInfoP, 0, gameInfoP, sizeof(GameInfoType));
+ MemHandleUnlock(recordH);
+ DmReleaseRecord (gameDB, index, 0);
+ }
+
+ MemPtrFree(gameInfoP);
+ gameInfoP = NULL;
+
+ TabDeleteTabs(myTabP);
+ FrmReturnToMain();
+}
+static void MusicFormInit(UInt16 index) {
+ TabType *tabP;
+ FormType *frmP = FrmGetActiveForm();
+
+ if (index != dmMaxRecordIndex) {
+ MemHandle recordH = NULL;
+ GameInfoType *ogameInfoP;
+
+ recordH = DmQueryRecord(gameDB, index);
+ ogameInfoP = (GameInfoType *)MemHandleLock(recordH);
+
+ if (!ogameInfoP) {
+ FrmCustomAlert(FrmErrorAlert, "An error occured.",0,0);
+ return;
+ }
+
+ gameInfoP = (GameInfoType *)MemPtrNew(sizeof(GameInfoType));
+ MemMove(gameInfoP, ogameInfoP, sizeof(GameInfoType));
+ MemHandleUnlock(recordH);
+
+ } else {
+ FrmCustomAlert(FrmWarnAlert, "Select an entry first.",0,0);
+ FrmReturnToMain();
+ return;
+ }
+
+ tabP = TabNewTabs(3);
+ TabAddContent(&frmP, tabP, "Sound", TabMusicForm);
+ TabAddContent(&frmP, tabP, "Volume", TabVolumeForm);
+ TabAddContent(&frmP, tabP, "Audio CD", TabAudioCDForm);
+
+ MusicTabInit();
+ AudioCDTabInit();
+ VolumeTabInit();
+
+ FrmDrawForm(frmP);
+ TabSetActive(frmP, tabP, lastTab);
+
+ myTabP = tabP;
+}
+
+Boolean MusicFormHandleEvent(EventPtr eventP) {
+ FormPtr frmP = FrmGetActiveForm();
+ Boolean handled = false;
+
+ switch (eventP->eType) {
+ case frmOpenEvent:
+ MusicFormInit(GamGetSelected());
+ handled = true;
+ break;
+
+ case frmCloseEvent:
+ MusicFormSave(dmMaxRecordIndex);
+ handled = true;
+ break;
+
+ case ctlSelectEvent:
+ switch (eventP->data.ctlSelect.controlID)
+ {
+ case (MusicForm + 1) :
+ case (MusicForm + 2) :
+ case (MusicForm + 3) :
+ lastTab = (eventP->data.ctlSelect.controlID - MusicForm - 1);
+ TabSetActive(frmP, myTabP, lastTab);
+ break;
+
+ case TabMusicDriverPopTrigger:
+ FrmList(eventP, TabMusicDriverList);
+ FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabMusicDriverList));
+
+ if (!OPTIONS_TST(kOptDeviceZodiac) && !OPTIONS_TST(kOptSonyPa1LibAPI)) {
+ ListType *list1P = (ListType *)GetObjectPtr(TabMusicDriverList);
+
+ if (LstGetSelection(list1P) == 4) {
+ FrmCustomAlert(FrmInfoAlert, "There is no built-in MIDI support on your device.", 0, 0);
+ LstSetSelection(list1P, 0);
+ CtlSetLabel((ControlType *)GetObjectPtr(TabMusicDriverPopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P)));
+ }
+ }
+ break;
+
+ case TabMusicQualityPopTrigger:
+ FrmList(eventP, TabMusicQualityList);
+ FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabMusicQualityList));
+ break;
+
+ case TabMusicRatePopTrigger:
+ FrmList(eventP, TabMusicRateList);
+ FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabMusicRateList));
+
+ if (!OPTIONS_TST(kOptPalmSoundAPI)) {
+ ListType *list1P = (ListType *)GetObjectPtr(TabMusicRateList);
+
+ if (LstGetSelection(list1P) != 0) {
+ FrmCustomAlert(FrmInfoAlert, "You cannot use this rate on your device.", 0, 0);
+ LstSetSelection(list1P, 0);
+ CtlSetLabel((ControlType *)GetObjectPtr(TabMusicRatePopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P)));
+ }
+ }
+ break;
+
+ case TabAudioCDFormatPopTrigger:
+ FrmList(eventP, TabAudioCDFormatList);
+ FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabAudioCDFormatList));
+
+ if (LstGetSelection((ListPtr)GetObjectPtr(TabAudioCDDriverList)) == 1) {
+ ListType *list1P = (ListType *)GetObjectPtr(TabAudioCDFormatList);
+ LstSetSelection(list1P, 0);
+ CtlSetLabel((ControlType *)GetObjectPtr(TabAudioCDFormatPopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P)));
+ }
+ break;
+
+ case TabAudioCDDriverPopTrigger:
+ FrmList(eventP, TabAudioCDDriverList);
+ FrmHideObject(frmP, FrmGetObjectIndex(frmP, TabAudioCDDriverList));
+
+ if (LstGetSelection((ListPtr)GetObjectPtr(TabAudioCDDriverList)) == 1) {
+ ListType *list1P = (ListType *)GetObjectPtr(TabAudioCDFormatList);
+ LstSetSelection(list1P, 0);
+ CtlSetLabel((ControlType *)GetObjectPtr(TabAudioCDFormatPopTrigger), LstGetSelectionText(list1P, LstGetSelection(list1P)));
+ }
+ break;
+
+ case MusicOKButton:
+ MusicFormSave(GamGetSelected());
+ break;
+
+ case MusicCancelButton:
+ MusicFormSave(dmMaxRecordIndex);
+ break;
+ }
+ handled = true;
+ break;
+
+ default:
+ break;
+ }
+
+ return handled;
+}
diff --git a/backends/platform/PalmOS/Src/launcher/forms/forms.h b/backends/platform/PalmOS/Src/launcher/forms/forms.h
new file mode 100644
index 0000000000..0bdfd356c7
--- /dev/null
+++ b/backends/platform/PalmOS/Src/launcher/forms/forms.h
@@ -0,0 +1,22 @@
+#ifndef __FORMS_H__
+#define __FORMS_H__
+
+#include "StarterRsc.h"
+#include "formUtil.h"
+
+#include "formEditGame.h"
+#include "formCards.h"
+
+
+#define HANDLER(x) Boolean x##FormHandleEvent(EventPtr eventP);
+
+HANDLER(Main)
+HANDLER(EditGame)
+HANDLER(SystemInfo)
+HANDLER(Misc)
+HANDLER(CardSlot)
+HANDLER(Skins)
+HANDLER(Music)
+HANDLER(Info)
+
+#endif
diff --git a/backends/platform/PalmOS/Src/launcher/forms/formtabs.cpp b/backends/platform/PalmOS/Src/launcher/forms/formtabs.cpp
new file mode 100644
index 0000000000..0dd3427c1a
--- /dev/null
+++ b/backends/platform/PalmOS/Src/launcher/forms/formtabs.cpp
@@ -0,0 +1,242 @@
+#include <PalmOS.h>
+#include <CtlGlue.h>
+#include <FrmGlue.h>
+#include <LstGlue.h>
+
+#include "globals.h"
+#include "formTabs.h"
+
+TabType *TabNewTabs(UInt16 cnt) {
+ TabType *newP = new TabType;
+
+ newP->count = 0;
+ newP->width = 0;
+ newP->tabs = new TabDataType[cnt];
+
+ return newP;
+}
+
+void TabMoveUpObject(FormType *frmP, UInt16 objID, Coord amount) {
+ Coord x, y;
+ FrmGetObjectPosition(frmP, FrmGetObjectIndex(frmP, objID), &x, &y);
+ FrmSetObjectPosition(frmP, FrmGetObjectIndex(frmP, objID), x, y - amount);
+}
+
+void TabDeleteTabs(TabType *tabP) {
+ UInt16 cnt, num;
+ num = MemPtrSize(tabP->tabs) / sizeof(TabDataType);
+
+ for (cnt = 0; cnt < num; cnt++)
+ FrmDeleteForm(tabP->tabs[cnt].srcP);
+
+ delete tabP->tabs;
+ delete tabP;
+}
+
+Err TabAddContent(FormType **frmP, TabType *tabP, const Char *nameP, UInt16 rscID, TabProc *drawFunc) {
+ FormType *srcP;
+ UInt16 cnt;
+ void *objP, **dstP;
+ UInt16 objNum;
+ Coord x, y, w, h;
+ UInt16 id;
+ RectangleType r;
+
+ dstP = (void **)frmP;
+ srcP = FrmInitForm(rscID);
+
+ objNum = FrmGetNumberOfObjects(srcP);
+
+ // save tab data
+
+ // it's required to keep to source forms active
+ // while the tab form is not close for list data ptr (items text)
+ // TODO : fix this !
+ tabP->tabs[tabP->count].srcP = srcP;
+ tabP->tabs[tabP->count].first = FrmGetObjectId(srcP, 0);
+ tabP->tabs[tabP->count].last = FrmGetObjectId(srcP, objNum - 1);
+ tabP->tabs[tabP->count].drawFunc= drawFunc;
+ tabP->count++;
+ tabP->active = tabP->count;
+
+ // create tab
+ FntSetFont(stdFont);
+ x = 4 + tabP->width;
+ y = 16;
+ w = FntCharsWidth(nameP, StrLen(nameP)) + 6;
+ h = 12;
+ ControlType *addP = CtlNewControl(dstP, (FrmGetFormId(*frmP) + tabP->count), buttonCtl, nameP, x, y, w, h, stdFont, 0, true);
+ CtlGlueSetFrameStyle(addP, noButtonFrame);
+ tabP->width += w + 3;
+
+ // create tab content
+ for (cnt = 0; cnt < objNum; cnt++) {
+ objP = FrmGetObjectPtr(srcP, cnt);
+ id = FrmGetObjectId(srcP, cnt);
+ FrmGetObjectBounds(srcP, cnt, &r);
+ x = r.topLeft.x - 2;
+ y = r.topLeft.y + 30;
+ w = r.extent.x;
+ h = r.extent.y;
+
+ FrmSetObjectPosition(srcP, cnt, x, y);
+
+ switch (FrmGetObjectType(srcP, cnt)) {
+ case frmListObj: {
+ // HOWTO : to auto link the list to a popup trigger the listID must be popupID + 1 if popup id
+ // desn't exist the triggerID will be 0 and the list will be shown, but take care to not define
+ // ListID - 1 object if you want to show the list.
+ ListType *newP;
+ Char **itemsP = LstGlueGetItemsText((ListType *)objP);
+ FontID font = LstGlueGetFont((ListType *)objP);
+ UInt16 visible = LstGetVisibleItems((ListType *)objP);
+ UInt16 items = LstGetNumberOfItems((ListType *)objP);
+ UInt16 trigger = id - 1;
+ trigger = (FrmGetObjectIndex((FormType *)*dstP, trigger) != frmInvalidObjectId) ? trigger : 0;
+
+ LstNewList(dstP, id, x, y, w, h, font, visible, trigger);
+ newP = (ListType *)FrmGetObjectPtr((FormType *)*dstP, FrmGetObjectIndex((FormType *)*dstP, id));
+ LstSetListChoices(newP, itemsP, items);
+ FrmHideObject((FormType *)*dstP, FrmGetObjectIndex((FormType *)*dstP, id));
+ break;
+ }
+ case frmFieldObj: {
+ FieldAttrType attr;
+ FontID font = FldGetFont((FieldType *)objP);
+ UInt16 maxChars = FldGetMaxChars((FieldType *)objP);
+ FldGetAttributes((FieldType *)objP, &attr);
+ FldNewField(dstP, id, x, y, w, h, font, maxChars, attr.editable, attr.underlined, attr.singleLine, attr.dynamicSize, (JustificationType)attr.justification, attr.autoShift, attr.hasScrollBar, attr.numeric);
+ FrmHideObject((FormType *)*dstP, FrmGetObjectIndex((FormType *)*dstP, id));
+ break;
+ }
+ case frmControlObj: {
+ const Char *textP = CtlGetLabel((ControlType *)objP);
+ ControlStyleType style = CtlGlueGetControlStyle((ControlType *)objP);
+ FontID font = CtlGlueGetFont((ControlType *)objP);
+ ControlType *newP = CtlNewControl(dstP, id, style, textP, x, y, w, h, font, 0, true);
+ FrmHideObject((FormType *)*dstP, FrmGetObjectIndex((FormType *)*dstP, id));
+ switch (style) {
+ case sliderCtl:
+ {
+ UInt16 min, max, page, val;
+ CtlGetSliderValues((ControlType *)objP, &min, &max, &page, &val);
+ CtlSetSliderValues(newP, &min, &max, &page, &val);
+ break;
+ }
+ }
+ break;
+ }
+ case frmLabelObj: {
+ const Char *textP = FrmGetLabel(srcP, id);
+ FontID font = FrmGlueGetLabelFont(srcP, id);
+ FrmNewLabel((FormType **)dstP, id, textP, x, y, font);
+ FrmHideObject((FormType *)*dstP, FrmGetObjectIndex((FormType *)*dstP, id));
+ break;
+ }
+
+ case frmBitmapObj: {
+/* UInt16 family = id + 1;
+ FrmNewBitmap((FormType **)dstP, id, id, x, y);
+ //FrmHideObject((FormType *)*dstP, FrmGetObjectIndex((FormType *)*dstP, id));
+*/ break;
+ }
+ }
+ }
+
+ frmP = (FormType **)dstP; // save new form ptr
+ return errNone;
+}
+
+void TabSetActive(FormType *frmP, TabType *tabP, UInt16 num) {
+ UInt16 cnt, idx;
+ RectangleType r;
+ TabDataPtr dataP;
+
+ if (tabP->active == num)
+ return;
+
+ dataP = &tabP->tabs[tabP->active];
+
+ // hide active tab objects
+ if (tabP->active != tabP->count) {
+ for (cnt = dataP->first; cnt <= dataP->last; cnt++) {
+ if ((idx = FrmGetObjectIndex(frmP, cnt)) != frmInvalidObjectId)
+ FrmHideObject(frmP, idx);
+ }
+ }
+
+ // save active tab
+ tabP->active = num;
+ dataP = &tabP->tabs[num];
+
+ // draw tab limit
+ WinSetForeColor(UIColorGetTableEntryIndex(UIFormFill));
+ WinDrawLine(1, 14, 154,14);
+ WinDrawLine(1, 15, 154,15);
+ RctSetRectangle(&r, 1, 30, 154, 100);
+ WinDrawRectangle(&r, 0);
+ WinSetForeColor(UIColorGetTableEntryIndex(UIObjectFrame));
+ WinDrawLine(1, 28, 154,28);
+
+ // set tabs size
+ for (cnt = 0; cnt < tabP->count; cnt++) {
+ idx = FrmGetObjectIndex (frmP, (FrmGetFormId(frmP) + cnt + 1));
+
+ if (idx != frmInvalidObjectId) {
+ FrmGetObjectBounds(frmP, idx, &r);
+ r.topLeft.y = (num == cnt) ? 17 : 17;
+ r.extent.y = (num == cnt) ? 12 : 11;
+ FrmSetObjectBounds(frmP, idx, &r);
+
+ if (num == cnt) {
+ RGBColorType yellow = {0,255,192,0};
+
+ UInt8 line = /*(UIColorGetTableEntryIndex(UIFormFill) == UIColorGetTableEntryIndex(UIFieldTextHighlightBackground)) ?
+ WinRGBToIndex(&yellow) :*/
+ UIColorGetTableEntryIndex(UIFieldTextHighlightBackground);
+
+ r.topLeft.y -= 1;
+ WinSetForeColor(UIColorGetTableEntryIndex(UIObjectFrame));
+ WinDrawRectangleFrame(simpleFrame, &r);
+ WinSetForeColor(line);
+ WinDrawLine(r.topLeft.x, r.topLeft.y, r.topLeft.x + r.extent.x - 1, r.topLeft.y);
+ FrmShowObject(frmP, idx);
+
+ } else {
+ UInt8 frame = UIColorGetTableEntryIndex(UIObjectFrame);
+ RGBColorType light;
+ WinIndexToRGB(frame, &light);
+ light.r = (255 - light.r) > 72 ? light.r + 72 : 255;
+ light.g = (255 - light.g) > 72 ? light.g + 72 : 255;
+ light.b = (255 - light.b) > 72 ? light.b + 72 : 255;
+
+ WinSetForeColor(WinRGBToIndex(&light));
+ WinDrawRectangleFrame(simpleFrame, &r);
+ WinSetForeColor(frame);
+ WinDrawLine(r.topLeft.x - 1, r.topLeft.y + r.extent.y, r.topLeft.x + r.extent.x, r.topLeft.y + r.extent.y);
+ }
+
+ // round corner
+ WinSetForeColor(UIColorGetTableEntryIndex(UIFormFill));
+ if (OPTIONS_TST(kOptModeHiDensity)) {
+ WinSetCoordinateSystem(kCoordinatesNative);
+ WinDrawPixel((r.topLeft.x - 1) * 2, (r.topLeft.y - 1) * 2);
+ WinDrawPixel((r.topLeft.x + r.extent.x) * 2 + 1, (r.topLeft.y - 1) * 2);
+ WinSetCoordinateSystem(kCoordinatesStandard);
+
+ } else {
+ // TODO
+ }
+ }
+ }
+
+ // show objects
+ for (cnt = dataP->first; cnt <= dataP->last; cnt++) {
+ if ((idx = FrmGetObjectIndex(frmP, cnt)) != frmInvalidObjectId)
+ FrmShowObject(frmP, idx);
+ }
+
+ // post draw function
+ if (dataP->drawFunc)
+ (dataP->drawFunc)();
+}
diff --git a/backends/platform/PalmOS/Src/launcher/forms/formtabs.h b/backends/platform/PalmOS/Src/launcher/forms/formtabs.h
new file mode 100644
index 0000000000..5371485bf1
--- /dev/null
+++ b/backends/platform/PalmOS/Src/launcher/forms/formtabs.h
@@ -0,0 +1,24 @@
+#ifndef __FORMTABS_H__
+#define __FORMTABS_H__
+
+typedef void (TabProc)();
+
+typedef struct {
+ FormPtr srcP;
+ UInt16 first;
+ UInt16 last;
+ TabProc *drawFunc;
+} TabDataType, *TabDataPtr;
+
+typedef struct {
+ UInt16 count, active;
+ Coord width;
+ TabDataPtr tabs;
+} TabType, *TabPtr;
+
+TabType *TabNewTabs (UInt16 cnt);
+void TabDeleteTabs (TabType *tabP);
+Err TabAddContent (FormType **frmP, TabType *tabP, const Char *nameP, UInt16 rscID, TabProc *drawFunc = 0);
+void TabSetActive (FormType *frmP, TabType *tabP, UInt16 num);
+void TabMoveUpObject (FormType *frmP, UInt16 objID, Coord amount);
+#endif
diff --git a/backends/platform/PalmOS/Src/launcher/games.cpp b/backends/platform/PalmOS/Src/launcher/games.cpp
new file mode 100644
index 0000000000..166aae6aa4
--- /dev/null
+++ b/backends/platform/PalmOS/Src/launcher/games.cpp
@@ -0,0 +1,530 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 <PalmOS.h>
+#include <VFSMgr.h>
+#include <ctype.h>
+
+#include "globals.h"
+#include "palmdefs.h"
+#include "start.h"
+#include "games.h"
+#include "skin.h"
+
+#include "extend.h"
+#include "StarterRsc.h"
+
+DmOpenRef gameDB = NULL;
+
+static Err GamUpdateList() {
+ if (gameDB) {
+ UInt16 numRecs = DmNumRecords(gameDB);
+
+ if (numRecs > 0) {
+ MemHandle tmpH;
+ UInt32 version, size;
+ UInt32 *versionP;
+
+ // get record size and version
+ tmpH = DmQueryRecord(gameDB, 0);
+ size = MemHandleSize(tmpH);
+ versionP = (UInt32 *)MemHandleLock(tmpH);
+ version = *versionP;
+ MemHandleUnlock(tmpH);
+
+ // check record
+ if (version != curItemVersion || size != sizeof(GameInfoType)) {
+ UInt16 index;
+ GameInfoType gitCur;
+ void *tmpP;
+ FormPtr ofmP, frmP;
+
+ // show dialog
+ ofmP = FrmGetActiveForm();
+ frmP = FrmInitForm(ConvertForm);
+ FrmSetActiveForm(frmP);
+ FrmDrawForm(frmP);
+ SysTaskDelay(1 * SysTicksPerSecond());
+
+ MemSet(&gitCur, sizeof(GameInfoType), 0);
+
+ if (version == itemVersion_354 ||
+ version == itemVersion_353 ||
+ version == itemVersion_352 ||
+ version == itemVersion_351 ||
+ version == itemVersion_350 ||
+ version == itemVersion_340 ||
+ version == itemVersion_330 ||
+ version == itemVersion_320 ||
+ version == itemVersion_310 ||
+ version == itemVersion_300 ||
+ version == itemVersion_270 ||
+ version == itemVersion_260 ||
+ version == itemVersion_250) {
+ for (index = 0; index < numRecs; index++) {
+ // get old data
+ tmpH = DmQueryRecord(gameDB, index);
+ tmpP = MemHandleLock(tmpH);
+ MemMove(&gitCur, tmpP, MemHandleSize(tmpH));
+ MemHandleUnlock(tmpH);
+
+ // new format
+ gitCur.version = curItemVersion;
+
+ if (version < itemVersion_300) {
+ gitCur.musicInfo.volume.palm = 50;
+ gitCur.musicInfo.volume.music = 192;
+ gitCur.musicInfo.volume.sfx = 192;
+ gitCur.musicInfo.volume.speech = 192;
+ gitCur.musicInfo.volume.audiocd = 50;
+
+ gitCur.musicInfo.sound.tempo = 100;
+ gitCur.musicInfo.sound.defaultTrackLength = 10;
+ gitCur.musicInfo.sound.firstTrack = 1;
+ }
+
+ if (version < itemVersion_310)
+ gitCur.engine = 0;
+
+ if (version < itemVersion_320)
+ gitCur.renderMode = 0;
+
+ if (version <= itemVersion_330) {
+ gitCur.fmQuality = 0;
+ gitCur.gfxMode = (gitCur.gfxMode == 3 ? 1 : 0); // v3.4 only 2 modes
+
+ if (gitCur.engine == 0) gitCur.engine = 8;
+ else if (gitCur.engine == 1) gitCur.engine = 7;
+ else if (gitCur.engine == 2) gitCur.engine = 3;
+ else if (gitCur.engine == 3) gitCur.engine = 1;
+ else if (gitCur.engine == 4) gitCur.engine = 0;
+ else if (gitCur.engine == 5) gitCur.engine = 6;
+ else if (gitCur.engine == 6) gitCur.engine = 4;
+ else if (gitCur.engine == 7) gitCur.engine = 5;
+ else if (gitCur.engine == 8) gitCur.engine = 2;
+
+ if (gitCur.renderMode == 1) gitCur.renderMode = 4;
+ else if (gitCur.renderMode == 2) gitCur.renderMode = 5;
+ else if (gitCur.renderMode == 3) gitCur.renderMode = 2;
+ else if (gitCur.renderMode == 4) gitCur.renderMode = 3;
+ else if (gitCur.renderMode == 5) gitCur.renderMode = 1;
+
+ if (gitCur.platform == 2) gitCur.platform = 6;
+ else if (gitCur.platform == 5) gitCur.platform = 8;
+ else if (gitCur.platform == 6) gitCur.platform = 2;
+
+ if (gitCur.language == 1) gitCur.language = 4;
+ else if (gitCur.language == 2) gitCur.language = 6;
+ else if (gitCur.language == 3) gitCur.language = 5;
+ else if (gitCur.language == 4) gitCur.language = 8;
+ else if (gitCur.language == 5) gitCur.language = 11;
+ else if (gitCur.language == 6) gitCur.language = 13;
+ else if (gitCur.language == 7) gitCur.language = 9;
+ else if (gitCur.language == 8) gitCur.language = 1;
+ else if (gitCur.language == 9) gitCur.language = 10;
+ else if (gitCur.language == 10) gitCur.language = 7;
+ else if (gitCur.language == 11) gitCur.language = 12;
+ else if (gitCur.language == 12) gitCur.language = 2;
+ else if (gitCur.language == 13) gitCur.language = 3;
+
+ if (gitCur.musicInfo.sound.drvMusic == 1) gitCur.musicInfo.sound.drvMusic = 4;
+ else if (gitCur.musicInfo.sound.drvMusic == 2) gitCur.musicInfo.sound.drvMusic = 5;
+ else if (gitCur.musicInfo.sound.drvMusic == 4) gitCur.musicInfo.sound.drvMusic = 2;
+ else if (gitCur.musicInfo.sound.drvMusic == 5) gitCur.musicInfo.sound.drvMusic = 1;
+ }
+
+ if (version <= itemVersion_340) {
+ gitCur.platform++;
+
+ if (gitCur.language == 3)
+ gitCur.language = 0;
+ else if (gitCur.language >= 11)
+ gitCur.language++;
+ }
+
+ if (version <= itemVersion_350)
+ if (gitCur.platform >= 9)
+ gitCur.platform++;
+
+ if (version <= itemVersion_351) {
+ if (gitCur.engine >= ENGINE_LURE) // newly added engine
+ gitCur.engine++;
+
+ if (gitCur.engine == ENGINE_SCUMM) // reorder
+ gitCur.engine = ENGINE_SIMON;
+ else if (gitCur.engine == ENGINE_SIMON)
+ gitCur.engine = ENGINE_SCUMM;
+ }
+
+ if (version <= itemVersion_352) {
+ if (gitCur.engine >= ENGINE_CINE) // newly added engine
+ gitCur.engine++;
+
+ gitCur.platform++;
+ }
+
+ if (version <= itemVersion_353)
+ gitCur.musicInfo.sound.drvMusic++;
+
+ if (version <= itemVersion_354)
+ if (gitCur.engine >= ENGINE_AGI) // newly added engine
+ gitCur.engine++;
+
+ if (gitCur.musicInfo.volume.palm > 100)
+ gitCur.musicInfo.volume.palm = 50;
+
+ // simply resize the old record
+ tmpH = DmResizeRecord(gameDB, index, sizeof(GameInfoType)); // TODO : check error on resize tmpH==NULL
+ tmpP = MemHandleLock(tmpH);
+ DmWrite(tmpP, 0, &gitCur, sizeof(GameInfoType));
+ MemPtrUnlock(tmpP);
+ }
+
+ } else if (version == itemVersion_200) {
+ // need conversion from V2 -> V3.5.2
+ GameInfoTypeV2 git0;
+
+ for (index = 0; index < numRecs; index++) {
+
+ // get old data
+ tmpH = DmQueryRecord(gameDB, index);
+ tmpP = MemHandleLock(tmpH);
+ MemMove(&git0, tmpP, sizeof(GameInfoTypeV2));
+ MemHandleUnlock(tmpH);
+
+ // convert to new format
+ gitCur.version = curItemVersion;
+ gitCur.icnID = 0xFFFF;
+ gitCur.selected = git0.selected;
+ StrCopy(gitCur.nameP, git0.nameP);
+ StrCopy(gitCur.pathP, git0.pathP);
+ StrCopy(gitCur.gameP, git0.gameP);
+ gitCur.gfxMode = (git0.gfxMode == 3 ? 1 : 0); // v3.4 only 2 modes
+
+ gitCur.autoLoad = git0.autoLoad;
+ gitCur.bootParam = git0.bootParam;
+ gitCur.setPlatform = git0.setPlatform;
+ gitCur.subtitles = git0.subtitles;
+ gitCur.talkSpeed = git0.talkSpeed;
+
+ gitCur.loadSlot = git0.loadSlot;
+ gitCur.bootValue = git0.bootValue;
+ gitCur.talkValue = git0.talkValue;
+ gitCur.platform = git0.platform;
+ gitCur.language = git0.language;
+
+ gitCur.musicInfo.volume.palm = 50;
+ gitCur.musicInfo.volume.music = 192;
+ gitCur.musicInfo.volume.sfx = 192;
+ gitCur.musicInfo.volume.speech = 192;
+ gitCur.musicInfo.volume.audiocd = 50;
+
+ gitCur.musicInfo.sound.tempo = 100;
+ gitCur.musicInfo.sound.defaultTrackLength = 10;
+ gitCur.musicInfo.sound.firstTrack = 1;
+
+ // to V3.4
+ if (gitCur.platform == 2) gitCur.platform = 6;
+ else if (gitCur.platform == 5) gitCur.platform = 8;
+ else if (gitCur.platform == 6) gitCur.platform = 2;
+
+ if (gitCur.language == 1) gitCur.language = 4;
+ else if (gitCur.language == 2) gitCur.language = 6;
+ else if (gitCur.language == 3) gitCur.language = 5;
+ else if (gitCur.language == 4) gitCur.language = 8;
+ else if (gitCur.language == 5) gitCur.language = 11;
+ else if (gitCur.language == 6) gitCur.language = 13;
+ else if (gitCur.language == 7) gitCur.language = 9;
+ else if (gitCur.language == 8) gitCur.language = 1;
+ else if (gitCur.language == 9) gitCur.language = 10;
+ else if (gitCur.language == 10) gitCur.language = 7;
+ else if (gitCur.language == 11) gitCur.language = 12;
+ else if (gitCur.language == 12) gitCur.language = 2;
+ else if (gitCur.language == 13) gitCur.language = 3;
+
+ if (gitCur.musicInfo.sound.drvMusic == 1) gitCur.musicInfo.sound.drvMusic = 4;
+ else if (gitCur.musicInfo.sound.drvMusic == 2) gitCur.musicInfo.sound.drvMusic = 5;
+ else if (gitCur.musicInfo.sound.drvMusic == 4) gitCur.musicInfo.sound.drvMusic = 2;
+ else if (gitCur.musicInfo.sound.drvMusic == 5) gitCur.musicInfo.sound.drvMusic = 1;
+
+ // to V3.5
+ gitCur.platform++;
+
+ if (gitCur.language == 3)
+ gitCur.language = 0;
+ else if (gitCur.language >= 11)
+ gitCur.language++;
+
+ // to V3.5.1
+ if (gitCur.platform >= 9)
+ gitCur.platform++;
+
+ //to V3.5.3
+ gitCur.musicInfo.sound.drvMusic++;
+
+ // -----
+ gitCur.engine = ENGINE_SCUMM;
+
+ tmpH = DmResizeRecord(gameDB, index, sizeof(GameInfoType)); // TODO : check error on resize tmpH==NULL
+ tmpP = MemHandleLock(tmpH);
+ DmWrite(tmpP, 0, &gitCur, sizeof(GameInfoType));
+ MemPtrUnlock(tmpP);
+ }
+ } else {
+ // need conversion from V0 -> V3.5.2
+ GameInfoTypeV0 git0;
+
+ for (index = 0; index < numRecs; index++) {
+
+ // get old data
+ tmpH = DmQueryRecord(gameDB, index);
+ tmpP = MemHandleLock(tmpH);
+ MemMove(&git0, tmpP, sizeof(GameInfoTypeV0));
+ MemHandleUnlock(tmpH);
+
+ // convert to new format
+ gitCur.version = curItemVersion;
+ gitCur.icnID = 0xFFFF;
+ gitCur.selected = git0.selected;
+ StrCopy(gitCur.nameP, git0.nameP);
+ StrCopy(gitCur.pathP, git0.pathP);
+ StrCopy(gitCur.gameP, git0.gameP);
+ gitCur.gfxMode = (git0.gfxMode == 3 ? 1 : 0); // v3.4 only 2 modes
+
+ gitCur.autoLoad = git0.autoLoad;
+ gitCur.bootParam = git0.bootParam;
+ gitCur.setPlatform = git0.amiga; // amiga become platform amiga/atari-st/machintosh
+ gitCur.platform = 1;
+ gitCur.subtitles = git0.subtitles;
+ gitCur.talkSpeed = git0.talkSpeed;
+
+ gitCur.loadSlot = git0.loadSlot;
+ gitCur.bootValue = git0.bootValue;
+ gitCur.talkValue = git0.talkValue;
+ gitCur.platform = 2; // default to amiga
+ gitCur.language = git0.language;
+
+ gitCur.musicInfo.volume.palm = 50;
+ gitCur.musicInfo.volume.music = 192;
+ gitCur.musicInfo.volume.sfx = 192;
+ gitCur.musicInfo.volume.speech = 192;
+ gitCur.musicInfo.volume.audiocd = 50;
+
+ gitCur.musicInfo.sound.tempo = 100;
+ gitCur.musicInfo.sound.defaultTrackLength = 10;
+ gitCur.musicInfo.sound.firstTrack = 1;
+
+ gitCur.engine = ENGINE_SCUMM;
+
+ tmpH = DmResizeRecord(gameDB, index, sizeof(GameInfoType)); // TODO : check error on resize tmpH==NULL
+ tmpP = MemHandleLock(tmpH);
+ DmWrite(tmpP, 0, &gitCur, sizeof(GameInfoType));
+ MemPtrUnlock(tmpP);
+ }
+ }
+
+ FrmEraseForm(frmP);
+ FrmDeleteForm(frmP);
+ if (ofmP)
+ FrmSetActiveForm(ofmP);
+ }
+ }
+ }
+
+ return errNone;
+}
+
+Err GamOpenDatabase() {
+ Err err = errNone;
+
+ gameDB = DmOpenDatabaseByTypeCreator( 'DATA', appFileCreator, dmModeReadWrite);
+
+ if (!gameDB) {
+ err = DmCreateDatabase(0, "ScummVM-Data", appFileCreator, 'DATA', false);
+ if (!err) {
+ gameDB = DmOpenDatabaseByTypeCreator( 'DATA', appFileCreator, dmModeReadWrite);
+
+ if (!gameDB)
+ err = DmGetLastErr();
+ }
+ }
+
+ if (err)
+ FrmCustomAlert(FrmErrorAlert,"Cannot open/create games list DB !",0,0);
+ else
+ err = GamUpdateList();
+
+ return err;
+}
+
+void GamImportDatabase() {
+ if (gPrefs->card.volRefNum != vfsInvalidVolRef && gPrefs->card.moveDB) {
+ FileRef file;
+ Err e;
+
+ e = VFSFileOpen(gPrefs->card.volRefNum, "/Palm/Programs/ScummVM/listdata.pdb", vfsModeRead, &file);
+ if (!e) {
+ UInt16 oCardNo, nCardNo;
+ LocalID oDbID, nDbID;
+
+ VFSFileClose(file);
+ if (gPrefs->card.confirmMoveDB)
+ if (FrmCustomAlert(FrmConfirmAlert, "Do you want to import games database from memory card ?", 0, 0) == FrmConfirmNo) {
+ // prevent to replace the file on memory card
+ gPrefs->card.moveDB = false;
+ return;
+ }
+
+ // get current db info and rename it
+ DmOpenDatabaseInfo(gameDB, &oDbID, 0, 0, &oCardNo, 0);
+ GamCloseDatabase(true);
+ e = DmDeleteDatabase(oCardNo, oDbID);
+
+ if (!e)
+ if (e = VFSImportDatabaseFromFile(gPrefs->card.volRefNum, "/Palm/Programs/ScummVM/listdata.pdb", &nCardNo, &nDbID))
+ FrmCustomAlert(FrmErrorAlert, "Failed to import games database from memory card.", 0, 0);
+
+ GamOpenDatabase();
+ }
+ }
+}
+
+void GamCloseDatabase(Boolean ignoreCardParams) {
+ if (gameDB) {
+ LocalID dbID;
+ UInt16 cardNo;
+
+ DmOpenDatabaseInfo(gameDB, &dbID, 0, 0, &cardNo, 0);
+ DmCloseDatabase(gameDB);
+
+ if (!ignoreCardParams) {
+ if (gPrefs->card.moveDB && gPrefs->card.volRefNum != vfsInvalidVolRef) {
+ VFSFileRename(gPrefs->card.volRefNum, "/Palm/Programs/ScummVM/listdata.pdb", "listdata-old.pdb");
+ Err e = VFSExportDatabaseToFile(gPrefs->card.volRefNum, "/Palm/Programs/ScummVM/listdata.pdb", cardNo, dbID);
+ if (!e) {
+ VFSFileDelete(gPrefs->card.volRefNum, "/Palm/Programs/ScummVM/listdata-old.pdb");
+ if (gPrefs->card.deleteDB)
+ DmDeleteDatabase(cardNo, dbID);
+ } else {
+ VFSFileRename(gPrefs->card.volRefNum, "/Palm/Programs/ScummVM/listdata-old.pdb", "listdata.pdb");
+ }
+ }
+ }
+ }
+ gameDB = NULL;
+}
+
+static Int16 GamCompare(GameInfoType *a, GameInfoType *b, SortRecordInfoPtr, SortRecordInfoPtr, MemHandle) {
+ return StrCaselessCompare(a->nameP, b->nameP);
+}
+
+Err GamSortList() {
+ return DmQuickSort (gameDB, (DmComparF *)GamCompare, 0);
+}
+
+void GamUnselect() {
+ GameInfoType *game;
+
+ MemHandle recordH;
+ UInt16 index;
+
+ index = GamGetSelected();
+
+ if (index != dmMaxRecordIndex) {
+ Boolean newValue;
+
+ recordH = DmGetRecord(gameDB, index);
+ game = (GameInfoType *)MemHandleLock(recordH);
+
+ newValue = false;
+ DmWrite(game, OffsetOf(GameInfoType,selected), &newValue, sizeof(Boolean));
+
+ MemHandleUnlock(recordH);
+ DmReleaseRecord (gameDB, index, 0);
+ }
+}
+
+UInt16 GamGetSelected() {
+ MemHandle record;
+ GameInfoType *game;
+ Boolean selected;
+ UInt16 index = DmNumRecords(gameDB)-1;
+
+ while (index != (UInt16)-1) {
+ record = DmQueryRecord(gameDB, index);
+ game = (GameInfoType *)MemHandleLock(record);
+ selected = game->selected;
+ MemHandleUnlock(record);
+
+ if (selected)
+ return index;
+
+ index--;
+ }
+
+ return dmMaxRecordIndex;
+}
+
+Boolean GamJumpTo(Char letter) {
+ MemHandle record;
+ GameInfoType *game;
+ Boolean found = false;
+ UInt16 index = 0;
+ UInt16 maxIndex = DmNumRecords(gameDB);
+ UInt16 active = GamGetSelected();
+
+ while (index < maxIndex) {
+ record = DmGetRecord(gameDB, index);
+ game = (GameInfoType *)MemHandleLock(record);
+
+ if (tolower(game->nameP[0]) == tolower(letter)) {
+ found = true;
+
+ if (index != active) {
+ RectangleType rArea;
+ UInt16 maxView;
+ Boolean newValue = true;
+
+ SknGetListBounds(&rArea, NULL);
+ maxView = rArea.extent.y / sknInfoListItemSize;
+
+ GamUnselect();
+ DmWrite(game, OffsetOf(GameInfoType,selected), &newValue, sizeof(Boolean));
+
+ if (index < gPrefs->listPosition || index >= (gPrefs->listPosition + maxView))
+ gPrefs->listPosition = index;
+ }
+ }
+
+ MemHandleUnlock(record);
+ DmReleaseRecord (gameDB, index, 0);
+
+ index++;
+
+ if (found)
+ return found;
+ }
+
+ return found;
+}
diff --git a/backends/platform/PalmOS/Src/launcher/games.h b/backends/platform/PalmOS/Src/launcher/games.h
new file mode 100644
index 0000000000..bb005e66fb
--- /dev/null
+++ b/backends/platform/PalmOS/Src/launcher/games.h
@@ -0,0 +1,201 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 __GAMES_H__
+#define __GAMES_H__
+
+#define curItemVersion sysMakeROMVersion(3,5,5,0,0) // Added : AGI engine
+
+
+#define itemVersion_354 sysMakeROMVersion(3,5,4,0,0) // Added : Default/Auto music driver
+#define itemVersion_353 sysMakeROMVersion(3,5,3,0,0) // Added : CinE engine and 3DO platform
+#define itemVersion_352 sysMakeROMVersion(3,5,2,0,0) // Added : Lure engine
+#define itemVersion_351 sysMakeROMVersion(3,5,1,0,0) // Added : Sega CD platform
+#define itemVersion_350 sysMakeROMVersion(3,5,0,0,0)
+#define itemVersion_340 sysMakeROMVersion(3,4,0,0,0)
+#define itemVersion_330 sysMakeROMVersion(3,3,0,0,0)
+#define itemVersion_320 sysMakeROMVersion(3,2,0,0,0)
+#define itemVersion_310 sysMakeROMVersion(3,1,0,0,0)
+#define itemVersion_300 sysMakeROMVersion(3,0,0,0,0)
+#define itemVersion_270 sysMakeROMVersion(2,7,0,0,0)
+#define itemVersion_260 sysMakeROMVersion(2,6,0,0,0)
+#define itemVersion_250 sysMakeROMVersion(2,5,0,0,0)
+#define itemVersion_200 sysMakeROMVersion(2,0,0,0,0)
+
+// old config structs
+typedef struct {
+ UInt32 version;
+ UInt16 icnID; // icon to display on the list
+ Boolean selected;
+
+ Char nameP[50]; // game name to display in list
+ Char pathP[150]; // path to the game files
+ Char gameP[10]; // scumm name of the game
+ UInt16 gfxMode;
+
+ Boolean autoLoad;
+ UInt16 loadSlot;
+ Boolean bootParam;
+ UInt16 bootValue;
+ Boolean amiga;
+ Boolean subtitles;
+ Boolean talkSpeed;
+ UInt16 talkValue;
+ UInt8 language;
+
+} GameInfoTypeV0;
+
+typedef struct {
+ UInt32 version;
+ UInt16 icnID; // icon to display on the list
+ Boolean selected;
+
+ Char nameP[50]; // game name to display in list
+ Char pathP[150]; // path to the game files
+ Char gameP[10]; // scumm name of the game
+ UInt16 gfxMode;
+
+ Boolean autoLoad;
+ Boolean bootParam;
+ Boolean setPlatform;
+ Boolean subtitles;
+ Boolean talkSpeed;
+
+ UInt16 loadSlot;
+ UInt16 bootValue;
+ UInt16 talkValue;
+ UInt8 platform;
+ UInt8 language;
+
+} GameInfoTypeV2;
+
+
+// Current config
+typedef struct {
+ struct {
+ UInt16 palm;
+ UInt16 music;
+ UInt16 sfx; // TODO : remove
+ UInt16 speech;
+ UInt16 audiocd;
+ } volume;
+
+ struct {
+ // midi
+ Boolean multiMidi;
+ Boolean music; // TODO : rename this, it is enable audio option
+ UInt8 drvMusic;
+ UInt8 tempo;
+ // sound FX
+ Boolean sfx; // TODO : remove this
+ UInt8 rate;
+ // CD audio
+ Boolean CD;
+ UInt8 drvCD, frtCD;
+ UInt16 defaultTrackLength;
+ UInt16 firstTrack;
+ } sound;
+} MusicInfoType;
+
+typedef struct {
+ UInt32 version;
+ UInt16 icnID; // icon to display on the list
+ Boolean selected;
+
+ Char nameP[50]; // game name to display in list
+ Char pathP[150]; // path to the game files
+ Char gameP[15]; // scumm name of the game
+ UInt16 gfxMode;
+
+ Boolean autoLoad;
+ Boolean bootParam;
+ Boolean setPlatform;
+ Boolean subtitles;
+ Boolean talkSpeed;
+
+ UInt16 loadSlot;
+ UInt16 bootValue;
+ UInt16 talkValue;
+ UInt8 platform;
+ UInt8 language; // |- v2.5
+
+ Boolean filter; // v2.6
+ Boolean fullscreen; // |
+ Boolean aspectRatio; // |- v2.7
+
+ MusicInfoType musicInfo;// v3.0
+
+ UInt8 engine; // |- v3.1
+ UInt8 renderMode; // |- v3.2
+// Boolean use16Bit; // |- v3.3 // removed
+ UInt8 fmQuality; // |- v3.4 // replace use16Bit
+} GameInfoType;
+
+enum {
+ ENGINE_SKY = 0,
+ ENGINE_SWORD1,
+ ENGINE_SWORD2,
+ ENGINE_CINE,
+ ENGINE_QUEEN,
+ ENGINE_LURE,
+ ENGINE_GOB,
+ ENGINE_KYRA,
+ ENGINE_SAGA,
+ ENGINE_SCUMM,
+ ENGINE_AGI,
+ ENGINE_SIMON,
+ ENGINE_COUNT
+};
+
+static const struct {
+ const char *fileP;
+ const char *nameP;
+} engines[] = {
+ { "sky", "Beneath a Steel Sky" },
+ { "sword1", "Broken Sword 1" },
+ { "sword2", "Broken Sword 2" },
+ { "cine", "Delphine Cinematique v1.0" },
+ { "queen", "Flight of the Amazon Queen" },
+ { "lure", "Lure of the Tempress" },
+ { "gob", "Gobliiins" },
+ { "kyra", "Kyrandia" },
+ { "saga", "SAGA Engine" },
+ { "scumm", "Scumm Games" },
+ { "agi", "Sierra AGI" },
+ { "simon", "Simon the Sorcerer" },
+};
+
+
+// protos
+Err GamOpenDatabase ();
+void GamImportDatabase ();
+void GamCloseDatabase (Boolean ignoreCardParams);
+Err GamSortList ();
+UInt16 GamGetSelected ();
+void GamUnselect ();
+Boolean GamJumpTo (Char letter);
+
+extern DmOpenRef gameDB;
+
+#endif
diff --git a/backends/platform/PalmOS/Src/launcher/launch.cpp b/backends/platform/PalmOS/Src/launcher/launch.cpp
new file mode 100644
index 0000000000..c57738bb5f
--- /dev/null
+++ b/backends/platform/PalmOS/Src/launcher/launch.cpp
@@ -0,0 +1,517 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 <PalmOS.h>
+#include "StarterRsc.h"
+
+#include "games.h"
+#include "start.h"
+#include "rumble.h"
+#include "extend.h"
+#include "globals.h"
+#include "features.h"
+#include "formUtil.h"
+#include "formCards.h"
+#include "palmdefs.h"
+
+#include "init_palmos.h"
+#include "init_stuffs.h"
+
+#include "modules.h"
+#include "args.h"
+
+
+#define BUILD_ERROR(m) \
+ { StrCopy(msg, m); \
+ StrCat(msg, "\n\nPlease check that all required files are installed on your card, and you have enough free storage memory."); \
+ goto onError; }
+
+#define BUILD_FILE(h,m) \
+ StrCopy(filename, "/Palm/Programs/ScummVM/Mods/"); \
+ StrCat(filename, h); \
+ StrCat(filename, m);
+
+#define CHECK_FILE(m) \
+ e = VFSFileOpen(volRefNum, filename, vfsModeRead, &file); \
+ if (e) \
+ BUILD_ERROR(m) \
+ else \
+ VFSFileClose(file);
+
+#define IMPRT_FILE(m) \
+ e = VFSImportDatabaseFromFile(volRefNum, filename, &cardNo, &dbID); \
+ if (e) \
+ BUILD_ERROR(m)
+
+#define DELET_FILE(f) \
+ del_dbID = DmFindDatabase(0, f); \
+ if (del_dbID) \
+ DmDeleteDatabase(0, del_dbID);
+
+void ModDelete() {
+ LocalID del_dbID;
+
+ DELET_FILE("Glbs::Common");
+ DELET_FILE("Glbs::Engine");
+ DELET_FILE("ScummVM-Engine");
+}
+
+static void ModSetStack(UInt32 newSize, UInt16 cardNo, LocalID dbID) {
+ DmOpenRef dbRef = DmOpenDatabase(cardNo, dbID, dmModeReadWrite);
+
+ if (dbRef) {
+ MemHandle pref = DmGetResource('pref',0);
+ UInt32 size = 0;
+
+ if (pref) {
+ SysAppPrefsType *data = (SysAppPrefsType *)MemHandleLock(pref);
+ size = data->stackSize;
+
+ if (newSize) {
+ SysAppPrefsType newData;
+ MemMove(&newData, data, sizeof(SysAppPrefsType));
+ newData.stackSize = newSize;
+ DmWrite(data, 0, &newData, sizeof(SysAppPrefsType));
+ }
+
+ MemPtrUnlock(data);
+ DmReleaseResource(pref);
+ }
+
+ DmCloseDatabase(dbRef);
+ }
+}
+
+static Err ModImport(UInt16 volRefNum, UInt8 engine, Boolean *armP) {
+#ifndef _DEBUG_ENGINE
+ char filename[256];
+ UInt16 cardNo;
+ LocalID dbID;
+ UInt32 result;
+ FileRef file;
+#endif
+ char msg[256];
+ FormPtr ofmP, frmP;
+ Err e = errNone;
+
+ ofmP = FrmGetActiveForm();
+ frmP = FrmInitForm(ImportForm);
+ FrmSetActiveForm(frmP);
+ FrmDrawForm(frmP);
+
+ // In debug mode, the engine files are directly uploaded to the simulator
+#ifndef _DEBUG_ENGINE
+ // engine file ?
+ BUILD_FILE(engines[engine].fileP, ".engine");
+ CHECK_FILE("ScummVM engine file was not found !");
+ IMPRT_FILE("Cannot import engine file !");
+
+ // need more files ?
+ dbID = DmFindDatabase(0, "ScummVM-Engine"); // be sure to have the correct dbID
+ e = SysAppLaunch(cardNo, dbID, 0, sysAppLaunchCustomEngineGetInfo, 0, &result);
+ *armP = ((result & GET_MODEARM) == GET_MODEARM);
+
+ // common file ?
+ if (!e && (result & GET_DATACOMMON)) {
+ BUILD_FILE("common", ".data");
+ CHECK_FILE("Common data file was not found !");
+ IMPRT_FILE("Cannot import common data file !");
+ }
+ // data file ?
+ if (!e && (result & GET_DATAENGINE)) {
+ BUILD_FILE(engines[engine].fileP, ".data");
+ CHECK_FILE("Engine data file was not found !");
+ IMPRT_FILE("Cannot import engine data file !");
+ }
+#endif
+ // if error, cleanup
+ if (e) ModDelete();
+
+onError:
+ FrmEraseForm(frmP);
+ FrmDeleteForm(frmP);
+ if (e) {
+ if (ofmP) FrmSetActiveForm(ofmP);
+ FrmCustomAlert(FrmErrorAlert, msg, 0, 0);
+ }
+
+ return e;
+}
+
+#undef DELET_FILE
+#undef CHECK_FILE
+#undef BUILD_FILE
+
+Boolean StartScummVM() {
+ Char **argvP;
+ UInt8 lightspeed, argc = 0;
+ UInt32 stackSize;
+ Boolean toLauncher, direct, isARM;
+ UInt8 engine;
+ Char num[6];
+
+ UInt16 index = GamGetSelected();
+
+ argvP = ArgsInit();
+ direct = false;
+
+ // start command line (exec name)
+ ArgsAdd(&argvP[argc], "-", NULL, &argc);
+
+ // no game selected
+ if (index == dmMaxRecordIndex) {
+ ListPtr listP;
+ UInt16 whichButton;
+
+ // init form
+ FormPtr frmP = FrmInitForm(EngineForm);
+ listP = (ListType *)FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, EngineListList));
+ itemsText = (Char **)MemPtrNew(ENGINE_COUNT * sizeof(Char *));
+
+ for (int i = 0; i < ENGINE_COUNT; i++)
+ itemsText[i] = (Char *)engines[i].nameP;
+
+ LstSetListChoices (listP, itemsText, ENGINE_COUNT);
+ LstSetSelection(listP, 0);
+
+ whichButton = FrmDoDialog(frmP);
+ engine = LstGetSelection(listP);
+
+ FrmDeleteForm(frmP);
+ MemPtrFree(itemsText);
+ itemsText = NULL;
+
+ if (whichButton == EngineCancelButton) {
+ if (bDirectMode) {
+ // and force exit if nothing selected
+ EventType event;
+ event.eType = keyDownEvent;
+ event.data.keyDown.chr = vchrLaunch;
+ event.data.keyDown.modifiers = commandKeyMask;
+ EvtAddUniqueEventToQueue(&event, 0, true);
+ }
+ // free args
+ ArgsFree(argvP);
+ return false;
+ }
+
+ // default values
+ if (bDirectMode)
+ gPrefs->card.volRefNum = parseCards(); // always use the first removable card available (?)
+ gVars->filter = true;
+ gVars->palmVolume = 50;
+ gVars->fmQuality = FM_QUALITY_INI;
+ direct = true;
+
+ // somthing selected
+ } else {
+ Char pathP[256];
+ MemHandle recordH;
+ GameInfoType *gameInfoP;
+
+ recordH = DmQueryRecord(gameDB,index);
+ gameInfoP = (GameInfoType *)MemHandleLock(recordH);
+ engine = gameInfoP->engine;
+
+ // build path
+ StrCopy(pathP,"/Palm/Programs/ScummVM/Games/");
+ if (gameInfoP->pathP[0] == '/')
+ StrCopy(pathP, gameInfoP->pathP);
+ else if (!(gameInfoP->pathP[0] == '.' && StrLen(gameInfoP->pathP) == 1))
+ StrCat(pathP, gameInfoP->pathP);
+
+ // path
+ ArgsAdd(&argvP[argc], "-p", pathP, &argc);
+
+ // language
+ if (gameInfoP->language > 0) {
+ const Char *lang = "zh\0cz\0gb\0en\0fr\0de\0hb\0it\0jp\0kr\0pl\0pt\0ru\0es\0se\0";
+ ArgsAdd(&argvP[argc], "-q", (lang + (gameInfoP->language - 1) * 3), &argc);
+ }
+
+ // fullscreen ?
+ if (gameInfoP->fullscreen)
+ ArgsAdd(&argvP[argc], "-f", NULL, &argc);
+
+ // aspect-ratio ?
+ ArgsAdd(&argvP[argc], (gameInfoP->aspectRatio ? "--aspect-ratio" : "--no-aspect-ratio"), NULL, &argc);
+
+ // gfx mode
+ gVars->filter = gameInfoP->filter;
+
+ switch (gameInfoP->renderMode) {
+ case 1:
+ ArgsAdd(&argvP[argc], "--render-mode=", "amiga", &argc);
+ break;
+ case 2:
+ ArgsAdd(&argvP[argc], "--render-mode=", "cga", &argc);
+ break;
+ case 3:
+ ArgsAdd(&argvP[argc], "--render-mode=", "ega", &argc);
+ break;
+ case 4:
+ ArgsAdd(&argvP[argc], "--render-mode=", "hercAmber", &argc);
+ break;
+ case 5:
+ ArgsAdd(&argvP[argc], "--render-mode=", "hercGreen", &argc);
+ break;
+ }
+
+ switch (gameInfoP->gfxMode) {
+ case 1:
+ ArgsAdd(&argvP[argc], "-g", "wide", &argc);
+ break;
+ default:
+ ArgsAdd(&argvP[argc], "-g", "1x", &argc);
+ break;
+ }
+
+ // load state
+ if (gameInfoP->autoLoad) {
+ StrIToA(num, gameInfoP->loadSlot);
+ ArgsAdd(&argvP[argc], "-x", num, &argc);
+ }
+ // boot script parameter
+ if (gameInfoP->bootParam) {
+ StrIToA(num, gameInfoP->bootValue);
+ ArgsAdd(&argvP[argc], "-b", num, &argc);
+ }
+ // not a PC version
+ if (gameInfoP->setPlatform) {
+ static const char *platform[] = {
+ "3do",
+ "acorn",
+ "amiga",
+ "atari",
+ "c64",
+ "pc",
+ "fmtowns",
+ "linux",
+ "mac",
+ "nes",
+ "segacd",
+ "windows"
+ };
+ ArgsAdd(&argvP[argc], "--platform=", platform[gameInfoP->platform], &argc);
+ }
+
+ // subtitles
+ if (gameInfoP->subtitles)
+ ArgsAdd(&argvP[argc], "-n", NULL, &argc);
+
+ // multi midi ?
+ if (gameInfoP->musicInfo.sound.multiMidi)
+ ArgsAdd(&argvP[argc], "--multi-midi", NULL, &argc);
+
+ if (engine == ENGINE_SCUMM) {
+ // music tempo
+ StrIToA(num, gameInfoP->musicInfo.sound.tempo);
+ ArgsAdd(&argvP[argc], "--tempo=", num, &argc);
+ }
+
+ // talk speed
+ if (gameInfoP->talkSpeed) {
+ StrIToA(num, gameInfoP->talkValue);
+ ArgsAdd(&argvP[argc], "--talkspeed=", num, &argc);
+ }
+
+ // music driver
+ if (gameInfoP->musicInfo.sound.music) {
+ static char *drv[] = {
+ "auto",
+ "null",
+ "adlib",
+ "towns",
+ "pcjr",
+ "native",
+ "pcspk"
+ };
+
+ if (StrCompare(drv[gameInfoP->musicInfo.sound.drvMusic], "native") == 0) {
+ if (OPTIONS_TST(kOptDeviceZodiac))
+ ArgsAdd(&argvP[argc], "-e", "zodiac", &argc); // Tapwave Zodiac
+ else if (OPTIONS_TST(kOptSonyPa1LibAPI))
+ ArgsAdd(&argvP[argc], "-e", "ypa1", &argc); // Pa1Lib devices
+ else
+ ArgsAdd(&argvP[argc], "-e", "auto", &argc); // no driver, switch to auto
+ } else {
+ ArgsAdd(&argvP[argc], "-e", drv[gameInfoP->musicInfo.sound.drvMusic], &argc);
+ }
+
+ // output rate
+ UInt32 rates[] = {4000, 8000, 11025, 22050, 44100};
+ StrIToA(num, rates[gameInfoP->musicInfo.sound.rate]);
+ ArgsAdd(&argvP[argc], "--output-rate=", num, &argc);
+
+ // FM quality
+ gVars->fmQuality = gameInfoP->fmQuality;
+
+ } else {
+ ArgsAdd(&argvP[argc], "-e", "null", &argc);
+ }
+
+ // volume control
+ StrIToA(num, gameInfoP->musicInfo.volume.sfx);
+ ArgsAdd(&argvP[argc], "-s", num, &argc);
+ StrIToA(num, gameInfoP->musicInfo.volume.music);
+ ArgsAdd(&argvP[argc], "-m", num, &argc);
+ StrIToA(num, gameInfoP->musicInfo.volume.speech);
+ ArgsAdd(&argvP[argc], "-r", num, &argc);
+
+ // game name
+ ArgsAdd(&argvP[argc], gameInfoP->gameP, NULL, &argc);
+
+ // others globals data
+ gVars->CD.enable = gameInfoP->musicInfo.sound.CD;
+ gVars->CD.driver = gameInfoP->musicInfo.sound.drvCD;
+ gVars->CD.format = gameInfoP->musicInfo.sound.frtCD;
+ gVars->CD.volume = gameInfoP->musicInfo.volume.audiocd;
+ gVars->CD.defaultTrackLength = gameInfoP->musicInfo.sound.defaultTrackLength;
+ gVars->CD.firstTrack = gameInfoP->musicInfo.sound.firstTrack;
+ gVars->palmVolume = gameInfoP->musicInfo.sound.music ? gameInfoP->musicInfo.volume.palm : 0;
+
+ MemHandleUnlock(recordH);
+ } // end no game / game selected
+
+ // common command line options
+
+ // debug level
+ if (gPrefs->debug) {
+ StrIToA(num, gPrefs->debugLevel);
+ ArgsAdd(&argvP[argc], "-d", num, &argc);
+ }
+
+ if (engine == ENGINE_QUEEN || engine == ENGINE_SKY) {
+ // alternative intro ?
+ if (gPrefs->altIntro)
+ ArgsAdd(&argvP[argc], "--alt-intro", NULL, &argc);
+ }
+
+ if (engine == ENGINE_SCUMM) {
+ // demo mode ?
+ if (gPrefs->demoMode)
+ ArgsAdd(&argvP[argc], "--demo-mode", NULL, &argc);
+ }
+
+ // copy protection ?
+ if (gPrefs->copyProtection)
+ ArgsAdd(&argvP[argc], "--copy-protection", NULL, &argc);
+
+ // exceed max args ?
+ if (argc > MAX_ARG)
+ FrmCustomAlert(FrmErrorAlert, "Too many parameters.",0,0);
+
+ // set some common options
+ stackSize = (gPrefs->setStack ? STACK_LARGER : STACK_DEFAULT);
+ lightspeed= (gPrefs->lightspeed.enable ? gPrefs->lightspeed.mode : 255);
+ toLauncher= (gPrefs->exitLauncher);
+
+ // gVars values
+ // (gVars->HRrefNum defined in checkHRmode on Clié)
+ gVars->VFS.volRefNum = gPrefs->card.volRefNum;
+ gVars->vibrator = gPrefs->vibrator;
+ gVars->stdPalette = gPrefs->stdPalette;
+ gVars->VFS.cacheSize = (gPrefs->card.useCache ? gPrefs->card.cacheSize : 0);
+ gVars->indicator.showLED= gPrefs->card.showLED;
+ gVars->stylusClick = gPrefs->stylusClick;
+ gVars->autoSave = (gPrefs->autoSave ? gPrefs->autoSavePeriod : -1);
+ gVars->advancedMode = gPrefs->advancedMode;
+ gVars->arrowKeys = gPrefs->arrowKeys;
+
+ // user params
+ HWR_RSTALL();
+
+ if (gPrefs->goLCD)
+ HWR_SET(INIT_GOLCD);
+ else
+ OPTIONS_RST(kOptGoLcdAPI);
+
+ if (!gPrefs->autoOff)
+ HWR_SET(INIT_AUTOOFF);
+
+ if (gVars->vibrator)
+ HWR_SET(INIT_VIBRATOR);
+/* ????
+ if ( musicDriver == 1 ||
+ musicDriver == 3 ||
+ musicDriver == 4 ||
+ musicDriver == sysInvalidRefNum) {
+ HWR_SET(INIT_PA1LIB);
+ }
+*/
+ if (ModImport(gVars->VFS.volRefNum, engine, &isARM) != errNone) {
+ if (bDirectMode) {
+ // and force exit if nothing selected
+ EventType event;
+ event.eType = keyDownEvent;
+ event.data.keyDown.chr = vchrLaunch;
+ event.data.keyDown.modifiers = commandKeyMask;
+ EvtAddUniqueEventToQueue(&event, 0, true);
+ }
+ ArgsFree(argvP);
+ return false;
+ }
+
+ // reset mode if screen rotation occured (DIA only)
+ if (!direct && OPTIONS_TST(kOptCollapsible)) {
+ UInt8 mode = PalmScreenSize(0,0, &(gVars->screenFullWidth), &(gVars->screenFullHeight));
+ OPTIONS_RST(kOptModeLandscape);
+ OPTIONS_SET((mode == PALM_LANDSCAPE) ? kOptModeLandscape : kOptNone);
+ }
+
+ // free and save globals pref memory
+ GamCloseDatabase(false);
+ FrmCloseAllForms();
+ SavePrefs();
+
+ {
+ UInt16 cardNo;
+ UInt32 dbID;
+
+ LaunchParamType *cmdPBP = (LaunchParamType *)MemPtrNew(sizeof(LaunchParamType));
+
+ MemPtrSetOwner(cmdPBP, 0);
+ MemPtrSetOwner(gVars, 0);
+ ArgsSetOwner(argvP, 0);
+
+ cardNo = 0;
+ dbID = DmFindDatabase(0, "ScummVM-Engine");
+
+ if (isARM)
+ FtrSet(appFileCreator, ftrStack , (stackSize * 4));
+ else
+ ModSetStack(stackSize, cardNo, dbID);
+
+ cmdPBP->args.argc = argc;
+ cmdPBP->args.argv = argvP;
+ cmdPBP->gVars = gVars;
+ cmdPBP->lightspeed = lightspeed;
+ cmdPBP->exitLauncher = toLauncher;
+
+ SysUIAppSwitch(cardNo, dbID, sysAppLaunchCmdNormalLaunch, cmdPBP);
+ bLaunched = true;
+ }
+
+ return false;
+}
diff --git a/backends/platform/PalmOS/Src/launcher/skin.cpp b/backends/platform/PalmOS/Src/launcher/skin.cpp
new file mode 100644
index 0000000000..f38fe88d46
--- /dev/null
+++ b/backends/platform/PalmOS/Src/launcher/skin.cpp
@@ -0,0 +1,611 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 <PalmOS.h>
+#include <PalmOSGlue.h>
+#include <SonyClie.h>
+
+#include "start.h"
+#include "games.h"
+#include "globals.h"
+#include "skin.h"
+#include "StarterRsc.h"
+
+UInt16 lastIndex = dmMaxRecordIndex; // last select index in the list to prevent flash
+static WinHandle winLockH = NULL;
+
+MemPtr SknScreenLock(WinLockInitType initMode) {
+ Err e;
+ RectangleType r;
+
+ WinGetBounds(WinGetDisplayWindow(), &r);
+ winLockH = WinCreateOffscreenWindow(r.extent.x, r.extent.y, nativeFormat, &e);
+ WinSetDrawWindow(winLockH);
+
+ if (initMode == winLockCopy)
+ WinCopyRectangle(WinGetDisplayWindow(), winLockH, &r, 0, 0, winPaint);
+
+ return BmpGetBits(WinGetBitmap(winLockH));
+}
+
+void SknScreenUnlock() {
+ RectangleType r;
+
+ WinGetBounds(winLockH, &r);
+ WinCopyRectangle(winLockH, WinGetDisplayWindow(), &r, 0, 0, winPaint);
+ WinSetDrawWindow(WinGetDisplayWindow());
+ WinDeleteWindow(winLockH, false);
+ winLockH = NULL;
+}
+
+static void SknGetListColors(DmOpenRef skinDBP, UInt8 *text, UInt8 *selected, UInt8 *background) {
+ UInt16 colIndex;
+ MemHandle colH;
+ UInt8 *colTemp;
+
+ // default
+ *text = UIColorGetTableEntryIndex (UIMenuForeground);
+ *selected = UIColorGetTableEntryIndex (UIMenuSelectedForeground);
+ *background = UIColorGetTableEntryIndex (UIMenuSelectedFill);
+
+ if (skinDBP) {
+ colIndex = DmFindResource (skinDBP, sknColorsRsc, skinColors, NULL);
+
+ if (colIndex != (UInt16)-1) {
+ colH = DmGetResourceIndex(skinDBP, colIndex);
+
+ if (colH) {
+ colTemp = (UInt8 *)MemHandleLock(colH);
+
+ *text = colTemp[0];
+ *selected = colTemp[1];
+ *background = colTemp[2];
+
+ MemPtrUnlock(colTemp);
+ DmReleaseResource(colH);
+ }
+ }
+ }
+}
+
+static void SknCopyBits(DmOpenRef skinDBP, DmResID bitmapID, const RectangleType *srcRect, Coord destX, Coord destY) {
+ MemHandle hTemp;
+ BitmapPtr bmpTemp;
+ UInt16 index;
+
+ Coord cx, cy, cw, ch, bw, bh;
+ RectangleType copy, old;
+
+ if (skinDBP) {
+ // find the bitmap
+ index = DmFindResource (skinDBP, bitmapRsc, bitmapID, NULL);
+
+ if (index != (UInt16)-1) {
+ hTemp = DmGetResourceIndex(skinDBP,index);
+
+ if (hTemp) {
+ bmpTemp = (BitmapType *)MemHandleLock(hTemp);
+ BmpGlueGetDimensions(bmpTemp, &bw, &bh, 0);
+
+ if (!srcRect) {
+ cx = 0;
+ cy = 0;
+ cw = bw;
+ ch = bh;
+ } else {
+ cx = srcRect->topLeft.x;
+ cy = srcRect->topLeft.y;
+ cw = srcRect->extent.x;
+ ch = srcRect->extent.y;
+ }
+
+ if (ch) {
+ WinGetClip(&old);
+ if (OPTIONS_TST(kOptModeHiDensity)) {
+ Err e;
+ BitmapTypeV3 *bmp2P;
+
+ // create an uncompressed version of the bitmap
+ WinHandle win = WinCreateOffscreenWindow(bw, bh, screenFormat, &e);
+ WinHandle old = WinGetDrawWindow();
+ WinSetDrawWindow(win);
+ WinDrawBitmap(bmpTemp, 0, 0);
+ WinSetDrawWindow(old);
+
+ bmp2P = BmpCreateBitmapV3(WinGetBitmap(win), kDensityDouble, BmpGetBits(WinGetBitmap(win)), NULL);
+
+ copy.topLeft.x = destX / 2;
+ copy.topLeft.y = destY / 2;
+ copy.extent.x = cw / 2;
+ copy.extent.y = ch / 2;
+
+ WinSetClip(&copy);
+ WinDrawBitmap((BitmapPtr)bmp2P, (destX - cx) / 2, (destY - cy) / 2);
+ BmpDelete((BitmapPtr)bmp2P);
+ WinDeleteWindow(win, false);
+
+ } else {
+ copy.topLeft.x = destX;
+ copy.topLeft.y = destY;
+ copy.extent.x = cw;
+ copy.extent.y = ch;
+
+ HRWinSetClip(gVars->HRrefNum, &copy);
+ HRWinDrawBitmap(gVars->HRrefNum, bmpTemp, destX - cx, destY - cy);
+ }
+ WinSetClip(&old);
+ }
+
+ MemPtrUnlock(bmpTemp);
+ DmReleaseResource(hTemp);
+ }
+ }
+ }
+}
+
+void SknApplySkin() {
+ DmOpenRef skinDBP;
+ RectangleType r;
+ FormPtr frmP = FrmGetActiveForm();
+
+ // draw skin
+ FrmDrawForm(frmP);
+ SknScreenLock(winLockCopy);
+
+ skinDBP = SknOpenSkin();
+
+ if (gPrefs->card.volRefNum != vfsInvalidVolRef)
+ FrmShowObject(frmP, FrmGetObjectIndex (frmP, MainMSBitMap));
+ else
+ FrmShowObject(frmP, FrmGetObjectIndex (frmP, MainMSNoneBitMap));
+
+ WinSetForeColor(255);
+ WinSetDrawMode(winPaint);
+ WinDrawLine (0, 14, 159, 14);
+ WinDrawLine (0, 13, 159, 13);
+
+ SknGetObjectBounds(skinDBP, skinBackgroundImageTop, &r);
+ SknCopyBits(skinDBP, skinBackgroundImageTop, 0, r.topLeft.x, r.topLeft.y);
+ SknGetObjectBounds(skinDBP, skinBackgroundImageBottom, &r);
+ SknCopyBits(skinDBP, skinBackgroundImageBottom, 0, r.topLeft.x, r.topLeft.y);
+
+ for (UInt16 resID = 1100; resID <= 7000; resID += 100) {
+ SknSetState(skinDBP, resID, sknStateNormal);
+ SknShowObject(skinDBP, resID);
+ }
+
+ SknCloseSkin(skinDBP);
+ SknScreenUnlock();
+ SknUpdateList();
+}
+
+void SknGetObjectBounds(DmOpenRef skinDBP, DmResID resID, RectangleType *rP) {
+
+ UInt16 bmpIndex, strIndex;
+ MemHandle hBmp, hStr;
+ BitmapType *bmpTemp;
+ UInt8 *strTemp;
+
+ RctSetRectangle(rP, 0, 0, 0, 0);
+
+ if (skinDBP) {
+ bmpIndex = DmFindResource (skinDBP, bitmapRsc, resID, NULL);
+
+ if (bmpIndex != (UInt16)-1) { // if bmp exists
+ strIndex = DmFindResource (skinDBP, sknPosRsc, resID, NULL);
+
+ if (strIndex != (UInt16)-1) { // if params exist
+ hBmp = DmGetResourceIndex(skinDBP,bmpIndex);
+
+ if (hBmp) {
+ hStr = DmGetResourceIndex(skinDBP,strIndex);
+
+ if (hStr) {
+ // buttons : state|x|y|w/h slider|draw mode|x1/y1 keep|x2/y2 keep slider
+ // list (160mode) : state|x|y|w|h|
+ bmpTemp = (BitmapType *)MemHandleLock(hBmp);
+ strTemp = (UInt8 *)MemHandleLock(hStr);
+
+ BmpGlueGetDimensions(bmpTemp, &(rP->extent.x), &(rP->extent.y), 0);
+ rP->topLeft.x = strTemp[sknInfoPosX] * 2;
+ rP->topLeft.y = strTemp[sknInfoPosY] * 2;
+
+ MemPtrUnlock(strTemp);
+ DmReleaseResource(hStr);
+ }
+
+ MemPtrUnlock(bmpTemp);
+ DmReleaseResource(hBmp);
+ }
+ }
+ }
+ }
+}
+
+DmOpenRef SknOpenSkin() {
+ return DmOpenDatabase(gPrefs->skin.cardNo, gPrefs->skin.dbID, dmModeReadOnly);
+}
+
+void SknCloseSkin(DmOpenRef skinDBP) {
+ if (skinDBP)
+ DmCloseDatabase(skinDBP);
+}
+
+UInt8 SknSetState(DmOpenRef skinDBP, DmResID resID, UInt8 newState) {
+
+ UInt16 index;
+ MemHandle hStr;
+ UInt8 *strTemp;
+ UInt8 oldState = 0;
+
+ if (skinDBP) {
+ index = DmFindResource (skinDBP, sknPosRsc, resID, NULL);
+
+ if (index != (UInt16)-1) {
+ hStr = DmGetResourceIndex(skinDBP, index);
+
+ if (hStr) {
+ strTemp = (UInt8 *)MemHandleLock(hStr);
+ oldState = strTemp[sknInfoState];
+
+ if (oldState != newState) {
+ DmWrite(strTemp, 0, &newState, 1);
+ }
+
+ MemPtrUnlock(strTemp);
+ DmReleaseResource(hStr);
+ }
+ }
+ }
+
+ return oldState;
+}
+
+UInt8 SknGetDepth(DmOpenRef skinDBP) {
+ UInt16 index;
+ MemHandle hStr;
+ UInt8 *strTemp;
+ UInt8 depth = 8;
+
+ if (skinDBP) {
+ index = DmFindResource (skinDBP, sknDepthRsc, skinDepth, NULL);
+
+ if (index != (UInt16)-1) {
+ hStr = DmGetResourceIndex(skinDBP, index);
+
+ if (hStr) {
+ strTemp = (UInt8 *)MemHandleLock(hStr);
+ depth = *strTemp;
+ MemPtrUnlock(strTemp);
+ DmReleaseResource(hStr);
+ }
+ }
+ }
+
+ return depth;
+}
+
+UInt8 SknGetState(DmOpenRef skinDBP, DmResID resID) {
+ UInt16 index;
+ MemHandle hStr;
+ UInt8 *strTemp;
+ UInt8 oldState = sknStateDisabled;
+
+ if (skinDBP) {
+ index = DmFindResource (skinDBP, sknPosRsc, resID, NULL);
+
+ if (index != (UInt16)-1) {
+ hStr = DmGetResourceIndex(skinDBP, index);
+
+ if (hStr) {
+ strTemp = (UInt8 *)MemHandleLock(hStr);
+ oldState = strTemp[sknInfoState];
+ MemPtrUnlock(strTemp);
+ DmReleaseResource(hStr);
+ }
+ }
+ }
+
+ return oldState;
+}
+
+void SknShowObject(DmOpenRef skinDBP, DmResID resID) {
+ RectangleType r;
+ UInt8 state = SknGetState(skinDBP, resID);
+ SknGetObjectBounds(skinDBP, resID, &r);
+ SknCopyBits(skinDBP, resID + state, NULL, r.topLeft.x, r.topLeft.y);
+}
+
+void SknGetListBounds(RectangleType *rAreaP, RectangleType *rArea2xP) {
+ DmOpenRef skinDBP;
+ UInt16 strIndex;
+ MemHandle hStr;
+ UInt8 *strTemp;
+ UInt16 x,y,w,h;
+
+ skinDBP = DmOpenDatabase(gPrefs->skin.cardNo, gPrefs->skin.dbID, dmModeReadOnly);
+ if (skinDBP) {
+ strIndex = DmFindResource (skinDBP, sknPosRsc, skinList, NULL);
+
+ if (strIndex != 0xFFFF) { // if params exist
+ hStr = DmGetResourceIndex(skinDBP,strIndex);
+ if (hStr) {
+ strTemp = (UInt8 *)MemHandleLock(hStr);
+
+ x = strTemp[sknInfoPosX];
+ y = strTemp[sknInfoPosY];
+ w = strTemp[sknInfoListWidth];
+ h = strTemp[sknInfoListSize] * sknInfoListItemSize;
+
+ if (rAreaP)
+ RctSetRectangle(rAreaP ,x, y, w, h);
+ if (rArea2xP)
+ RctSetRectangle(rArea2xP, x+x, y+y, w+w, h+h);
+
+ MemHandleUnlock(hStr);
+ DmReleaseResource(hStr);
+ }
+ }
+
+ DmCloseDatabase(skinDBP);
+ }
+}
+
+static void SknRedrawTools(DmOpenRef skinDBP) {
+ if (GamGetSelected() == dmMaxRecordIndex) {
+ if (SknGetState(skinDBP, skinButtonGameDelete) == sknStateNormal) {
+ SknSetState(skinDBP, skinButtonGameDelete,sknStateDisabled);
+ SknShowObject(skinDBP, skinButtonGameDelete);
+ }
+ if (SknGetState(skinDBP, skinButtonGameEdit) == sknStateNormal) {
+ SknSetState(skinDBP, skinButtonGameEdit,sknStateDisabled);
+ SknShowObject(skinDBP, skinButtonGameEdit);
+ }
+ if (SknGetState(skinDBP, skinButtonGameAudio) == sknStateNormal) {
+ SknSetState(skinDBP, skinButtonGameAudio,sknStateDisabled);
+ SknShowObject(skinDBP, skinButtonGameAudio);
+ }
+
+ } else {
+ if (SknGetState(skinDBP, skinButtonGameDelete) == sknStateDisabled) {
+ SknSetState(skinDBP, skinButtonGameDelete,sknStateNormal);
+ SknShowObject(skinDBP, skinButtonGameDelete);
+ }
+ if (SknGetState(skinDBP, skinButtonGameEdit) == sknStateDisabled) {
+ SknSetState(skinDBP, skinButtonGameEdit,sknStateNormal);
+ SknShowObject(skinDBP, skinButtonGameEdit);
+ }
+ if (SknGetState(skinDBP, skinButtonGameAudio) == sknStateDisabled) {
+ SknSetState(skinDBP, skinButtonGameAudio,sknStateNormal);
+ SknShowObject(skinDBP, skinButtonGameAudio);
+ }
+ }
+}
+
+static void SknRedrawSlider(DmOpenRef skinDBP, UInt16 index, UInt16 maxIndex, UInt16 perPage) {
+ if (maxIndex <= perPage) {
+ if (SknGetState(skinDBP,skinSliderUpArrow) != sknStateDisabled) {
+ SknSetState(skinDBP,skinSliderUpArrow,sknStateDisabled);
+ SknShowObject(skinDBP,skinSliderUpArrow);
+ }
+ if (SknGetState(skinDBP,skinSliderDownArrow) != sknStateDisabled) {
+ SknSetState(skinDBP,skinSliderDownArrow,sknStateDisabled);
+ SknShowObject(skinDBP,skinSliderDownArrow);
+ }
+
+ } else {
+ if (SknGetState(skinDBP,skinSliderUpArrow) == sknStateDisabled) {
+ SknSetState(skinDBP,skinSliderUpArrow,sknStateNormal);
+ SknShowObject(skinDBP,skinSliderUpArrow);
+ }
+ if (SknGetState(skinDBP,skinSliderDownArrow) == sknStateDisabled) {
+ SknSetState(skinDBP,skinSliderDownArrow,sknStateNormal);
+ SknShowObject(skinDBP,skinSliderDownArrow);
+ }
+ }
+}
+
+void SknUpdateList() {
+ MemHandle record;
+ Int32 index, maxIndex, maxView;
+ GameInfoType *game;
+ RectangleType rArea, rField, rCopy, rArea2x;
+ DmOpenRef skinDBP;
+
+ UInt8 txtColor, norColor, selColor, bkgColor;
+ UInt16 x,y;
+
+ SknScreenLock(winLockCopy);
+
+ SknGetListBounds(&rArea, &rArea2x);
+ skinDBP = SknOpenSkin();
+ // set default bg
+ WinSetForeColor(UIColorGetTableEntryIndex (UIFormFill));
+ WinDrawRectangle(&rArea,0);
+ // copy top bg
+ SknGetObjectBounds(skinDBP, skinBackgroundImageTop, &rField);
+ RctGetIntersection(&rArea2x, &rField, &rCopy);
+ x = rCopy.topLeft.x;
+ y = rCopy.topLeft.y;
+ rCopy.topLeft.x -= rField.topLeft.x;
+ rCopy.topLeft.y -= rField.topLeft.y;
+ SknCopyBits(skinDBP, skinBackgroundImageTop, &rCopy, x, y);
+ // copy bottom bg
+ SknGetObjectBounds(skinDBP, skinBackgroundImageBottom, &rField);
+ RctGetIntersection(&rArea2x, &rField, &rCopy);
+ x = rCopy.topLeft.x;
+ y = rCopy.topLeft.y;
+ rCopy.topLeft.x -= rField.topLeft.x;
+ rCopy.topLeft.y -= rField.topLeft.y;
+ SknCopyBits(skinDBP, skinBackgroundImageBottom, &rCopy, x, y);
+
+ FntSetFont(stdFont);
+
+ index = gPrefs->listPosition;
+ maxIndex = DmNumRecords(gameDB);
+ maxView = rArea.extent.y / sknInfoListItemSize;
+
+ if (index > 0 && (index + maxView) > maxIndex)
+ index -= (index + maxView) - maxIndex;
+
+ if (index < 0)
+ index = 0;
+
+ gPrefs->listPosition = index;
+
+ SknRedrawSlider(skinDBP, index, maxIndex, maxView);
+ SknRedrawTools(skinDBP);
+ SknGetListColors(skinDBP, &norColor, &selColor, &bkgColor);
+
+ SknCloseSkin(skinDBP);
+
+ while (index < (gPrefs->listPosition + maxView) && index < maxIndex) {
+ record = DmQueryRecord(gameDB, index);
+ game = (GameInfoType *)MemHandleLock(record);
+
+ // text box
+ RctSetRectangle(&rField, rArea.topLeft.x, (rArea.topLeft.y + sknInfoListItemSize * (index - gPrefs->listPosition)), rArea.extent.x, sknInfoListItemSize);
+ WinSetClip(&rField);
+
+ if (game->selected) {
+ WinSetDrawMode(winPaint);
+ WinSetForeColor(bkgColor);
+ WinDrawRectangle(&rField,0);
+ txtColor = selColor;
+ }
+ else
+ txtColor = norColor;
+
+ // clipping
+ rField.topLeft.x += 2;
+ rField.extent.x -= 4;
+ WinSetClip(&rField);
+ // draw text mask
+ WinSetTextColor(255);
+ WinSetDrawMode(winMask);
+ WinPaintChars(game->nameP, StrLen(game->nameP), rField.topLeft.x, rField.topLeft.y);
+ // draw text
+ if (txtColor) {
+ WinSetTextColor(txtColor);
+ WinSetDrawMode(winOverlay);
+ WinPaintChars(game->nameP, StrLen(game->nameP), rField.topLeft.x, rField.topLeft.y);
+ }
+
+ MemHandleUnlock(record);
+ index++;
+ }
+
+ RctSetRectangle(&rArea,0,0,160,160);
+ WinSetClip(&rArea);
+ SknScreenUnlock();
+}
+
+UInt16 SknCheckClick(DmOpenRef skinDBP, Coord mx, Coord my) {
+ UInt16 resID;
+ RectangleType r;
+
+ mx *= 2;
+ my *= 2;
+
+ if (skinDBP) {
+ for (resID = 1100; resID <= 7000; resID += 100) {
+ if (SknGetState(skinDBP, resID) != sknStateDisabled) {
+ SknGetObjectBounds(skinDBP, resID, &r);
+ if (RctPtInRectangle(mx, my, &r)) {
+ return resID;
+ }
+ }
+ }
+ }
+
+ return 0;
+}
+
+void SknSelect(Coord x, Coord y) {
+ RectangleType rArea;
+ SknGetListBounds(&rArea,0);
+
+ if (RctPtInRectangle(x, y, &rArea)) {
+ UInt16 index;
+ MemHandle record;
+ GameInfoType *game;
+ UInt16 oldIndex;
+
+ index = (y - rArea.topLeft.y) / sknInfoListItemSize + gPrefs->listPosition;
+
+ if (index == lastIndex)
+ return;
+
+ if (index < DmNumRecords(gameDB)) {
+ Boolean newValue;
+
+ oldIndex = GamGetSelected();
+
+ if (oldIndex != index && oldIndex != dmMaxRecordIndex)
+ GamUnselect();
+
+ record = DmGetRecord(gameDB, index);
+ game = (GameInfoType *)MemHandleLock(record);
+
+ newValue = !game->selected;
+ DmWrite(game, OffsetOf(GameInfoType,selected), &newValue, sizeof(Boolean));
+
+ MemHandleUnlock(record);
+ DmReleaseRecord (gameDB, index, 0);
+
+ lastIndex = index;
+ SknUpdateList();
+ }
+ }
+}
+
+Boolean SknProcessArrowAction(UInt16 button) {
+ Boolean handled = false;
+
+ switch (button) {
+ case skinSliderUpArrow:
+ if (gPrefs->listPosition > 0) {
+ gPrefs->listPosition--;
+ SknUpdateList();
+ }
+ handled = true;
+ break;
+
+ case skinSliderDownArrow:
+ RectangleType rArea;
+ UInt16 maxView;
+
+ SknGetListBounds(&rArea, 0);
+ maxView = rArea.extent.y / sknInfoListItemSize;
+
+ if (gPrefs->listPosition < DmNumRecords(gameDB)-maxView) {
+ gPrefs->listPosition++;
+ SknUpdateList();
+ }
+ handled = true;
+ break;
+ }
+
+ return handled;
+}
diff --git a/backends/platform/PalmOS/Src/launcher/skin.h b/backends/platform/PalmOS/Src/launcher/skin.h
new file mode 100644
index 0000000000..2047532fd8
--- /dev/null
+++ b/backends/platform/PalmOS/Src/launcher/skin.h
@@ -0,0 +1,130 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 __SKIN_H__
+#define __SKIN_H__
+
+// skin
+#define sknInfoState 0
+#define sknInfoPosX 1
+#define sknInfoPosY 2
+
+#define sknInfoMaxWOrH 3
+#define sknInfoDrawMode 4
+#define sknInfoKeepXOrY1 5
+#define sknInfoKeepXOrY2 7
+
+#define sknInfoListWidth sknInfoMaxWOrH
+#define sknInfoListHeight sknInfoDrawMode
+#define sknInfoListSize sknInfoListHeight
+#define sknInfoListItemSize 12
+
+#define sknPosRsc 'sPos'
+#define sknColorsRsc 'sCol'
+#define sknDepthRsc 'sDep'
+
+#define sknStateNormal 0
+#define sknStateSelected 10
+#define sknStateDisabled 20
+
+#define sknSelectedState(bmp) (bmp + sknStateSelected)
+#define sknDisabledState(bmp) (bmp + sknStateDisabled)
+
+// skin elements
+#define skinList 500
+#define skinColors 600
+#define skinDepth 700
+
+#define skinButtonNone 0
+
+#define skinSliderUpArrow 2000
+#define skinSliderDownArrow 2100
+
+#define skinButtonGameParams 3000
+#define skinButtonGameAdd 3100
+#define skinButtonGameEdit 3200
+#define skinButtonGameAudio 3300
+#define skinButtonGameDelete 4000
+#define skinButtonGameStart 7000
+
+#define skinBackgroundImageTop 1000
+#define skinBackgroundImageBottom 1010
+///
+
+
+#define skinToolsBackground 1100
+
+#define skinListUpArrowNormal 1500
+#define skinListUpArrowOver 1510
+#define skinListUpArrowDisabled 1540
+
+#define skinListDownArrowNormal 1800
+#define skinListDownArrowOver 1810
+#define skinListDownArrowDisabled 1840
+
+#define skinButtonGameInfoNormal 2000
+#define skinButtonGameInfoOver 2010
+#define skinButtonGameInfoDisabled 2040
+
+#define skinButtonGameParamNormal 3000
+#define skinButtonGameParamOver 3010
+
+#define skinButtonGameDeleteNormal 4000
+#define skinButtonGameDeleteOver 4010
+#define skinButtonGameDeleteDisabled 4040
+
+#define skinButtonVibratorNormal 5000
+#define skinButtonVibratorOver 5010
+#define skinButtonVibratorSelected 5020
+#define skinButtonVibratorSelectedOver 5030
+#define skinButtonVibratorDisabled 5040
+
+
+#define skinButtonSleepNormal 6000
+#define skinButtonSleepOver 6010
+#define skinButtonSleepSelected 6020
+#define skinButtonSleepSelectedOver 9030
+
+#define skinButtonPlayNormal 7000
+#define skinButtonPlayOver 7010
+#define skinButtonPlayDisabled 7040
+
+// protos
+void SknApplySkin();
+void SknGetObjectBounds(DmOpenRef skinDBP, DmResID resID, RectangleType *rP);
+DmOpenRef SknOpenSkin();
+void SknCloseSkin(DmOpenRef skinDBP);
+UInt8 SknSetState(DmOpenRef skinDBP, DmResID resID, UInt8 newState);
+void SknShowObject(DmOpenRef skinDBP, DmResID resID);
+UInt8 SknGetState(DmOpenRef skinDBP, DmResID resID);
+void SknUpdateList();
+void SknGetListBounds(RectangleType *rAreaP, RectangleType *rArea2xP);
+UInt16 SknCheckClick(DmOpenRef skinDBP, Coord mx, Coord my);
+void SknSelect(Coord x, Coord y);
+Boolean SknProcessArrowAction(UInt16 button);
+UInt8 SknGetDepth(DmOpenRef skinDBP);
+
+extern UInt16 lastIndex;
+
+#endif
diff --git a/backends/platform/PalmOS/Src/launcher/start.cpp b/backends/platform/PalmOS/Src/launcher/start.cpp
new file mode 100644
index 0000000000..076c24d6c2
--- /dev/null
+++ b/backends/platform/PalmOS/Src/launcher/start.cpp
@@ -0,0 +1,366 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 <PalmOS.h>
+#include <SonyClie.h>
+
+#include "palmdefs.h"
+#include "start.h"
+#include "games.h"
+#include "globals.h"
+#include "modules.h"
+#include "skin.h"
+
+#include "forms.h"
+
+/***********************************************************************
+ *
+ * Global variables
+ *
+ ***********************************************************************/
+GlobalsPreferencePtr gPrefs;
+GlobalsDataPtr gVars;
+
+Boolean bDirectMode = false;
+Boolean bStartScumm = false;
+Boolean bLaunched = false;
+
+/***********************************************************************
+ *
+ * Internal Constants
+ *
+ ***********************************************************************/
+
+// Define the minimum OS version we support (3.5 for now).
+#define kOurMinVersion sysMakeROMVersion(3,5,0,sysROMStageRelease,0)
+#define kPalmOS10Version sysMakeROMVersion(1,0,0,sysROMStageRelease,0)
+
+/***********************************************************************
+ *
+ * Internal Functions
+ *
+ ***********************************************************************/
+
+// Callback for ExgDBWrite to send data with Exchange Manager
+static Err WriteDBData(const void* dataP, UInt32* sizeP, void* userDataP) {
+ Err err;
+ *sizeP = ExgSend((ExgSocketPtr)userDataP, (void*)dataP, *sizeP, &err);
+ return err;
+}
+
+Err SendDatabase (UInt16 cardNo, LocalID dbID, Char *nameP, Char *descriptionP) {
+ ExgSocketType exgSocket;
+ Err err;
+
+ // Create exgSocket structure
+ MemSet(&exgSocket, sizeof(exgSocket), 0);
+ exgSocket.description = descriptionP;
+ exgSocket.name = nameP;
+
+ // Start an exchange put operation
+ err = ExgPut(&exgSocket);
+ if (!err) {
+ err = ExgDBWrite(WriteDBData, &exgSocket, NULL, dbID, cardNo);
+ err = ExgDisconnect(&exgSocket, err);
+ }
+
+ return err;
+}
+
+
+/***********************************************************************
+ *
+ * FUNCTION: RomVersionCompatible
+ *
+ * DESCRIPTION: This routine checks that a ROM version is meet your
+ * minimum requirement.
+ *
+ * PARAMETERS: requiredVersion - minimum rom version required
+ * (see sysFtrNumROMVersion in SystemMgr.h
+ * for format)
+ * launchFlags - flags that indicate if the application
+ * UI is initialized.
+ *
+ * RETURNED: error code or zero if rom is compatible
+ *
+ * REVISION HISTORY:
+ *
+ *
+ ***********************************************************************/
+static Err RomVersionCompatible(UInt32 requiredVersion, UInt16 launchFlags) {
+ UInt32 romVersion;
+
+ // See if we're on in minimum required version of the ROM or later.
+ FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion);
+ if (romVersion < requiredVersion) {
+ if ((launchFlags & (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) ==
+ (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) {
+
+ FrmAlert (RomIncompatibleAlert);
+
+ // Palm OS 1.0 will continuously relaunch this app unless we switch to
+ // another safe one.
+ if (romVersion <= kPalmOS10Version)
+ AppLaunchWithCommand(sysFileCDefaultApp, sysAppLaunchCmdNormalLaunch, NULL);
+
+ }
+ return sysErrRomIncompatible;
+ }
+
+ return errNone;
+}
+
+///////////////////////////////////////////////////////////////////////
+
+
+void SavePrefs() {
+ if (gPrefs) {
+ PrefSetAppPreferences(appFileCreator, appPrefID, appPrefVersionNum, gPrefs, sizeof (GlobalsPreferenceType), true);
+ MemPtrFree(gPrefs);
+ gPrefs = NULL;
+ }
+}
+
+/***********************************************************************
+ *
+ * FUNCTION: AppHandleEvent
+ *
+ * DESCRIPTION: This routine loads form resources and set the event
+ * handler for the form loaded.
+ *
+ * PARAMETERS: event - a pointer to an EventType structure
+ *
+ * RETURNED: true if the event has handle and should not be passed
+ * to a higher level handler.
+ *
+ * REVISION HISTORY:
+ *
+ *
+ ***********************************************************************/
+static Boolean AppHandleEvent(EventPtr eventP) {
+ UInt16 formId;
+ FormPtr frmP;
+
+ if (eventP->eType == frmLoadEvent) {
+ // Load the form resource.
+ formId = eventP->data.frmLoad.formID;
+ frmP = FrmInitForm(formId);
+ FrmSetActiveForm(frmP);
+
+ // Set the event handler for the form. The handler of the currently
+ // active form is called by FrmHandleEvent each time is receives an
+ // event.
+ switch (formId) {
+ case MainForm:
+ FrmSetEventHandler(frmP, MainFormHandleEvent);
+ break;
+
+ case SkinsForm:
+ FrmSetEventHandler(frmP, SkinsFormHandleEvent);
+ break;
+
+ case GameEditForm:
+ FrmSetEventHandler(frmP, EditGameFormHandleEvent);
+ break;
+
+ case MiscForm:
+ FrmSetEventHandler(frmP, MiscFormHandleEvent);
+ break;
+
+ case CardSlotForm:
+ FrmSetEventHandler(frmP, CardSlotFormHandleEvent);
+ break;
+
+ case MusicForm:
+ FrmSetEventHandler(frmP, MusicFormHandleEvent);
+ break;
+
+ case InfoForm:
+ FrmSetEventHandler(frmP, InfoFormHandleEvent);
+ break;
+
+ default:
+// ErrFatalDisplay("Invalid Form Load Event");
+ break;
+ }
+ return true;
+ }
+
+ return false;
+}
+
+/***********************************************************************
+ *
+ * FUNCTION: AppEventLoop
+ *
+ * DESCRIPTION: This routine is the event loop for the application.
+ *
+ * PARAMETERS: nothing
+ *
+ * RETURNED: nothing
+ *
+ * REVISION HISTORY:
+ *
+ *
+ ***********************************************************************/
+static void AppEventLoop(void) {
+ UInt16 error;
+ EventType event;
+
+ do {
+ EvtGetEvent(&event, evtNoWait);
+
+ if(bStartScumm)
+ bStartScumm = StartScummVM();
+
+ if (! SysHandleEvent(&event))
+ if (! MenuHandleEvent(0, &event, &error))
+ if (! AppHandleEvent(&event))
+ FrmDispatchEvent(&event);
+
+ } while (event.eType != appStopEvent);
+}
+
+/***********************************************************************
+ *
+ * FUNCTION: ScummVMPalmMain
+ *
+ * DESCRIPTION: This is the main entry point for the application.
+ *
+ * PARAMETERS: cmd - word value specifying the launch code.
+ * cmdPB - pointer to a structure that is associated with the launch code.
+ * launchFlags - word value providing extra information about the launch.
+ *
+ * RETURNED: Result of launch
+ *
+ * REVISION HISTORY:
+ *
+ *
+ ***********************************************************************/
+static void AppLaunchCmdNotify(UInt16 LaunchFlags, SysNotifyParamType * pData) {
+ switch (pData->notifyType) {
+ case sysNotifyVolumeMountedEvent:
+ pData->handled = true; // don't switch
+
+ if (gPrefs) { // gPrefs exists ? so we are in the palm selector
+ CardSlotFormUpdate(); // redraw card list if needed
+
+ if (gPrefs->card.volRefNum == vfsInvalidVolRef) {
+ VFSAnyMountParamType *notifyDetailsP = (VFSAnyMountParamType *)pData->notifyDetailsP;
+ gPrefs->card.volRefNum = notifyDetailsP->volRefNum;
+
+ if (FrmGetFormPtr(MainForm) == FrmGetActiveForm())
+ if (gPrefs->card.volRefNum != vfsInvalidVolRef) {
+ CardSlotCreateDirs();
+ FrmUpdateForm(MainForm, frmRedrawUpdateMSImport);
+ }
+ }
+ }
+ break;
+
+ case sysNotifyVolumeUnmountedEvent:
+ if (gPrefs) {
+ CardSlotFormUpdate();
+
+ if (gPrefs->card.volRefNum == (UInt16)pData->notifyDetailsP) {
+ gPrefs->card.volRefNum = vfsInvalidVolRef;
+
+ if (FrmGetFormPtr(MainForm) == FrmGetActiveForm())
+ FrmUpdateForm(MainForm, frmRedrawUpdateMS);
+ }
+ }
+ break;
+
+ case sysNotifyDisplayResizedEvent:
+ if (gVars)
+ if (FrmGetFormPtr(MainForm) == FrmGetActiveForm())
+ SknApplySkin();
+ break;
+
+ case sonySysNotifyMsaEnforceOpenEvent:
+ // what am i supposed to do here ???
+ break;
+ }
+}
+
+static UInt32 ScummVMPalmMain(UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) {
+ Err error;
+
+ error = RomVersionCompatible (kOurMinVersion, launchFlags);
+ if (error) return (error);
+
+ switch (cmd) {
+ case sysAppLaunchCmdNotify:
+ AppLaunchCmdNotify(launchFlags, (SysNotifyParamType *) cmdPBP);
+ break;
+
+ case sysAppLaunchCustomEngineDelete:
+#ifndef _DEBUG_ENGINE
+ ModDelete();
+#endif
+ break;
+
+ case sysAppLaunchCmdNormalLaunch:
+ error = AppStart();
+ if (error)
+ goto end;
+
+ if (!bDirectMode) {
+ FrmGotoForm(MainForm);
+ }else {
+ GamUnselect();
+ bStartScumm = true;
+ }
+
+ AppEventLoop();
+end:
+ AppStop();
+ break;
+
+ default:
+ break;
+
+ }
+ return error;
+}
+
+/***********************************************************************
+ *
+ * FUNCTION: PilotMain
+ *
+ * DESCRIPTION: This is the main entry point for the application.
+ *
+ * PARAMETERS: cmd - word value specifying the launch code.
+ * cmdPB - pointer to a structure that is associated with the launch code.
+ * launchFlags - word value providing extra information about the launch.
+ * RETURNED: Result of launch
+ *
+ * REVISION HISTORY:
+ *
+ *
+ ***********************************************************************/
+
+UInt32 PilotMain( UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) {
+ return ScummVMPalmMain(cmd, cmdPBP, launchFlags);
+}
diff --git a/backends/platform/PalmOS/Src/launcher/start.h b/backends/platform/PalmOS/Src/launcher/start.h
new file mode 100644
index 0000000000..a30414a54f
--- /dev/null
+++ b/backends/platform/PalmOS/Src/launcher/start.h
@@ -0,0 +1,97 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 __START_H__
+#define __START_H__
+
+typedef struct {
+ Char nameP[32];
+ UInt16 cardNo;
+ LocalID dbID;
+} SkinInfoType, *SkinInfoPtr;
+
+typedef struct {
+
+ //skin params
+ SkinInfoType skin; // card where is located the skin
+ Boolean soundClick;
+
+ Boolean vibrator;
+ Boolean autoOff;
+ Boolean setStack;
+ Boolean exitLauncher;
+ Boolean goLCD;
+ Boolean stylusClick;
+ Boolean arrowKeys;
+
+ UInt16 listPosition;
+ UInt16 autoSavePeriod;
+
+ struct {
+ UInt16 volRefNum;
+ UInt32 cacheSize;
+ Boolean useCache;
+ Boolean showLED;
+ Boolean moveDB;
+ Boolean deleteDB;
+ Boolean confirmMoveDB;
+ } card;
+
+ Boolean debug;
+ UInt16 debugLevel;
+ Boolean stdPalette;
+ Boolean demoMode;
+ Boolean copyProtection;
+ Boolean oldarm;// TODO : free slot...
+ Boolean altIntro;
+ Boolean autoSave;
+ Boolean advancedMode;
+
+ struct {
+ Boolean enable;
+ UInt8 mode;
+ } lightspeed;
+
+} GlobalsPreferenceType, *GlobalsPreferencePtr;
+
+extern GlobalsPreferencePtr gPrefs;
+
+extern Boolean bDirectMode;
+extern Boolean bStartScumm;
+extern Boolean bLaunched;
+
+#define appPrefID 0x00
+#define appVersionNum 0x01
+#define appPrefVersionNum 0x02
+
+#define STACK_DEFAULT 8192
+#define STACK_LARGER 16384
+#define STACK_GET 0
+
+Err AppStart(void);
+void AppStop(void);
+Boolean StartScummVM();
+void SavePrefs();
+Err SendDatabase (UInt16 cardNo, LocalID dbID, Char *nameP, Char *descriptionP);
+#endif
diff --git a/backends/platform/PalmOS/Src/missing/assert.h b/backends/platform/PalmOS/Src/missing/assert.h
new file mode 100644
index 0000000000..7bc571ec15
--- /dev/null
+++ b/backends/platform/PalmOS/Src/missing/assert.h
@@ -0,0 +1,34 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 __ASSERT_H__
+#define __ASSERT_H__
+
+#ifdef _DEBUG
+#define assert(a) ErrFatalDisplayIf(!(a), "Assertion failed: " #a)
+#else
+#define assert(a) (void)0
+#endif
+
+#endif
diff --git a/backends/platform/PalmOS/Src/missing/ext_stdio.c b/backends/platform/PalmOS/Src/missing/ext_stdio.c
new file mode 100644
index 0000000000..f7d37a9140
--- /dev/null
+++ b/backends/platform/PalmOS/Src/missing/ext_stdio.c
@@ -0,0 +1,650 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 <stdio.h>
+#include <stdlib.h>
+#include <PmPalmOSNVFS.h>
+
+#define CACHE_SIZE 1024
+enum {
+ MODE_BUFREAD = 1,
+ MODE_BUFWRITE,
+ MODE_BUFNONE
+};
+
+FILE gStdioOutput = {0,0,0,0,0,0};
+static void dummy(Boolean) {};
+
+static LedProc gStdioLedProc = dummy;
+static UInt16 gStdioVolRefNum = vfsInvalidVolRef;
+static UInt32 gCacheSize = CACHE_SIZE;
+
+// TODO : implement "errno"
+
+void StdioInit(UInt16 volRefNum, const Char *output) { // DONE
+ gStdioVolRefNum = volRefNum;
+ gStdioOutput.mode = MODE_BUFWRITE;
+
+ VFSFileDelete(gStdioVolRefNum, output);
+ VFSFileCreate(gStdioVolRefNum, output);
+ VFSFileOpen (gStdioVolRefNum, output,vfsModeWrite, &gStdioOutput.fileRef);
+}
+
+void StdioSetLedProc(LedProc ledProc) { // DONE
+ if (ledProc)
+ gStdioLedProc = ledProc;
+ else
+ gStdioLedProc = dummy;
+}
+
+void StdioSetCacheSize(UInt32 s) { // DONE
+ gCacheSize = s;
+}
+
+void StdioRelease() { // DONE
+ // there is no cache on stdout/stderr
+ VFSFileClose(gStdioOutput.fileRef);
+}
+
+UInt16 fclose(FILE *stream) { // DONE
+ UInt32 numBytesWritten;
+ Err e;
+
+ if (stream->cacheSize) {
+ if (stream->bufSize > 0 && stream->mode == MODE_BUFWRITE)
+ VFSFileWrite(stream->fileRef, stream->bufSize, stream->cache, &numBytesWritten);
+
+ MemPtrFree(stream->cache);
+ }
+
+ e = VFSFileClose(stream->fileRef);
+ e = MemPtrFree(stream);
+
+ return e;
+}
+
+UInt16 feof(FILE *stream) { // DONE
+ Err e;
+
+ if (stream->cacheSize) {
+ switch (stream->mode) {
+ case MODE_BUFWRITE:
+ return 0; // never set in this mode
+ case MODE_BUFREAD:
+ if (stream->bufSize > 0)
+ return 0;
+ break;
+ }
+ }
+
+ e = VFSFileEOF(stream->fileRef);
+ return e;
+}
+
+UInt16 ferror(FILE *stream) {
+ return (stream->err);
+}
+
+Int16 fgetc(FILE *stream) {
+ UInt32 numBytesRead;
+ Char c;
+
+ numBytesRead = fread(&c, 1, 1, stream);
+ return (int)(numBytesRead == 1 ? c : EOF);
+}
+
+Char *fgets(Char *s, UInt32 n, FILE *stream) {
+ UInt32 numBytesRead;
+
+ numBytesRead = fread(s, n, 1, stream);
+ if (numBytesRead) {
+ UInt32 reset = 0;
+ Char *endLine = StrChr(s, '\n');
+
+ if (endLine >= s) {
+ reset = (endLine - s);
+ s[reset] = 0;
+ reset = numBytesRead - (reset + 1);
+ fseek(stream, -reset, SEEK_CUR);
+ }
+
+ return s;
+ }
+
+ return NULL;
+}
+
+FILE *fopen(const Char *filename, const Char *type) { // DONE
+ Err err;
+ UInt16 openMode;
+ Boolean cache = true;
+ FILE *fileP = (FILE *)MemPtrNew(sizeof(FILE));
+
+ if (!fileP)
+ return NULL;
+
+ MemSet(fileP, sizeof(FILE), 0);
+
+ if (StrCompare(type,"r")==0 || StrCompare(type,"rb")==0) {
+ fileP->mode = MODE_BUFREAD;
+ openMode = vfsModeRead;
+
+ } else if (StrCompare(type,"w")==0 || StrCompare(type,"wb")==0) {
+ fileP->mode = MODE_BUFWRITE;
+ openMode = vfsModeCreate|vfsModeWrite;
+
+ } else {
+ cache = false;
+ fileP->mode = MODE_BUFNONE;
+ openMode = vfsModeReadWrite;
+ }
+
+ if (cache) {
+ fileP->cacheSize = gCacheSize;
+ if (gCacheSize) fileP->cache = (UInt8 *)malloc(gCacheSize); // was MemGluePtrNew
+ if (!fileP->cache) fileP->cacheSize = 0;
+ }
+
+ if (openMode & vfsModeRead) {
+ // if read file :
+ // first try to load from the specfied card
+ err = VFSFileOpen (gStdioVolRefNum, filename, openMode, &fileP->fileRef);
+ //if err (not found ?) parse each avalaible card for the specified file
+ if (err) {
+ UInt16 volRefNum;
+ UInt32 volIterator = vfsIteratorStart|vfsIncludePrivateVolumes;
+ while (volIterator != vfsIteratorStop) {
+ err = VFSVolumeEnumerate(&volRefNum, &volIterator);
+
+ if (!err) {
+ err = VFSFileOpen (volRefNum, filename, openMode, &fileP->fileRef);
+ if (!err)
+ return fileP;
+ }
+ }
+ } else {
+ return fileP;
+ }
+ } else {
+ // if write file :
+ // use only the specified card
+ err = VFSFileDelete(gStdioVolRefNum, filename); // delete it if exists
+ err = VFSFileCreate(gStdioVolRefNum, filename);
+ openMode = vfsModeWrite;
+ if (!err) {
+ err = VFSFileOpen (gStdioVolRefNum, filename, openMode, &fileP->fileRef);
+ if (!err)
+ return fileP;
+ }
+ }
+
+ if (fileP->cacheSize)
+ MemPtrFree(fileP->cache);
+
+ MemPtrFree(fileP); // prevent memory leak
+ return NULL;
+}
+
+UInt32 fread(void *ptr, UInt32 size, UInt32 nitems, FILE *stream) { // DONE
+ Err e = errNone;
+ UInt32 numBytesRead, rsize = (size * nitems);
+
+ // try to read on a write only stream ?
+ if (stream->mode == MODE_BUFWRITE || !rsize)
+ return 0;
+
+ // cached ?
+ if (stream->cacheSize) {
+ // empty buffer ? fill it if required
+ if (stream->bufSize == 0 && rsize < stream->cacheSize) {
+ gStdioLedProc(true);
+ e = VFSFileRead(stream->fileRef, stream->cacheSize, stream->cache, &numBytesRead);
+ gStdioLedProc(false);
+ stream->bufSize = numBytesRead;
+ stream->bufPos = 0;
+ }
+
+ // we have the data in the cache
+ if (stream->bufSize >= rsize) {
+ MemMove(ptr, (stream->cache + stream->bufPos), rsize);
+ stream->bufPos += rsize;
+ stream->bufSize -= rsize;
+ numBytesRead = rsize;
+
+ // not enough but something ?
+ } else if (stream->bufSize > 0) {
+ UInt8 *next = (UInt8 *)ptr;
+ MemMove(ptr, (stream->cache + stream->bufPos), stream->bufSize);
+ rsize -= stream->bufSize;
+ gStdioLedProc(true);
+ e = VFSFileRead(stream->fileRef, rsize, (next + stream->bufSize), &numBytesRead);
+ gStdioLedProc(false);
+ numBytesRead += stream->bufSize;
+ stream->bufSize = 0;
+ stream->bufPos = 0;
+
+ // nothing in the cache ?
+ } else {
+ gStdioLedProc(true);
+ e = VFSFileRead(stream->fileRef, rsize, ptr, &numBytesRead);
+ gStdioLedProc(false);
+ }
+
+ // no ? direct read
+ } else {
+ gStdioLedProc(true);
+ e = VFSFileRead(stream->fileRef, rsize, ptr, &numBytesRead);
+ gStdioLedProc(false);
+ }
+
+ if (e == errNone || e == vfsErrFileEOF)
+ return (UInt32)(numBytesRead / size);
+
+ return 0;
+}
+
+UInt32 fwrite(const void *ptr, UInt32 size, UInt32 nitems, FILE *stream) { // DONE
+ Err e = errNone;
+ UInt32 numBytesWritten = (size * nitems);
+
+ // try to write on a read only stream ?
+ if (stream->mode == MODE_BUFREAD || !numBytesWritten)
+ return 0;
+
+ // cached ?
+ if (stream->cacheSize) {
+ // can cache it ?
+ if ((stream->bufSize + numBytesWritten) <= stream->cacheSize) {
+ MemMove((stream->cache + stream->bufSize), ptr, numBytesWritten);
+ stream->bufSize += numBytesWritten;
+
+ // not enough room ? write cached data and new data
+ } else {
+ gStdioLedProc(true);
+ e = VFSFileWrite(stream->fileRef, stream->bufSize, stream->cache, &numBytesWritten);
+ e = VFSFileWrite(stream->fileRef, (size * nitems), ptr, &numBytesWritten);
+ gStdioLedProc(false);
+ stream->bufSize = 0;
+ }
+
+ // no ? direct write
+ } else {
+ gStdioLedProc(true);
+ e = VFSFileWrite(stream->fileRef, (size * nitems), ptr, &numBytesWritten);
+ gStdioLedProc(false);
+ }
+
+ if ((e == errNone || e == vfsErrFileEOF)) {
+ return (UInt32)(numBytesWritten / size);
+ }
+
+ return 0;
+}
+
+Int16 fseek(FILE *stream, Int32 offset, Int32 whence) { // DONE
+ UInt32 numBytesWritten;
+ Err e;
+
+ if (stream->cacheSize) {
+ switch (stream->mode) {
+ case MODE_BUFWRITE:
+ e = VFSFileWrite(stream->fileRef, stream->bufSize, stream->cache, &numBytesWritten);
+ stream->bufSize = 0;
+ break;
+
+ case MODE_BUFREAD:
+ // reposition file postion if needed
+ if (whence == SEEK_CUR)
+ e = VFSFileSeek(stream->fileRef, vfsOriginCurrent, -stream->bufSize);
+ stream->bufSize = 0;
+ stream->bufPos = 0;
+ break;
+ }
+ }
+
+ e = VFSFileSeek(stream->fileRef, whence, offset);
+ return (e ? -1 : 0);
+}
+
+Int32 ftell(FILE *stream) { // DONE
+ Err e;
+ UInt32 filePos;
+
+ e = VFSFileTell(stream->fileRef ,&filePos);
+
+ if (stream->cacheSize) {
+ switch (stream->mode) {
+ case MODE_BUFWRITE:
+ filePos += stream->bufSize;
+ break;
+
+ case MODE_BUFREAD:
+ filePos -= stream->bufSize;
+ break;
+ }
+ }
+
+ if (e) return -1; // errno = ?
+ return filePos;
+}
+
+Int32 fprintf(FILE *stream, const Char *formatStr, ...) { // DONE
+ UInt32 numBytesWritten;
+ Char buf[256];
+ va_list va;
+
+ if (!stream->fileRef)
+ return 0;
+
+ va_start(va, formatStr);
+ vsprintf(buf, formatStr, va);
+ va_end(va);
+
+ numBytesWritten = fwrite(buf, StrLen(buf), 1, stream);
+ return numBytesWritten;
+}
+
+Int32 printf(const Char *format, ...) { // DONE
+ UInt32 numBytesWritten;
+ Char buf[256];
+ va_list va;
+
+ if (!stdout->fileRef)
+ return 0;
+
+ va_start(va, format);
+ vsprintf(buf, format, va);
+ va_end(va);
+
+ numBytesWritten = fwrite(buf, StrLen(buf), 1, stdout);
+ return numBytesWritten;
+}
+
+/* needed with 68k mode only, already defined in ARM MSL */
+#ifdef PALMOS_68K
+
+Int32 sprintf(Char* s, const Char* formatStr, ...) {
+ Int16 count;
+ va_list va;
+
+ va_start(va, formatStr);
+ count = vsprintf(s, formatStr, va);
+ va_end(va);
+
+ return count;
+}
+
+Int32 snprintf(Char* s, UInt32 len, const Char* formatStr, ...) {
+ // len is ignored
+ Int16 count;
+ va_list va;
+
+ va_start(va, formatStr);
+ count = vsprintf(s, formatStr, va);
+ va_end(va);
+
+ return count;
+}
+
+
+/* WARNING : vsprintf
+ * -------
+ * This function can handle only %[+- ][.0][field length][sxXdoiucp] format strings
+ * compiler option : 4byte int mode only !
+ *
+ * TODO : check http://www.ijs.si/software/snprintf/ for a portable implementation of vsnprintf
+ * This one make use of sprintf so need to check if it works with PalmOS.
+ */
+
+static Char *StrIToBase(Char *s, Int32 i, UInt8 b) {
+ const Char *conv = "0123456789ABCDEF";
+ Char o;
+ Int16 c, n = 0;
+ Int32 div, mod;
+
+ do {
+ div = i / b;
+ mod = i % b;
+
+ s[n++] = *(conv + mod);
+ i = div;
+
+ } while (i >= b);
+
+ if (i > 0) {
+ s[n + 0] = *(conv + i);
+ s[n + 1] = 0;
+ } else {
+ s[n + 0] = 0;
+ n--;
+ }
+
+ for (c=0; c <= (n >> 1); c++) {
+ o = s[c];
+ s[c] = s[n - c];
+ s[n - c]= o;
+ }
+
+ return s;
+}
+
+static void StrProcC_(Char *ioStr, UInt16 maxLen) {
+ Char *found;
+ Int16 length;
+
+ while (found = StrStr(ioStr, "`c`")) {
+ if (found[3] == 0) { // if next char is NULL
+ length = maxLen - (found - ioStr + 2);
+ MemMove(found, found + 4, length);
+ maxLen -= 2;
+ }
+ }
+}
+
+static void StrProcXO(Char *ioStr, UInt16 maxLen, Char *tmp) {
+ Char *found, *last, mod, fill;
+ Int16 len, count, next;
+ Int32 val;
+
+ while (found = StrChr(ioStr, '`')) {
+ last = StrChr(found + 1, '`');
+
+ if (!last)
+ return;
+
+ *last = 0;
+ next = 0;
+ fill = *(found + 1);
+ mod = *(found + 2);
+ count = StrAToI(found + 3);
+
+ len = maxLen - (last - ioStr);
+ MemMove(found, (last + 1), len);
+
+ // x and X always 8char on palmos ... o set to 8char (not supported on palmos)
+ while ((found[next] == '0' || found[next] == ' ') && next < 8) // WARNING : reduce size only (TODO ?)
+ next++;
+
+ // convert to base 8
+ if (mod == 'o') {
+ StrNCopy(tmp, found + next, 8 - next);
+ tmp[8 - next] = 0;
+ val = StrAToI(tmp);
+ StrIToBase(tmp, val, 8); // now we have the same but in octal
+ next = 8 - StrLen(tmp);
+ MemMove(found + next, tmp, StrLen(tmp));
+ } else {
+ // if val is 0, keep last 0
+ if (next == 8)
+ next = 7;
+ }
+
+ if ((8 - next) > count)
+ count = 8 - next;
+
+ if (count == 0)
+ count = 1;
+
+ len = maxLen - (found - ioStr) - (8 - count);
+ MemSet(found, next, fill);
+ MemMove(found, found + (8 - count), len);
+
+ // ... and upper case
+ if (mod == 'x') {
+ while (count--) {
+ if (*found >='A' && *found <='F')
+ *found = (*found + 32);
+ found++;
+ }
+ }
+ }
+}
+
+Int32 vsprintf(Char* s, const Char* formatStr, _Palm_va_list argParam) {
+ Char format[256], result[256], tmp[32];
+
+ Char *found, *mod, *num;
+ UInt32 next;
+ Boolean zero;
+ Int16 count, len;
+
+ MemSet(format, sizeof(format), 'x');
+ MemSet(result, sizeof(result), 'y');
+ MemSet(tmp, sizeof(tmp), 'z');
+
+ StrCopy(format,formatStr); // copy actual formatStr to temp buffer
+ next = 0; // start of the string
+
+ while (found = StrChr(format + next, '%')) {
+ mod = found + 1;
+
+ if (*mod == '%') { // just a % ?
+ mod++;
+
+ } else {
+ if (*mod == '+' ||
+ *mod == '-' ||
+ *mod == ' ' ) // skip
+ mod++;
+
+ if (*mod == '0' ||
+ *mod == '.' ) {
+ *mod++ = '0';
+ zero = true;
+ } else {
+ zero = false;
+ }
+
+ num = mod;
+ while ( *mod >= '0' &&
+ *mod <= '9' ) // search format char
+ mod++;
+
+ // get the numeric value
+ if (num < mod) {
+ StrNCopy(tmp, num, mod - num);
+ tmp[mod - num] = 0;
+ count = StrAToI(tmp);
+ } else {
+ count = 0;
+ }
+
+ if (*mod == 'l') // already set to %...l(x) ?
+ mod++;
+
+ // prepare new format
+//#if !defined(PALMOS_ARM)
+ if (*mod == 'c') {
+ StrCopy(tmp, "`c`%c%c");
+
+ } else
+//#endif
+ if (*mod == 'p') {
+ StrCopy(tmp, "%08lX"); // %x = %08X in palmos
+
+ } else {
+ len = 0;
+
+ switch (*mod) {
+ case 'x':
+ case 'X':
+ case 'o':
+ tmp[0] = '`';
+ tmp[1] = (zero) ? '0' : ' ';
+ tmp[2] = *mod;
+ StrIToA(tmp + 3, count);
+ len += StrLen(tmp);
+ tmp[len++] = '`';
+ tmp[len] = 0;
+
+ if (*mod == 'o') { // set as base 10 num and convert later
+ *mod = 'd';
+ count = 8; // force 8char
+ }
+
+ break;
+ }
+
+ StrNCopy(tmp + len, found, (num - found));
+ len += (num - found);
+
+ if (count) {
+ StrIToA(tmp + len, count);
+ len += StrLen(tmp + len);
+ }
+
+ if (*mod == 'd' ||
+ *mod == 'i' ||
+ *mod == 'x' ||
+ *mod == 'X' ||
+ *mod == 'u'
+ ) {
+ tmp[len++] = 'l';
+ }
+
+ tmp[len + 0] = *mod;
+ tmp[len + 1] = 0;
+ }
+
+ mod++;
+ MemMove(found + StrLen(tmp), mod, StrLen(mod) + 1);
+ StrNCopy(found, tmp, StrLen(tmp));
+ mod = found + StrLen(tmp);
+ }
+
+ next = (mod - format);
+ }
+
+ // Copy result in a temp buffer to process last formats
+ StrVPrintF(result, format, argParam);
+//#if !defined(PALMOS_ARM)
+ StrProcC_(result, 256);
+//#endif
+ StrProcXO(result, 256, tmp);
+ StrCopy(s, result);
+
+ return StrLen(s);
+}
+
+#endif
diff --git a/backends/platform/PalmOS/Src/missing/ext_stdlib.c b/backends/platform/PalmOS/Src/missing/ext_stdlib.c
new file mode 100644
index 0000000000..8c8fbd50bd
--- /dev/null
+++ b/backends/platform/PalmOS/Src/missing/ext_stdlib.c
@@ -0,0 +1,117 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 <stdlib.h>
+
+#define memNewChunkFlagAllowLarge 0x1000
+SysAppInfoPtr SysGetAppInfo(SysAppInfoPtr *uiAppPP, SysAppInfoPtr *actionCodeAppPP) SYS_TRAP(sysTrapSysGetAppInfo);
+
+#ifdef PALMOS68K
+long strtol(const char *s, char **endptr, int base) {
+ // WARNING : only base = 10 supported
+ long val = StrAToI(s);
+
+ if (endptr) {
+ Char str[maxStrIToALen];
+ StrIToA(str, val);
+
+ if (StrNCompare(s, str, StrLen(str)) == 0)
+ *endptr = (char *)s + StrLen(str);
+ }
+
+ return val;
+}
+#endif
+
+MemPtr __malloc(UInt32 size) {
+ MemPtr newP = NULL;
+
+ if (size <= 65000) {
+ newP = MemPtrNew(size);
+ } else {
+ SysAppInfoPtr appInfoP;
+ UInt16 ownerID;
+ UInt16 attr;
+
+ ownerID = ((SysAppInfoPtr)SysGetAppInfo(&appInfoP, &appInfoP))->memOwnerID;
+ attr = ownerID|memNewChunkFlagAllowLarge|memNewChunkFlagNonMovable;
+
+ newP = MemChunkNew(0, size, attr);
+ }
+
+ return newP;
+}
+
+MemPtr calloc(UInt32 nelem, UInt32 elsize) {
+ MemPtr newP;
+ UInt32 size = (nelem * elsize);
+
+ newP = malloc(size); // was MemGluePtrNew
+
+ if (newP)
+ MemSet(newP,size,0);
+
+ return newP;
+}
+
+Err free(MemPtr memP) {
+ if (memP)
+ return MemPtrFree(memP);
+ return memErrInvalidParam;
+}
+
+MemPtr realloc(MemPtr oldP, UInt32 size) {
+ MemPtr newP;
+
+ if (oldP != NULL)
+ if (MemPtrResize(oldP, size) == 0)
+ return oldP;
+
+ newP = malloc(size); // was MemPtrNew
+
+ if (oldP!=NULL) {
+ MemMove(newP,oldP,MemPtrSize(oldP));
+ MemPtrFree(oldP);
+ }
+
+ return newP;
+}
+
+ErrJumpBuf stdlib_errJumpBuf;
+#define ERR_MAGIC 0xDADA
+
+void exit(Int16 status) {
+ EventType event;
+ event.eType = keyDownEvent;
+
+ event.data.keyDown.chr = vchrLaunch;
+ event.data.keyDown.modifiers = commandKeyMask;
+#ifdef PALMOS_ARM
+ SysEventAddUniqueToQueue(&event, 0, true);
+#else
+ EvtAddUniqueEventToQueue(&event, 0, true);
+#endif
+
+ ErrLongJump(stdlib_errJumpBuf, status == 0 ? 0xDADA : status);
+}
diff --git a/backends/platform/PalmOS/Src/missing/ext_string.c b/backends/platform/PalmOS/Src/missing/ext_string.c
new file mode 100644
index 0000000000..319017f790
--- /dev/null
+++ b/backends/platform/PalmOS/Src/missing/ext_string.c
@@ -0,0 +1,45 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 <string.h>
+
+#ifdef PALMOS_68K
+void *memchr(const void *s, int c, UInt32 n) {
+ UInt32 chr;
+ for(chr = 0; chr < n;chr++,((UInt8 *)s)++)
+ if ( *((UInt8 *)s) == c)
+ return (void *)s;
+
+ return NULL;
+}
+
+Char *strdup(const Char *s1) {
+ Char* buf = (Char *)MemPtrNew(StrLen(s1)+1);
+
+ if(buf)
+ StrCopy(buf, s1);
+
+ return buf;
+}
+#endif
diff --git a/backends/platform/PalmOS/Src/missing/ext_time.c b/backends/platform/PalmOS/Src/missing/ext_time.c
new file mode 100644
index 0000000000..5de64062b0
--- /dev/null
+++ b/backends/platform/PalmOS/Src/missing/ext_time.c
@@ -0,0 +1,85 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 <time.h>
+
+time_t time(time_t *tloc) {
+ // get ROM version
+ UInt32 romVersion;
+ Err e = FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion);
+
+ // since 1/1/1904 12AM.
+ UInt32 secs = TimGetSeconds();
+
+ // form 1/1/1904 12AM to 1/1/1970 12AM
+ DateTimeType Epoch = {0, 0, 0, 1, 1, 1970, 0};
+
+ secs -= TimDateTimeToSeconds(&Epoch);
+
+ // DST really supported from OS v4.0
+ if (romVersion >= sysMakeROMVersion(4,0,0,sysROMStageRelease,0))
+ secs -= (PrefGetPreference(prefTimeZone) + PrefGetPreference(prefDaylightSavingAdjustment)) * 60;
+ else
+ secs -= (PrefGetPreference(prefMinutesWestOfGMT) - 720) * 60;
+
+ if (tloc)
+ *tloc = secs;
+
+ return (secs);
+}
+
+
+struct tm *localtime(const time_t *timer) {
+ static struct tm tmDate;
+ DateTimeType dt;
+ UInt32 secs = *timer;
+
+ // get ROM version
+ UInt32 romVersion;
+ Err e = FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion);
+
+ // form 1/1/1904 12AM to 1/1/1970 12AM
+ DateTimeType Epoch = {0, 0, 0, 1, 1, 1970, 0};
+
+ // timer supposed to be based on Epoch
+ secs += TimDateTimeToSeconds(&Epoch);
+
+ // DST really supported from OS v4.0
+ if (romVersion >= sysMakeROMVersion(4,0,0,sysROMStageRelease,0))
+ secs += (PrefGetPreference(prefTimeZone) + PrefGetPreference(prefDaylightSavingAdjustment)) * 60;
+ else
+ secs += (PrefGetPreference(prefMinutesWestOfGMT) - 720) * 60; // no sure about this one
+
+ TimSecondsToDateTime (secs, &dt);
+
+ tmDate.tm_sec = dt.second;
+ tmDate.tm_min = dt.minute;
+ tmDate.tm_hour = dt.hour;
+ tmDate.tm_mday = dt.day;
+ tmDate.tm_mon = dt.month - 1;
+ tmDate.tm_year = dt.year - 1900;
+ tmDate.tm_wday = dt.weekDay;
+
+ return &tmDate;
+}
diff --git a/backends/platform/PalmOS/Src/missing/ext_unistd.c b/backends/platform/PalmOS/Src/missing/ext_unistd.c
new file mode 100644
index 0000000000..91f2e8e3e5
--- /dev/null
+++ b/backends/platform/PalmOS/Src/missing/ext_unistd.c
@@ -0,0 +1,41 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 <unistd.h>
+
+const Char *gUnistdCWD = NULL;
+
+// currently used only to retreive savepath
+Char *getcwd(Char *buf, UInt32 size) {
+ Char *copy = buf;
+
+ if (gUnistdCWD) {
+ if (!copy)
+ copy = (Char *)MemPtrNew(StrLen(gUnistdCWD)); // this may never occured
+
+ StrCopy(copy, gUnistdCWD);
+ }
+
+ return copy;
+} \ No newline at end of file
diff --git a/backends/platform/PalmOS/Src/missing/fcntl.h b/backends/platform/PalmOS/Src/missing/fcntl.h
new file mode 100644
index 0000000000..59daa2ae05
--- /dev/null
+++ b/backends/platform/PalmOS/Src/missing/fcntl.h
@@ -0,0 +1,42 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 FCNTL_H
+#define FCNTL_H
+
+#define O_TEXT 0x0 /* 960827: Added this for Visual C++ compatibility. */
+#define O_RDWR 0x1 /* open the file in read/write mode */ /*- mm 980420 -*/
+#define O_RDONLY 0x2 /* open the file in read only mode */ /*- mm 980420 -*/
+#define O_WRONLY 0x4 /* open the file in write only mode */ /*- mm 980420 -*/
+#define O_APPEND 0x0100 /* open the file in append mode */
+#define O_CREAT 0x0200 /* create the file if it doesn't exist */
+#define O_EXCL 0x0400 /* if the file already exists don't create it again */
+#define O_TRUNC 0x0800 /* truncate the file after opening it */
+#define O_NRESOLVE 0x1000 /* Don't resolve any aliases */
+#define O_ALIAS 0x2000 /* Open alias file (if the file is an alias) */
+#define O_RSRC 0x4000 /* Open the resource fork */
+#define O_BINARY 0x8000 /* open the file in binary mode (default is text mode) */
+#define F_DUPFD 0x0 /* return a duplicate file descriptor */
+
+#endif
diff --git a/backends/platform/PalmOS/Src/missing/math.h b/backends/platform/PalmOS/Src/missing/math.h
new file mode 100644
index 0000000000..eca2d9de08
--- /dev/null
+++ b/backends/platform/PalmOS/Src/missing/math.h
@@ -0,0 +1,38 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 __MATH_H__
+#define __MATH_H__
+
+#ifndef PALMOS_ARM
+# include "mathlib.h"
+#else
+# include "matharm.h"
+#endif
+
+#ifndef M_PI
+# define M_PI 3.14159265358979323846
+#endif
+
+#endif
diff --git a/backends/platform/PalmOS/Src/missing/memory.h b/backends/platform/PalmOS/Src/missing/memory.h
new file mode 100644
index 0000000000..f57990b19d
--- /dev/null
+++ b/backends/platform/PalmOS/Src/missing/memory.h
@@ -0,0 +1,25 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 "string.h" \ No newline at end of file
diff --git a/backends/platform/PalmOS/Src/missing/stdio.h b/backends/platform/PalmOS/Src/missing/stdio.h
new file mode 100644
index 0000000000..490da720a5
--- /dev/null
+++ b/backends/platform/PalmOS/Src/missing/stdio.h
@@ -0,0 +1,103 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 __STDIO_H__
+#define __STDIO_H__
+
+#include "palmversion.h"
+#include <stdarg.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef void (*LedProc)(Boolean show);
+typedef UInt32 size_t;
+
+typedef struct {
+ FileRef fileRef;
+ UInt32 cacheSize, bufSize, bufPos;
+ UInt8 *cache;
+ UInt16 mode, err;
+} FILE;
+
+#undef stdin
+#undef stdout
+#undef stderr
+
+#define stdin 0
+#define stdout (&gStdioOutput)
+#define stderr (&gStdioOutput)
+
+#undef SEEK_SET
+#undef SEEK_CUR
+#undef SEEK_END
+
+#define SEEK_SET vfsOriginBeginning
+#define SEEK_CUR vfsOriginCurrent
+#define SEEK_END vfsOriginEnd
+
+extern FILE gStdioOutput;
+
+void StdioInit (UInt16 volRefNum, const Char *output);
+void StdioSetLedProc (LedProc ledProc);
+void StdioSetCacheSize (UInt32 s);
+void StdioRelease ();
+
+/* missing functions in 68k MSL (some are defined in ARM) */
+#define clearerr(a)
+#define fflush(a)
+#define getc(a) fgetc(a)
+#define vsnprintf(a,b,c,d) vsprintf(a,c,d)
+
+UInt16 fclose (FILE *stream);
+UInt16 feof (FILE *stream);
+UInt16 ferror (FILE *stream);
+Char *fgets (Char *s, UInt32 n, FILE *stream);
+Int16 fgetc (FILE *stream);
+FILE *fopen (const Char *filename, const Char *type);
+UInt32 fread (void *ptr, UInt32 size, UInt32 nitems, FILE *stream);
+UInt32 fwrite (const void *ptr, UInt32 size, UInt32 nitems, FILE *stream);
+Int16 fseek (FILE *stream, Int32 offset, Int32 whence);
+Int32 ftell (FILE *stream);
+
+Int32 fprintf (FILE *stream, const Char *formatStr, ...);
+Int32 printf (const Char* formatStr, ...);
+Int32 sprintf (Char* s, const Char* formatStr, ...);
+Int32 snprintf (Char* s, UInt32 len, const Char* formatStr, ...);
+Int32 vsprintf (Char* s, const Char* formatStr, _Palm_va_list argParam);
+
+/* ARM MSL only */
+#ifdef PALMOS_ARM
+#undef vsnprintf
+
+int vsnprintf (char *str, size_t size, const char *format, va_list ap);
+int sscanf ( char * buffer, const char * format, ...);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/backends/platform/PalmOS/Src/missing/stdlib.h b/backends/platform/PalmOS/Src/missing/stdlib.h
new file mode 100644
index 0000000000..8b1c959c01
--- /dev/null
+++ b/backends/platform/PalmOS/Src/missing/stdlib.h
@@ -0,0 +1,88 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 STDLIB_H
+#define STDLIB_H
+
+#include "palmversion.h"
+
+#ifdef PALMOS_68K
+#include "MemGlue.h"
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* malloc stuff */
+#if defined(COMPILE_ZODIAC)
+# define malloc MemPtrNew
+#elif defined(COMPILE_OS5) && defined(PALMOS_ARM)
+# define malloc __malloc
+#else
+# define malloc MemGluePtrNew
+#endif
+
+/* custom exit (true exit !) */
+extern ErrJumpBuf stdlib_errJumpBuf;
+#define DO_EXIT( code ) \
+ if (ErrSetJump(stdlib_errJumpBuf) == 0) { code }
+
+/* mapped to system functions */
+#define atoi StrAToI
+#define atol StrAToI
+#define abs(a) ((a) < 0 ? -(a) : (a))
+#define qsort(a,b,c,d) SysQSort((a), (b), (c), (CmpFuncPtr)(&d), 0);
+#define rand() SysRandom(0)
+#define abort()
+#define strtoul(a,b,c) ((unsigned long)strtol(a,b,c))
+
+MemPtr __malloc (UInt32);
+MemPtr calloc (UInt32 nelem, UInt32 elsize);
+void exit (Int16 status);
+Err free (MemPtr memP);
+MemPtr realloc (MemPtr oldP, UInt32 size);
+long strtol (const char *s, char **endptr, int base);
+
+/* already defined in MSL */
+void *bsearch (const void *key, const void *base, UInt32 nmemb, UInt32 size, int (*compar)(const void *, const void *));
+
+/* ARM MSL only */
+#ifdef PALMOS_ARM
+#undef qsort
+#undef strtol
+#undef strtoul
+
+typedef int (*_compare_function)(const void*, const void*);
+
+void qsort (void * table_base, UInt32 num_members, UInt32 member_size, _compare_function compare_members);
+long int strtol (const char *nptr, char **endptr, int base);
+unsigned long int strtoul (const char *nptr, char **endptr,int base);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/backends/platform/PalmOS/Src/missing/string.h b/backends/platform/PalmOS/Src/missing/string.h
new file mode 100644
index 0000000000..bb250dfe9b
--- /dev/null
+++ b/backends/platform/PalmOS/Src/missing/string.h
@@ -0,0 +1,66 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 PALM_STRING_H
+#define PALM_STRING_H
+
+#include "palmversion.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* mapped to system functions */
+#define memcmp MemCmp
+#define memcpy MemMove
+#define memmove MemMove
+#define memset(a,b,c) MemSet(a,c,b)
+#define strcat StrCat
+#define strncat StrNCat
+#define strchr StrChr
+#define strcmp StrCompare
+#define strcpy StrCopy
+#define strncpy StrNCopy
+#define stricmp StrCaselessCompare
+#define strnicmp StrNCaselessCompare
+#define strlen StrLen
+#define strncmp StrNCompare
+#define strstr StrStr
+
+/* missing functions in 68k MSL */
+void *memchr (const void *s, int c, UInt32 n);
+Char *strdup (const Char *strSource);
+
+/* already defined in MSL */
+Char *strtok (Char *str, const Char *sep);
+Char *strrchr (const Char *s, int c);
+Char *strpbrk (const Char *s1, const Char *s2);
+UInt32 strspn (const Char *s1, const Char *s2);
+UInt32 strcspn (const Char *s1, const Char *s2);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/backends/platform/PalmOS/Src/missing/sys/stat.h b/backends/platform/PalmOS/Src/missing/sys/stat.h
new file mode 100644
index 0000000000..da84fa5f6b
--- /dev/null
+++ b/backends/platform/PalmOS/Src/missing/sys/stat.h
@@ -0,0 +1 @@
+/* nothing */
diff --git a/backends/platform/PalmOS/Src/missing/time.h b/backends/platform/PalmOS/Src/missing/time.h
new file mode 100644
index 0000000000..3de16f4517
--- /dev/null
+++ b/backends/platform/PalmOS/Src/missing/time.h
@@ -0,0 +1,55 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 __TIME_H__
+#define __TIME_H__
+
+#include "palmversion.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef UInt32 time_t;
+
+struct tm {
+ Int16 tm_sec; // seconds [0,61]
+ Int16 tm_min; // minutes [0,59]
+ Int16 tm_hour; // hour [0,23]
+ Int16 tm_mday; // day of month [1,31]
+ Int16 tm_mon; // month of year [0,11]
+ Int16 tm_year; // years since 1900
+ Int16 tm_wday; // day of week [0,6] (Sunday = 0)
+ Int16 tm_yday; // day of year [0,365]
+ Int16 tm_isdst; // daylight savings flag
+};
+
+time_t time(time_t *tloc);
+struct tm *localtime(const time_t *timer);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/backends/platform/PalmOS/Src/missing/unistd.h b/backends/platform/PalmOS/Src/missing/unistd.h
new file mode 100644
index 0000000000..400b0e2c39
--- /dev/null
+++ b/backends/platform/PalmOS/Src/missing/unistd.h
@@ -0,0 +1,42 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 __UNISTD_H__
+#define __UNISTD_H__
+
+#include "palmversion.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern const Char *gUnistdCWD;
+
+Char *getcwd(Char *buf, UInt32 size);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/backends/platform/PalmOS/Src/modules.cpp b/backends/platform/PalmOS/Src/modules.cpp
new file mode 100644
index 0000000000..73c7c117bb
--- /dev/null
+++ b/backends/platform/PalmOS/Src/modules.cpp
@@ -0,0 +1,251 @@
+#include <PalmOS.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include "palmdefs.h"
+#include "args.h"
+#include "globals.h"
+#include "modules.h"
+#include "extend.h"
+#include "features.h"
+
+#include "rumble.h"
+#include "init_mathlib.h"
+#include "init_pa1lib.h"
+#include "init_palmos.h"
+#include "init_stuffs.h"
+#include "init_sony.h"
+#include "init_golcd.h"
+
+#ifndef DISABLE_LIGHTSPEED
+#include "lightspeed_public.h"
+#endif
+
+GlobalsDataPtr gVars;
+
+#ifdef PALMOS_NATIVE
+
+#include "endianutils.h"
+#include <PNOLoader.h>
+
+#ifdef COMPILE_ZODIAC
+# include <tapwave.h>
+# include <TwRuntime.h>
+#else
+# include <TwDefs.h>
+#endif
+
+void run(int argc, char *argv[]) {
+ // init args
+ ArgsExportInit(argv, argc, true);
+
+ // init system
+ PalmHRInit(16);
+ PalmInit(HWR_GET());
+ void *__ptr = StuffsForceVG();
+
+ gVars->screenPitch = StuffsGetPitch(gVars->screenFullWidth);
+
+ // export global struct to ARM
+ VARS_EXPORT();
+ DO_VARS(_4B, 32, 0);
+ DO_VARS(_2B, 16, (gVars->_4B * sizeof(UInt32)));
+ FtrSet(appFileCreator, ftrVars , (UInt32)gVars);
+
+ // run the module
+#ifdef COMPILE_ZODIAC
+ NativeFuncType *entry;
+ TwLoadModule(0, 0, 0, 1, twLoadFlagTNA|twLoadFlagQuickRun, &entry);
+#else
+ UInt32 glue;
+ FtrGet(twFtrCreator, twFtrAPIGlue, &glue);
+
+ PnoDescriptor pno;
+ PnoLoadFromResources(&pno, 'ARMC', 1, appFileCreator, 1);
+ PnoCall(&pno, (void*)glue);
+ PnoUnload(&pno);
+#endif
+
+ // reset globals
+ DO_VARS(_4B, 32, 0);
+ DO_VARS(_2B, 16, (gVars->_4B * sizeof(UInt32)));
+
+ // release
+ StuffsReleaseVG(__ptr);
+ PalmRelease(HWR_GET());
+ PalmHRRelease();
+
+ // free args
+ ArgsExportRelease(true);
+ ArgsFree(argv);
+
+ // release global struct
+ FtrUnregister(appFileCreator, ftrVars);
+ FtrUnregister(appFileCreator, ftrStack);
+ MemPtrFree(gVars);
+
+ // reset the palette if needed
+ WinPalette(winPaletteSetToDefault, 0, 256, NULL);
+}
+
+#else
+
+#include "stdafx.h"
+#include "base/main.h"
+#include "be_zodiac.h"
+#include "be_os5ex.h"
+
+static void palm_main(int argc, char **argvP) {
+#ifdef COMPILE_OS5
+ if (gVars->advancedMode)
+ g_system = new OSystem_PalmOS5Ex();
+ else
+ g_system = new OSystem_PalmOS5();
+#elif defined(COMPILE_ZODIAC)
+ g_system = new OSystem_PalmZodiac();
+#else
+ #error "No target defined."
+#endif
+
+ assert(g_system);
+
+ // Invoke the actual ScummVM main entry point:
+ scummvm_main(argc, argvP);
+
+ g_system->quit(); // TODO: Consider removing / replacing this!
+}
+
+void run(int argc, char *argv[]) {
+
+ MathlibInit();
+ gVars->HRrefNum = SonyHRInit(8);
+ if (gVars->HRrefNum == sysInvalidRefNum)
+ PalmHRInit(8);
+ gVars->slkRefNum= SilkInit(&(gVars->slkVersion));
+ gVars->screenPitch = StuffsGetPitch(gVars->screenFullWidth);
+
+ // create file for printf, warnings, etc...
+ StdioInit(gVars->VFS.volRefNum, "/PALM/Programs/ScummVM/scumm.log");
+ if (gVars->indicator.showLED) StdioSetLedProc(DrawStatus);
+ StdioSetCacheSize(gVars->VFS.cacheSize);
+ gUnistdCWD = SCUMMVM_SAVEPATH;
+
+ // init hardware
+ if (HWR_INIT(INIT_GOLCD)) GoLCDInit(&gGoLcdH);
+ if (HWR_INIT(INIT_PA1LIB)) Pa1libInit(gVars->palmVolume);
+ if (HWR_INIT(INIT_VIBRATOR)) gVars->vibrator = RumbleInit();
+ PalmInit(HWR_GET());
+
+ if (!gVars->vibrator)
+ HWR_RST(INIT_VIBRATOR);
+
+ GlbOpen();
+ // be sure to have a VG
+ void *__ptr = StuffsForceVG();
+
+ DO_EXIT( palm_main(argc, argv); )
+
+ // be sure to release features memory
+ FREE_FTR(ftrBufferOverlay)
+ FREE_FTR(ftrBufferBackup)
+ FREE_FTR(ftrBufferHotSwap)
+
+ StuffsReleaseVG(__ptr);
+ GlbClose();
+
+ PalmRelease(HWR_GET());
+ if (HWR_INIT(INIT_VIBRATOR)) RumbleRelease();
+ if (HWR_INIT(INIT_PA1LIB)) Pa1libRelease();
+ if (HWR_INIT(INIT_GOLCD)) GoLCDRelease(gGoLcdH);
+
+ // close log file
+ StdioRelease();
+
+ PalmHRRelease();
+ SonyHRRelease(gVars->HRrefNum);
+ SilkRelease(gVars->slkRefNum);
+ MathlibRelease();
+
+ MemPtrFree(gVars);
+ WinPalette(winPaletteSetToDefault, 0, 256, NULL);
+// ArgsFree(argvP); // called in main(...)
+}
+#endif
+
+static UInt32 ModulesPalmMain(UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags)
+{
+ UInt32 result = 0;
+
+ switch (cmd) {
+ case sysAppLaunchCustomEngineGetInfo: {
+#ifdef PALMOS_NATIVE
+ result = GET_MODEARM;
+#else
+# if !defined(DISABLE_SCUMM) || \
+ !defined(DISABLE_SIMON) || \
+ !defined(DISABLE_SWORD1)
+ result = GET_DATACOMMON|GET_DATAENGINE|GET_MODE68K;
+# else
+ result = GET_DATACOMMON|GET_MODE68K;
+# endif
+#endif
+ break;
+ }
+
+ case sysAppLaunchCmdNormalLaunch: {
+ if (cmdPBP) {
+ Char **argvP;
+ UInt16 cardNo;
+ LocalID dbID;
+
+ LaunchParamType *lp = (LaunchParamType *)cmdPBP;
+
+ gVars = lp->gVars;
+ argvP = lp->args.argv;
+
+ // get the free memory on the dynamic heap
+ PalmGetMemory(0,0,0, &(gVars->startupMemory));
+
+#ifndef DISABLE_LIGHTSPEED
+ switch (lp->lightspeed) {
+ case 0:
+ LS_SetCPUSpeedHigh();
+ break;
+ case 1:
+ LS_SetCPUSpeedNormal();
+ break;
+ case 2:
+ LS_SetCPUSpeedLow();
+ break;
+ }
+#endif
+ // MemPtrSetOwner(gVars, ownerID);
+ // ArgsSetOwner(argvP, ownerID); // will be freed by main(...)
+ // MemPtrFree(lp); // will be freed by the system on exit
+
+ run(lp->args.argc, argvP);
+
+ cardNo = 0;
+ dbID = DmFindDatabase(0, "ScummVM");
+ if (dbID) {
+ if (lp->exitLauncher)
+ SysUIAppSwitch(cardNo, dbID, sysAppLaunchCustomEngineDelete,0);
+ else
+ SysUIAppSwitch(cardNo, dbID, sysAppLaunchCmdNormalLaunch,0);
+ }
+ }
+ break;
+ }
+
+ default:
+ break;
+
+ }
+
+ return result;
+}
+
+UInt32 PilotMain( UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) {
+ return ModulesPalmMain(cmd, cmdPBP, launchFlags);
+}
diff --git a/backends/platform/PalmOS/Src/modules.h b/backends/platform/PalmOS/Src/modules.h
new file mode 100644
index 0000000000..d172ad11c2
--- /dev/null
+++ b/backends/platform/PalmOS/Src/modules.h
@@ -0,0 +1,22 @@
+#ifndef MODULES_H
+#define MODULES_H
+
+#include "globals.h"
+
+#define sysAppLaunchCode_SVMRunEngine (sysAppLaunchCmdCustomBase + 0)
+
+void ModDelete();
+
+typedef struct {
+ UInt8 lightspeed;
+ Boolean exitLauncher;
+
+ struct {
+ UInt8 argc;
+ Char **argv;
+ } args;
+
+ GlobalsDataPtr gVars;
+} LaunchParamType;
+
+#endif
diff --git a/backends/platform/PalmOS/Src/native/oscalls.cpp b/backends/platform/PalmOS/Src/native/oscalls.cpp
new file mode 100644
index 0000000000..4520d81c20
--- /dev/null
+++ b/backends/platform/PalmOS/Src/native/oscalls.cpp
@@ -0,0 +1,47 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 <PenInputMgr.h>
+#include "pace.h"
+
+GlobalsType global;
+
+
+PACE_CLASS_WRAPPER(Err)
+ StatShow_68k(void) {
+ PACE_PIN_EXEC_NP(pinStatShow, Err)
+}
+
+PACE_CLASS_WRAPPER(Err)
+ StatHide_68k(void) {
+ PACE_PIN_EXEC_NP(pinStatHide, Err)
+}
+
+PACE_CLASS_WRAPPER(Err)
+ PINSetInputAreaState_68k(UInt16 state) {
+ PACE_PARAMS_INIT()
+ PACE_PARAMS_ADD16(state)
+ PACE_PARAMS_END()
+ PACE_PIN_EXEC(pinPINSetInputAreaState, Err)
+}
diff --git a/backends/platform/PalmOS/Src/native/oscalls.h b/backends/platform/PalmOS/Src/native/oscalls.h
new file mode 100644
index 0000000000..ae8f989337
--- /dev/null
+++ b/backends/platform/PalmOS/Src/native/oscalls.h
@@ -0,0 +1,40 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 _OSCALLS_H_
+#define _OSCALLS_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+Err StatShow_68k();
+Err StatHide_68k();
+Err PINSetInputAreaState_68k(UInt16 state);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/backends/platform/PalmOS/Src/native/pace.h b/backends/platform/PalmOS/Src/native/pace.h
new file mode 100644
index 0000000000..a617e8a274
--- /dev/null
+++ b/backends/platform/PalmOS/Src/native/pace.h
@@ -0,0 +1,102 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 PACE_H
+#define PACE_H
+
+#include <PceNativeCall.h>
+//#include "endianutils.h"
+
+// local definition of the emulation state structure
+typedef struct {
+ UInt32 instr;
+ UInt32 regData[8];
+ UInt32 regAddress[8];
+ UInt32 regPC;
+} EmulStateType;
+
+typedef struct {
+ EmulStateType *emulStateP;
+ Call68KFuncType *call68KFuncP;
+} GlobalsType;
+
+extern GlobalsType global;
+
+// TODO : check this, already defined in ARMlet_Runtime
+//extern EmulStateType *g_emulStateP;
+//extern Call68KFuncType *g_call68KFuncP;
+#define g_emulStateP global.emulStateP
+#define g_call68KFuncP global.call68KFuncP
+
+
+#ifdef __cplusplus
+# define PACE_CLASS_WRAPPER(rv) extern "C" rv
+#else
+# define PACE_CLASS_WRAPPER(rv) rv
+#endif
+#define PACE_CALLBACK_PTR g_call68KFuncP
+#define PACE_EMULSTATE g_emulStateP
+
+#define ALIGN_4BYTE(addr) (((UInt32)(addr) + 3) & 0xFFFFFFFC)
+
+/****** TAKEN FROM PACEInteface.cpp (ARMlet_Runtime) ******/
+// local definition of the emulation state structure
+
+#define PACE_PARAMS_INIT() \
+ UInt8 params[] = {
+
+#define PACE_PARAMS_ADD8(param) \
+ (UInt8)(param), \
+ 0,
+
+#define PACE_PARAMS_ADD16(param) \
+ (UInt8)((UInt16)(param) >> 8), \
+ (UInt8)(param),
+
+#define PACE_PARAMS_ADD32(param) \
+ (UInt8)((UInt32)(param) >> 24), \
+ (UInt8)((UInt32)(param) >> 16), \
+ (UInt8)((UInt32)(param) >> 8), \
+ (UInt8)(param),
+
+#define PACE_PARAMS_END() \
+ };
+
+// PIN
+#define PACE_PIN_EXEC_NP(pinTrap, returnType) \
+ PACE_EMULSTATE->regData[2] = pinTrap; \
+ return ((returnType)((PACE_CALLBACK_PTR)( \
+ static_cast<void *>(PACE_EMULSTATE), \
+ PceNativeTrapNo(sysTrapPinsDispatch), \
+ NULL, 0)));
+
+#define PACE_PIN_EXEC(pinTrap, returnType) \
+ PACE_EMULSTATE->regData[2] = pinTrap; \
+ return ((returnType)((PACE_CALLBACK_PTR)( \
+ static_cast<void *>(PACE_EMULSTATE), \
+ PceNativeTrapNo(sysTrapPinsDispatch), \
+ &params, \
+ sizeof(params))));
+
+#endif \ No newline at end of file
diff --git a/backends/platform/PalmOS/Src/native/pnoARM.c b/backends/platform/PalmOS/Src/native/pnoARM.c
new file mode 100644
index 0000000000..6c7954fcb5
--- /dev/null
+++ b/backends/platform/PalmOS/Src/native/pnoARM.c
@@ -0,0 +1,80 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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$
+ *
+ */
+
+#ifdef COMPILE_OS5
+
+//#include <tapwave.h>
+#include <PalmOS.h>
+#include <stdlib.h>
+#include "pace.h"
+
+// Linker still looks for ARMlet_Main as entry point, but the
+// "ARMlet" name is now officially discouraged. Compare an
+// contrast to "PilotMain" for 68K applications.
+#define PNO_Main ARMlet_Main
+
+#ifdef COMPILE_ZODIAC
+ const void* twEmulState;
+ Call68KFuncType* twCall68KFunc;
+#endif
+struct TwGlue* twGlue;
+
+unsigned long PNO_Main(const void *emulStateP, void *userData68KP, Call68KFuncType *call68KFuncP) {
+#ifdef COMPILE_ZODIAC
+ twEmulState = emulStateP;
+ twCall68KFunc = call68KFuncP;
+#else
+ global.emulStateP = (EmulStateType *)emulStateP;
+ global.call68KFuncP = call68KFuncP;
+#endif
+ twGlue = (struct TwGlue*) userData68KP;
+ return PilotMain(sysAppLaunchCmdNormalLaunch, userData68KP, 0);
+}
+
+ //
+ // The following functions provide malloc/free support to Metrowerks
+ // Standard Library (MSL). This feature requires the MSL library be
+ // built with _MSL_OS_DIRECT_MALLOC enabled.
+ //
+void*
+__sys_alloc(UInt32 size)
+{
+ void * ptr = malloc(size);
+ ErrFatalDisplayIf(ptr == NULL, "out of memory");
+ return ptr;
+}
+
+void
+__sys_free(void* ptr)
+{
+ (void) MemPtrFree(ptr);
+}
+
+UInt32
+__sys_pointer_size(void* ptr)
+{
+ return (UInt32) MemPtrSize(ptr);
+}
+
+#endif
diff --git a/backends/platform/PalmOS/Src/native/pnoStartup.c b/backends/platform/PalmOS/Src/native/pnoStartup.c
new file mode 100644
index 0000000000..dcfb56d002
--- /dev/null
+++ b/backends/platform/PalmOS/Src/native/pnoStartup.c
@@ -0,0 +1,27 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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$
+ *
+ */
+
+#ifdef COMPILE_OS5
+# include "(Source)/ARMlet_Startup.c"
+#endif
diff --git a/backends/platform/PalmOS/Src/native/zodiacARM.cpp b/backends/platform/PalmOS/Src/native/zodiacARM.cpp
new file mode 100644
index 0000000000..9b0db9122d
--- /dev/null
+++ b/backends/platform/PalmOS/Src/native/zodiacARM.cpp
@@ -0,0 +1,146 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include "globals.h"
+#include "extend.h"
+#include "args.h"
+#include "palmdefs.h"
+
+#include "rumble.h"
+
+
+#include <AdnDebugMgr.h>
+//#define DEBUG_ARM
+
+#include "stdafx.h"
+#include "base/main.h"
+#include "be_zodiac.h"
+#include "be_os5ex.h"
+
+GlobalsDataType g_vars;
+GlobalsDataPtr gVars = &g_vars;
+UInt32 g_stackSize;
+
+static void palm_main(int argc, char **argvP) {
+#ifdef COMPILE_OS5
+ if (gVars->advancedMode)
+ g_system = new OSystem_PalmOS5Ex();
+ else
+ g_system = new OSystem_PalmOS5();
+#elif defined(COMPILE_ZODIAC)
+ g_system = new OSystem_PalmZodiac();
+#else
+ #error "No target defined."
+#endif
+
+ assert(g_system);
+
+ scummvm_main(argc, argvP);
+
+ g_system->quit(); // TODO: Consider removing / replacing this!
+}
+
+static void Go() {
+ void *tmp;
+ char **argvP;
+ int argc;
+
+#ifdef DEBUG_ARM
+// Tell the debugger we want to enable full debugging
+ UInt32 flags = AdnDebugEnableGet();
+ flags |= kAdnEnableMasterSwitch | kAdnEnableFullDebugging;
+ AdnDebugEnableSet(flags);
+// Tell the debugger where our code lives in memory:
+ AdnDebugNativeRegister(sysFileTApplication, appFileCreator, 'ARMC', 1);
+#endif
+
+ // get global struct
+ FtrGet(appFileCreator, ftrVars, (UInt32 *)&tmp);
+ MemMove(gVars, tmp, sizeof(GlobalsDataType));
+
+ // init STDIO
+ StdioSetCacheSize(0);
+ StdioInit(gVars->VFS.volRefNum, "/PALM/Programs/ScummVM/scumm.log");
+ if (gVars->indicator.showLED)
+ StdioSetLedProc(DrawStatus);
+ StdioSetCacheSize(gVars->VFS.cacheSize);
+ gUnistdCWD = SCUMMVM_SAVEPATH;
+
+ // get args
+ FtrGet(appFileCreator, ftrArgsData, (UInt32 *)&argvP);
+ FtrGet(appFileCreator, ftrArgsCount, (UInt32 *)&argc);
+
+ // init system
+ WinSetDrawWindow(WinGetDisplayWindow());
+ if (HWR_INIT(INIT_VIBRATOR)) gVars->vibrator = RumbleInit();
+
+ // run ...
+ DO_EXIT ( palm_main(argc, argvP); )
+
+ // release
+ if (HWR_INIT(INIT_VIBRATOR)) RumbleRelease();
+ StdioRelease();
+
+#ifdef DEBUG_ARM
+ AdnDebugNativeUnregister();
+#endif
+}
+
+/* Stack size */
+
+Int8 *g_newStack, *g_newStackPos;
+void *g_oldStack;
+
+static asm void *StkSwap(void *newStack ,void *dummy) {
+ mov r1, r13
+ mov r13, r0
+ mov r0, r1
+ bx lr
+}
+
+extern UInt32 PilotMain(UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) {
+ if (cmd == sysAppLaunchCmdNormalLaunch) {
+ FtrGet(appFileCreator, ftrStack, &g_stackSize);
+ if (!g_stackSize)
+ g_stackSize = 32 * 1024;
+
+ g_newStack = (Int8 *)malloc(g_stackSize + 8);
+ g_newStackPos = (g_newStack + g_stackSize);
+ g_newStackPos -= ((UInt32)g_newStackPos & 7);
+
+ g_oldStack = StkSwap(g_newStackPos, 0);
+
+ Go();
+
+ StkSwap(g_oldStack, 0);
+ free(g_newStack);
+ }
+
+ return 0;
+}
+
diff --git a/backends/platform/PalmOS/Src/native/zodiacStartup.cpp b/backends/platform/PalmOS/Src/native/zodiacStartup.cpp
new file mode 100644
index 0000000000..64ac89ab5b
--- /dev/null
+++ b/backends/platform/PalmOS/Src/native/zodiacStartup.cpp
@@ -0,0 +1,173 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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$
+ *
+ */
+
+#ifdef COMPILE_ZODIAC
+
+#include <TapWave.h>
+
+#ifndef __PALMOS_ARMLET__
+#error "__PALMOS_ARMLET__ is not defined!!!"
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * This variable holds the Tapwave Native Application interface
+ * dispatch table. General ARM API calls will go through this table.
+ */
+struct TwGlue* twGlue;
+const void* twEmulState;
+Call68KFuncType* twCall68KFunc;
+
+#ifdef __MWERKS__
+
+#if __PALMOS_ARMLET__ < 0x120
+#error "You must use CodeWarrior for Palm OS 9.3 or later!!!"
+#endif
+
+
+UInt32 __ARMlet_Startup__(const void*, void*, Call68KFuncType*);
+
+/*
+ * These symbols aren't real, but are linker-generated symbols that
+ * mark the start and end of the various data sections.
+ */
+extern long __DataStart__[];
+extern long __RODataStart__[];
+extern long __BSSStart__[];
+extern long __BSSEnd__[];
+extern long __CodeRelocStart__[];
+extern long __CodeRelocEnd__[];
+extern long __DataRelocStart__[];
+extern long __DataRelocEnd__[];
+
+/*
+ * This function performs relocation for Tapwave Native Application.
+ */
+static void relocate(void)
+{
+ // this symbol points to the very beginning of current application
+ long base = (long) __ARMlet_Startup__;
+ long *cur, *end;
+
+ // handle code-to-data relocation
+ cur = __CodeRelocStart__;
+ end = __CodeRelocEnd__;
+ for (; cur < end; cur++) {
+ *(long*)(base + *cur) += base;
+ }
+
+ // handle data-to-data relocation
+ cur = __DataRelocStart__;
+ end = __DataRelocEnd__;
+ for (; cur < end; cur++) {
+ *(long*)(base + *cur) += base;
+ }
+}
+
+/*
+ * The following functions provide malloc/free support to Metrowerks
+ * Standard Library (MSL). This feature requires the MSL library be
+ * built with _MSL_OS_DIRECT_MALLOC enabled.
+ */
+void*
+__sys_alloc(size_t size)
+{
+ void * ptr = MemPtrNew(size);
+ ErrFatalDisplayIf(ptr == NULL, "out of memory");
+ return ptr;
+}
+
+void
+__sys_free(void* ptr)
+{
+ (void) MemPtrFree(ptr);
+}
+
+size_t
+__sys_pointer_size(void* ptr)
+{
+ return (size_t) MemPtrSize(ptr);
+}
+
+/*
+ * This is the real entrypoint for Tapwave Native Application. It
+ * depends on various CodeWarrior 9.2 compiler/linker/runtime features.
+ */
+static SYSTEM_CALLBACK UInt32
+Startup(const void *emulStateP, void *userData68KP, Call68KFuncType *call68KFuncP)
+{
+ if (emulStateP) {
+ twEmulState = emulStateP;
+ twCall68KFunc = call68KFuncP;
+ // COMMENT: normal pace native object launch
+ return PilotMain(sysAppLaunchCmdNormalLaunch, userData68KP, 0);
+ } else {
+ // Setup TNA interface dispatch table
+ twGlue = (struct TwGlue*) userData68KP;
+
+ // OPTIONAL: relocate data segment
+ relocate();
+
+ // OPTIONAL: initialize the floating-point library
+ // _fp_init();
+
+ return 0;
+ }
+}
+
+#pragma PIC off
+asm UInt32
+__ARMlet_Startup__(const void *emulStateP, void *userData68KP, Call68KFuncType *call68KFuncP)
+{
+ b Startup // 0 forwarding call
+ nop // 4
+ nop // 8
+ nop // 12
+ nop // 16
+ nop // 20
+ nop // 24
+ dcd 'TWNA' // 28 Tapwave Native Application
+ dcd 1 // 32 version 1
+ dcd 'cdwr' // 36 make this section the same as the __ARMlet_Startup__
+ dcd __DataStart__ // 40 used by CodeWarrior 9.2
+ dcd __RODataStart__ // 44
+ dcd __BSSStart__ // 48
+ dcd __BSSEnd__ // 52
+ dcd __CodeRelocStart__ // 56
+ dcd __CodeRelocEnd__ // 60
+ dcd __DataRelocStart__ // 64
+ dcd __DataRelocEnd__ // 68
+}
+#pragma PIC reset
+
+#endif // __MWERKS__
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif
diff --git a/backends/platform/PalmOS/Src/os5_event.cpp b/backends/platform/PalmOS/Src/os5_event.cpp
new file mode 100644
index 0000000000..99e5867450
--- /dev/null
+++ b/backends/platform/PalmOS/Src/os5_event.cpp
@@ -0,0 +1,86 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 "be_os5.h"
+
+void OSystem_PalmOS5::get_coordinates(EventPtr ev, Coord &x, Coord &y) {
+ Boolean dummy;
+ EvtGetPenNative(WinGetDisplayWindow(), &ev->screenX, &ev->screenY, &dummy);
+
+ x = (ev->screenX - _screenOffset.x);
+ y = (ev->screenY - _screenOffset.y);
+
+ if (_stretched) {
+ if (OPTIONS_TST(kOptModeLandscape)) {
+ x = (x * 2 / 3);
+ y = (y * 2 / 3);
+ } else {
+ y = ((ev->screenX - _screenOffset.y) * 2) / 3;
+ x = 320 - ((ev->screenY - _screenOffset.x) * 2) / 3 - 1;
+ }
+ }
+}
+
+bool OSystem_PalmOS5::check_event(Event &event, EventPtr ev) {
+ if (ev->eType == keyDownEvent) {
+ switch (ev->data.keyDown.chr) {
+ case vchrHard4:
+ _lastKey = kKeyNone;
+ event.type = EVENT_RBUTTONDOWN;
+ event.mouse.x = _mouseCurState.x;
+ event.mouse.y = _mouseCurState.y;
+ return true;
+ }
+
+ if (_keyMouse.hasMore) {
+ switch (ev->data.keyDown.chr) {
+ // hot swap gfx
+ case vchrHard1:
+ if (OPTIONS_TST(kOptCollapsible))
+ hotswap_gfx_mode(_mode == GFX_WIDE ? GFX_NORMAL: GFX_WIDE);
+ return false; // not a key
+
+ // ESC key
+ case vchrHard2:
+ _lastKey = kKeyNone;
+ event.type = EVENT_KEYDOWN;
+ event.kbd.keycode = 27;
+ event.kbd.ascii = 27;
+ event.kbd.flags = 0;
+ return true;
+
+ // F5 = menu
+ case vchrHard3:
+ _lastKey = kKeyNone;
+ event.type = EVENT_KEYDOWN;
+ event.kbd.keycode = 319;
+ event.kbd.ascii = 319;
+ event.kbd.flags = 0;
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
diff --git a/backends/platform/PalmOS/Src/os5_gfx.cpp b/backends/platform/PalmOS/Src/os5_gfx.cpp
new file mode 100644
index 0000000000..2e2ec68454
--- /dev/null
+++ b/backends/platform/PalmOS/Src/os5_gfx.cpp
@@ -0,0 +1,317 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 "be_os5.h"
+#include <PenInputMgr.h>
+#include <palmOneResources.h>
+
+#ifdef PALMOS_ARM
+#include <System/WIP.h>
+#include <Libraries/AIA/palmOneStatusBarMgrARM.h>
+#endif
+
+#include "oscalls.h"
+
+void OSystem_PalmOS5::int_initSize(uint w, uint h) {
+}
+
+WinHandle OSystem_PalmOS5::alloc_screen(Coord w, Coord h) {
+ Err e;
+ WinHandle winH;
+ UInt16 old = WinSetCoordinateSystem(kCoordinatesNative);
+ winH = WinCreateOffscreenWindow(w, h, nativeFormat, &e);
+ WinSetCoordinateSystem(old);
+
+ return winH;
+}
+
+void OSystem_PalmOS5::load_gfx_mode() {
+ Err e;
+
+ if (_gfxLoaded)
+ return;
+ _gfxLoaded = true;
+
+
+ _mouseBackupP = (byte *)MemPtrNew(MAX_MOUSE_W * MAX_MOUSE_H * 2); // *2 if 16bit
+ _mouseDataP = (byte *)MemPtrNew(MAX_MOUSE_W * MAX_MOUSE_H);
+ _offScreenP = (byte *)malloc(_screenWidth * _screenHeight);
+
+ UInt32 depth = 16;
+ WinScreenMode(winScreenModeSet, NULL, NULL, &depth, NULL);
+ clearScreen();
+
+ gVars->indicator.on = RGBToColor(0,255,0);
+ gVars->indicator.off = RGBToColor(0,0,0);
+
+ _overlayH = alloc_screen(_screenWidth, _screenHeight);
+ _screenH = WinGetDisplayWindow();
+
+ _overlayP = (OverlayColor *)(BmpGetBits(WinGetBitmap(_overlayH)));
+ _screenP = (byte *)(BmpGetBits(WinGetBitmap(_screenH)));
+
+ MemSet(_offScreenP, _screenWidth * _screenHeight, 0);
+ MemSet(_nativePal, sizeof(_nativePal), 0);
+ MemSet(_currentPalette, sizeof(_currentPalette), 0);
+
+ _isSwitchable = (_screenWidth == 320 && _screenHeight == 200 && OPTIONS_TST(kOptCollapsible));
+ if (_screenWidth > 320 || _screenHeight > 200 || !_isSwitchable)
+ _mode = GFX_NORMAL;
+
+ hotswap_gfx_mode(_mode);
+}
+
+void OSystem_PalmOS5::hotswap_gfx_mode(int mode) {
+ Err e;
+ UInt32 device;
+
+ if (_mode != GFX_NORMAL && !_isSwitchable)
+ return;
+
+ if (_workScreenH)
+ WinDeleteWindow(_workScreenH, false);
+ _workScreenH = NULL;
+
+#ifdef PALMOS_ARM
+ Boolean isT3 = false;
+ if (!FtrGet(sysFileCSystem, sysFtrNumOEMDeviceID, &device))
+ isT3 = (device == kPalmOneDeviceIDTungstenT3);
+#endif
+
+ // prevent bad DIA redraw (Stat part)
+ if (mode == GFX_NORMAL) {
+ // only if this API is available
+ if (_stretched && OPTIONS_TST(kOptCollapsible)) {
+#ifdef PALMOS_ARM
+ if (isT3) {
+ //AiaSetInputAreaState(aiaInputAreaShow);
+ StatShow_68k();
+ PINSetInputAreaState_68k(pinInputAreaOpen);
+ } else
+#endif
+ {
+ StatShow();
+ PINSetInputAreaState(pinInputAreaOpen);
+ }
+ }
+
+ _redawOSD = true;
+ _stretched = false;
+ OPTIONS_RST(kOptDisableOnScrDisp);
+ _screenDest.w = _screenWidth;
+ _screenDest.h = _screenHeight;
+
+ if (_wasRotated) {
+ // restore controls rotation
+ SWAP(_keyMouse.bitLeft, _keyMouse.bitRight);
+ SWAP(_keyMouse.bitRight, _keyMouse.bitDown);
+ SWAP(_keyMouse.bitLeft, _keyMouse.bitUp);
+ _wasRotated = false;
+ }
+
+ _workScreenH = alloc_screen(_screenWidth, _screenHeight);
+ _workScreenP = (int16 *)(BmpGetBits(WinGetBitmap(_workScreenH)));
+ MemSet(_workScreenP, _screenWidth * _screenHeight * 2, 0);
+
+ _screenOffset.x = (gVars->screenWidth - _screenWidth) / 2;
+ _screenOffset.y = (gVars->screenHeight - _screenHeight) / 2;
+
+ _render = &OSystem_PalmOS5::render_1x;
+
+ } else {
+#ifdef PALMOS_ARM
+ // T3 DIA library is 68k base, there is no possible native call
+ if (isT3) {
+ //AiaSetInputAreaState(aiaInputAreaFullScreen);
+ PINSetInputAreaState_68k(pinInputAreaClosed);
+ StatHide_68k();
+ } else
+#endif
+ {
+ PINSetInputAreaState(pinInputAreaClosed);
+ StatHide();
+ }
+
+ _redawOSD = false;
+ _stretched = true;
+ OPTIONS_SET(kOptDisableOnScrDisp);
+
+ if (OPTIONS_TST(kOptModeLandscape)) {
+ _screenDest.w = 480;
+ _screenDest.h = 300;
+ _workScreenH = alloc_screen(480, 300);
+ _render = &OSystem_PalmOS5::render_landscape;
+
+ } else {
+ _screenDest.w = 300;
+ _screenDest.h = 480;
+ _workScreenH = alloc_screen(300, 480);
+ _render = &OSystem_PalmOS5::render_portrait;
+ // This mode need a controls rotation
+ SWAP(_keyMouse.bitLeft, _keyMouse.bitUp);
+ SWAP(_keyMouse.bitRight, _keyMouse.bitDown);
+ SWAP(_keyMouse.bitLeft, _keyMouse.bitRight);
+ _wasRotated = true;
+ }
+
+ _workScreenP = (int16 *)(BmpGetBits(WinGetBitmap(_workScreenH)));
+ MemSet(_workScreenP, 480 * 300 * 2, 0);
+
+ _screenOffset.x = 0;
+ _screenOffset.y = 10;
+ }
+
+ _mode = mode;
+ clearScreen();
+}
+
+void OSystem_PalmOS5::unload_gfx_mode() {
+ if (!_gfxLoaded)
+ return;
+ _gfxLoaded = false;
+
+ MemPtrFree(_mouseBackupP);
+ MemPtrFree(_mouseDataP);
+ free(_offScreenP);
+
+ if (_workScreenH)
+ WinDeleteWindow(_workScreenH, false);
+ if (_overlayH)
+ WinDeleteWindow(_overlayH, false);
+
+ _workScreenH = NULL;
+ _overlayH = NULL;
+
+ UInt32 depth = 8;
+ WinScreenMode(winScreenModeSet, NULL, NULL, &depth, NULL);
+ clearScreen();
+
+ WinSetCoordinateSystem(_sysOldCoord);
+}
+
+void OSystem_PalmOS5::copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h) {
+ // Clip the coordinates
+ if (x < 0) {
+ w += x;
+ buf -= x;
+ x = 0;
+ }
+
+ if (y < 0) {
+ h += y;
+ buf -= y * pitch;
+ y = 0;
+ }
+
+ if (w > _screenWidth - x)
+ w = _screenWidth - x;
+
+ if (h > _screenHeight - y)
+ h = _screenHeight - y;
+
+ if (w <= 0 || h <= 0)
+ return;
+
+ byte *dst = _offScreenP + y * _screenWidth + x;
+
+ if (w == pitch && w == _screenWidth) {
+ MemMove(dst, buf, w * h);
+ } else {
+ do {
+ MemMove(dst, buf, w);
+ dst += _screenWidth;
+ buf += pitch;
+ } while (--h);
+ }
+}
+
+void OSystem_PalmOS5::int_updateScreen() {
+ RectangleType r;
+ PointType p;
+
+ draw_mouse();
+ ((this)->*(_render))(r, p);
+
+ _sysOldCoord = WinSetCoordinateSystem(kCoordinatesNative);
+ WinCopyRectangle(_workScreenH, _screenH, &r, p.x, p.y, winPaint);
+ WinSetCoordinateSystem(_sysOldCoord);
+ undraw_mouse();
+}
+
+void OSystem_PalmOS5::clearScreen() {
+ RGBColorType rgb = { 0,0,0,0 };
+ WinSetDrawWindow(WinGetDisplayWindow());
+ WinSetBackColorRGB(&rgb, 0);
+ WinEraseWindow();
+}
+
+void OSystem_PalmOS5::extras_palette(uint8 index, uint8 r, uint8 g, uint8 b) {
+ _nativePal[index] = gfxMakeDisplayRGB( r, g, b);
+}
+
+void OSystem_PalmOS5::draw_osd(UInt16 id, Int32 x, Int32 y, Boolean show, UInt8 color) {
+ if (_mode != GFX_NORMAL)
+ return;
+// MemHandle hTemp = DmGetResource(bitmapRsc, id);
+ MemHandle hTemp = DmGetResource('abmp', id + 100);
+
+ if (hTemp) {
+ RGBColorType oldRGB;
+ static const RGBColorType pal[4] = {
+ {0,0,255,0},
+ {0,255,255,0},
+ {0,255,0,0},
+ {0,0,0,0}
+ };
+
+ BitmapType *bmTemp;
+ bmTemp = (BitmapType *)MemHandleLock(hTemp);
+
+ Coord w, h;
+ BmpGetDimensions(bmTemp, &w, &h, 0);
+
+ PointType dst = { _screenOffset.x + x, _screenOffset.y + y };
+ RectangleType c, r = { dst.x, dst.y, w, h };
+
+ UInt16 old = WinSetCoordinateSystem(kCoordinatesNative);
+ WinSetDrawWindow(_screenH);
+ WinGetClip(&c);
+ WinResetClip();
+
+ if (show) {
+ WinSetForeColorRGB(&pal[3], &oldRGB);
+ WinSetBackColorRGB(&pal[color], &oldRGB);
+ WinDrawBitmap(bmTemp, dst.x, dst.y);
+ } else {
+ WinSetBackColorRGB(&pal[3], &oldRGB);
+ WinFillRectangle(&r, 0);
+ }
+
+ WinSetClip(&c);
+ WinSetCoordinateSystem(old);
+
+ MemPtrUnlock(bmTemp);
+ DmReleaseResource(hTemp);
+ }
+}
diff --git a/backends/platform/PalmOS/Src/os5_mouse.cpp b/backends/platform/PalmOS/Src/os5_mouse.cpp
new file mode 100644
index 0000000000..363658e47c
--- /dev/null
+++ b/backends/platform/PalmOS/Src/os5_mouse.cpp
@@ -0,0 +1,175 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 "be_os5.h"
+
+void OSystem_PalmOS5::setMouseCursor(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, byte keycolor, int cursorTargetScale) {
+ if (w == 0 || h == 0)
+ return;
+
+ _mouseCurState.w = w;
+ _mouseCurState.h = h;
+
+ _mouseHotspotX = hotspotX;
+ _mouseHotspotY = hotspotY;
+
+ _mouseKeyColor = keycolor;
+
+ // copy new cursor
+ byte *dst = _mouseDataP;
+ while (h--) {
+ memcpy(dst, buf, w);
+ dst += MAX_MOUSE_W;
+ buf += w;
+ }
+}
+
+void OSystem_PalmOS5::draw_mouse() {
+ if (_mouseDrawn || !_mouseVisible)
+ return;
+
+ byte *src = _mouseDataP; // Image representing the mouse
+ byte color;
+ int width;
+
+ _mouseCurState.y = _mouseCurState.y >= _screenHeight ? _screenHeight - 1 : _mouseCurState.y;
+
+ int x = _mouseCurState.x - _mouseHotspotX;
+ int y = _mouseCurState.y - _mouseHotspotY;
+ int w = _mouseCurState.w;
+ int h = _mouseCurState.h;
+
+ int draw_x = x;
+ int draw_y = y;
+
+ // clip the mouse rect
+ if (x < 0) {
+ w += x;
+ src -= x;
+ x = 0;
+ }
+ if (y < 0) {
+ h += y;
+ src -= y * MAX_MOUSE_W;
+ y = 0;
+ }
+ if (w > _screenWidth - x)
+ w = _screenWidth - x;
+ if (h > _screenHeight - y)
+ h = _screenHeight - y;
+
+ // Quick check to see if anything has to be drawn at all
+ if (w <= 0 || h <= 0)
+ return;
+
+ // Store the bounding box so that undraw mouse can restore the area the
+ // mouse currently covers to its original content.
+ _mouseOldState.x = x;
+ _mouseOldState.y = y;
+ _mouseOldState.w = w;
+ _mouseOldState.h = h;
+
+ // Quick check to see if anything has to be drawn at all
+ if (w <= 0 || h <= 0)
+ return;
+
+ // Store the bounding box so that undraw mouse can restore the area the
+ // mouse currently covers to its original content.
+ _mouseOldState.x = x;
+ _mouseOldState.y = y;
+ _mouseOldState.w = w;
+ _mouseOldState.h = h;
+
+ // Backup the covered area draw the mouse cursor
+ if (_overlayVisible) {
+ int16 *bak = (int16 *)_mouseBackupP; // Surface used to backup the area obscured by the mouse
+ int16 *dst = _overlayP + y * _screenWidth + x;
+
+ do {
+ width = w;
+ do {
+ *bak++ = *dst;
+ color = *src++;
+ if (color != _mouseKeyColor) // transparent, don't draw
+ *dst = _nativePal[color];
+ dst++;
+ } while (--width);
+
+ src += MAX_MOUSE_W - w;
+ bak += MAX_MOUSE_W - w;
+ dst += _screenWidth - w;
+ } while (--h);
+
+ } else {
+ byte *bak = _mouseBackupP; // Surface used to backup the area obscured by the mouse
+ byte *dst =_offScreenP + y * _screenWidth + x; // Surface we are drawing into
+
+ do {
+ width = w;
+ do {
+ *bak++ = *dst;
+ color = *src++;
+ if (color != _mouseKeyColor) // transparent, don't draw
+ *dst = color;
+ dst++;
+ } while (--width);
+
+ src += MAX_MOUSE_W - w;
+ bak += MAX_MOUSE_W - w;
+ dst += _screenWidth - w;
+ } while (--h);
+ }
+
+ _mouseDrawn = true;
+}
+
+void OSystem_PalmOS5::undraw_mouse() {
+ if (!_mouseDrawn)
+ return;
+
+ int h = _mouseOldState.h;
+ // No need to do clipping here, since draw_mouse() did that already
+ if (_overlayVisible) {
+ int16 *bak = (int16 *)_mouseBackupP;
+ int16 *dst = _overlayP + _mouseOldState.y * _screenWidth + _mouseOldState.x;
+
+ do {
+ memcpy(dst, bak, _mouseOldState.w * 2);
+ bak += MAX_MOUSE_W;
+ dst += _screenWidth;
+ } while (--h);
+
+ } else {
+ byte *dst, *bak = _mouseBackupP;
+ dst = _offScreenP + _mouseOldState.y * _screenWidth + _mouseOldState.x;
+
+ do {
+ memcpy(dst, bak, _mouseOldState.w);
+ bak += MAX_MOUSE_W;
+ dst += _screenWidth;
+ } while (--h);
+ }
+
+ _mouseDrawn = false;
+}
diff --git a/backends/platform/PalmOS/Src/os5_overlay.cpp b/backends/platform/PalmOS/Src/os5_overlay.cpp
new file mode 100644
index 0000000000..93c6123cef
--- /dev/null
+++ b/backends/platform/PalmOS/Src/os5_overlay.cpp
@@ -0,0 +1,88 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 "be_os5.h"
+#include "common/endian.h"
+
+void OSystem_PalmOS5::showOverlay() {
+ // hide fight indicator
+ draw_osd(kDrawFight, _screenDest.w - 34, _screenDest.h + 2, false);
+
+ undraw_mouse();
+ _overlayVisible = true;
+ clearOverlay();
+}
+
+void OSystem_PalmOS5::hideOverlay() {
+ undraw_mouse();
+ _overlayVisible = false;
+ _redawOSD = true;
+}
+
+void OSystem_PalmOS5::clearOverlay() {
+ if (!_overlayVisible)
+ return;
+
+ byte *src = _offScreenP;
+ int16 *dst = _overlayP;
+ int cnt = _screenWidth * _screenHeight;
+ do {
+ *dst++ = _nativePal[*src++];
+ } while (--cnt);
+}
+
+void OSystem_PalmOS5::grabOverlay(OverlayColor *buf, int pitch) {
+ OverlayColor *src = _overlayP;
+ int h = _screenHeight;
+ do {
+ memcpy(buf, src, _screenWidth * 2);
+ src += _screenWidth;
+ buf += pitch;
+ } while (--h);
+}
+
+void OSystem_PalmOS5::copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h) {
+ if (w == 0 || h == 0)
+ return;
+
+ OverlayColor *dst = _overlayP + x + y * _screenWidth;
+ do {
+ memcpy(dst, buf, w * 2);
+ dst += _screenWidth;
+ buf += pitch;
+ } while (--h);
+}
+
+OverlayColor OSystem_PalmOS5::RGBToColor(uint8 r, uint8 g, uint8 b) {
+ return gfxMakeDisplayRGB(r, g, b);
+}
+
+void OSystem_PalmOS5::colorToRGB(OverlayColor color, uint8 &r, uint8 &g, uint8 &b) {
+#ifdef PALMOS_68K
+ color = SWAP_BYTES_16(color);
+#endif
+ r = ((color >> 8) & 0xF8);
+ g = ((color >> 3) & 0xFC);
+ b = ((color << 3) & 0xF8);
+}
diff --git a/backends/platform/PalmOS/Src/os5_renderer.cpp b/backends/platform/PalmOS/Src/os5_renderer.cpp
new file mode 100644
index 0000000000..ff692ae863
--- /dev/null
+++ b/backends/platform/PalmOS/Src/os5_renderer.cpp
@@ -0,0 +1,156 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 "be_os5.h"
+
+void OSystem_PalmOS5::render_1x(RectangleType &r, PointType &p) {
+ Coord o = 0;
+
+ if (_overlayVisible) {
+ int16 *src = _overlayP;
+ int16 *dst = _workScreenP;
+ MemMove(dst, src, _screenWidth * _screenHeight * 2);
+
+ } else {
+ byte *src = _offScreenP;
+ int16 *dst = _workScreenP;
+ int cnt = _screenWidth * _screenHeight;
+ o = _current_shake_pos;
+
+ do {
+ *dst++ = _nativePal[*src++];
+ } while (--cnt);
+ }
+
+ p.x = _screenOffset.x;
+ p.y = _screenOffset.y + o;
+ RctSetRectangle(&r, 0, 0, _screenWidth, _screenHeight - o);
+}
+
+void OSystem_PalmOS5::render_landscape(RectangleType &r, PointType &p) {
+ Coord x, y, o = 0;
+ int16 *dst = _workScreenP;
+
+ if (_overlayVisible) {
+ int16 *src = _overlayP;
+
+ for (y = 0; y < 100; y++) {
+ // draw 2 lines
+ for (x = 0; x < 320; x++) {
+ *dst++ = *src++;
+ *dst++ = *src;
+ *dst++ = *src++;
+ }
+ // copy the second to the next line
+ MemMove(dst, dst - 480, 480 * 2);
+ dst += 480;
+ }
+
+ } else {
+ byte *src = _offScreenP;
+ o = _current_shake_pos;
+
+ for (y = 0; y < 100; y++) {
+ // draw 2 lines
+ for (x = 0; x < 320; x++) {
+ *dst++ = _nativePal[*src++];
+ *dst++ = _nativePal[*src];
+ *dst++ = _nativePal[*src++];
+ }
+ // copy the second to the next line
+ MemMove(dst, dst - 480, 480 * 2);
+ dst += 480;
+ }
+ }
+
+ p.x = _screenOffset.x;
+ p.y = _screenOffset.y + o;
+ RctSetRectangle(&r, 0, 0, 480, 300 - o);
+}
+
+void OSystem_PalmOS5::render_portrait(RectangleType &r, PointType &p) {
+ Coord x, y, o = 0;
+ int16 *dst = _workScreenP;
+
+ if (_overlayVisible) {
+ int16 *src = _overlayP + 320 - 1;
+ int16 *src2 = src;
+
+ for (x = 0; x < 160; x++) {
+ for (y = 0; y < 100; y++) {
+ *dst++ = *src;
+ src += 320;
+ *dst++ = *src;
+ *dst++ = *src;
+ src += 320;
+ }
+ src = --src2;
+
+ for (y = 0; y < 100; y++) {
+ *dst++ = *src;
+ src += 320;
+ *dst++ = *src;
+ *dst++ = *src;
+ src += 320;
+ }
+ src = --src2;
+
+ MemMove(dst, dst - 300, 300 * 2); // 300 = 200 x 1.5
+ dst += 300;
+ }
+
+ } else {
+ byte *src = _offScreenP + 320 - 1;
+ byte *src2 = src;
+ o = _current_shake_pos;
+
+ for (x = 0; x < 160; x++) {
+ for (y = 0; y < 100; y++) {
+ *dst++ = _nativePal[*src];
+ src += 320;
+ *dst++ = _nativePal[*src];
+ *dst++ = _nativePal[*src];
+ src += 320;
+ }
+ src = --src2;
+
+ for (y = 0; y < 100; y++) {
+ *dst++ = _nativePal[*src];
+ src += 320;
+ *dst++ = _nativePal[*src];
+ *dst++ = _nativePal[*src];
+ src += 320;
+ }
+ src = --src2;
+
+ MemMove(dst, dst - 300, 300 * 2); // 300 = 200 x 1.5
+ dst += 300;
+ }
+ }
+
+ p.y = _screenOffset.x;
+ p.x = _screenOffset.y + o;
+ RctSetRectangle(&r, 0, 0, 300 - o, 480);
+}
+
diff --git a/backends/platform/PalmOS/Src/os5_sound.cpp b/backends/platform/PalmOS/Src/os5_sound.cpp
new file mode 100644
index 0000000000..4bdded13e7
--- /dev/null
+++ b/backends/platform/PalmOS/Src/os5_sound.cpp
@@ -0,0 +1,143 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 "be_os5.h"
+#include "backends/intern.h"
+#include "common/config-manager.h"
+
+SoundExType _soundEx;
+
+static Err sndCallback(void* UserDataP, SndStreamRef stream, void* bufferP, UInt32 *bufferSizeP) {
+ SoundExType *_soundEx = (SoundExType *)UserDataP;
+ SoundType *_sound = _soundEx->sound;
+
+ if (_soundEx->set && _soundEx->size) {
+ MemMove(bufferP, _soundEx->dataP, _soundEx->size);
+ *bufferSizeP = _soundEx->size;
+ _soundEx->set = false;
+
+ } else {
+ _soundEx->size = *bufferSizeP;
+ MemSet(bufferP, 128, 0);
+ *bufferSizeP = 128;
+ }
+
+ return errNone;
+}
+
+void OSystem_PalmOS5::sound_handler() {
+ if (_sound.active) {
+ if (_soundEx.size && !_soundEx.set) {
+ if (!_soundEx.dataP)
+ _soundEx.dataP = MemPtrNew(_soundEx.size);
+
+ ((SoundProc)_sound.proc)(_sound.param, (byte *)_soundEx.dataP, _soundEx.size);
+ _soundEx.set = true;
+ }
+ }// TODO : no Sound API case
+}
+
+SndStreamVariableBufferCallback OSystem_PalmOS5::sound_callback() {
+ return sndCallback;
+}
+
+bool OSystem_PalmOS5::setSoundCallback(SoundProc proc, void *param) {
+ Err e;
+ Boolean success = false;
+
+ if (!_sound.active) {
+ if (gVars->fmQuality != FM_QUALITY_INI) {
+ ConfMan.setBool("FM_medium_quality", (gVars->fmQuality == FM_QUALITY_MED));
+ ConfMan.setBool("FM_high_quality", (gVars->fmQuality == FM_QUALITY_HI));
+ }
+
+#if defined (COMPILE_OS5)
+ CALLBACK_INIT(_soundEx);
+#endif
+ _sound.proc = proc;
+ _sound.param = param;
+ _sound.active = true; // always true when we call this function, false when sound is off
+
+ _soundEx.handle = 0;
+ _soundEx.size = 0; // set by the callback
+ _soundEx.set = false;
+ _soundEx.dataP = NULL; // set by the handler
+
+ if (ConfMan.hasKey("output_rate"))
+ _samplesPerSec = ConfMan.getInt("output_rate");
+ else
+ _samplesPerSec = SAMPLES_PER_SEC;
+
+ // try to create sound stream
+ if (OPTIONS_TST(kOptPalmSoundAPI)) {
+ e = SndStreamCreateExtended(
+ &_soundEx.handle,
+ sndOutput,
+ sndFormatPCM,
+ _samplesPerSec,
+#ifdef PALMOS_68K
+ sndInt16Big,
+#else
+ sndInt16Little,
+#endif
+ sndStereo,
+ sound_callback(),
+ &_soundEx,
+ 8192
+#ifdef PALMOS_68K
+ ,false
+#elif defined (COMPILE_OS5)
+ ,true
+#endif
+ );
+
+ e = e ? e : SndStreamStart(_soundEx.handle);
+ e = e ? e : SndStreamSetVolume(_soundEx.handle, 1024L * gVars->palmVolume / 100);
+ success = (e == errNone);
+
+ // no Sound API
+ } else {
+ _soundEx.size = 512;
+ _soundEx.dataP = MemPtrNew(_soundEx.size);
+ }
+ }
+ // if not true some scenes (indy3 256,...) may freeze (ESC to skip)
+ return true;
+}
+
+void OSystem_PalmOS5::clearSoundCallback() {
+ if (_sound.active) {
+ if (OPTIONS_TST(kOptPalmSoundAPI)) {
+ SndStreamStop(_soundEx.handle);
+ SndStreamDelete(_soundEx.handle);
+ }
+
+ if (_soundEx.dataP)
+ free(_soundEx.dataP);
+ }
+
+ _sound.active = false;
+ _soundEx.handle = NULL;
+ _soundEx.dataP = NULL;
+}
diff --git a/backends/platform/PalmOS/Src/os5ex_sound.cpp b/backends/platform/PalmOS/Src/os5ex_sound.cpp
new file mode 100644
index 0000000000..1cbd5f7f14
--- /dev/null
+++ b/backends/platform/PalmOS/Src/os5ex_sound.cpp
@@ -0,0 +1,37 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 "be_os5ex.h"
+
+static SYSTEM_CALLBACK Err sndCallbackEx(void* UserDataP, SndStreamRef stream, void* bufferP, UInt32 *bufferSizeP) {
+ CALLBACK_PROLOGUE
+ SoundType *_sound = ((SoundExType *)UserDataP)->sound;
+ ((OSystem::SoundProc)_sound->proc)(_sound->param, (byte *)bufferP, *bufferSizeP);
+ CALLBACK_EPILOGUE
+ return errNone;
+}
+
+SndStreamVariableBufferCallback OSystem_PalmOS5Ex::sound_callback() {
+ return sndCallbackEx;
+}
diff --git a/backends/platform/PalmOS/Src/palm-scumm-md5.h b/backends/platform/PalmOS/Src/palm-scumm-md5.h
new file mode 100644
index 0000000000..bf82c8e93d
--- /dev/null
+++ b/backends/platform/PalmOS/Src/palm-scumm-md5.h
@@ -0,0 +1,9 @@
+
+struct MD5Table {
+ const char md5[32 + 1];
+ const char target[16 + 1];
+ Common::Language language;
+ Common::Platform platform;
+};
+
+static const MD5Table *md5table; \ No newline at end of file
diff --git a/backends/platform/PalmOS/Src/palmdefs.h b/backends/platform/PalmOS/Src/palmdefs.h
new file mode 100644
index 0000000000..d37b533a21
--- /dev/null
+++ b/backends/platform/PalmOS/Src/palmdefs.h
@@ -0,0 +1,21 @@
+#ifndef PALMDEFS_H
+#define PALMDEFS_H
+
+#define appFileCreator 'ScVM'
+#define sysAppLaunchCustomEngineDelete (sysAppLaunchCmdCustomBase + 0)
+#define sysAppLaunchCustomEngineGetInfo (sysAppLaunchCmdCustomBase + 1)
+
+enum {
+ GET_NONE = 0,
+ GET_DATACOMMON = 1 << 1,
+ GET_DATAENGINE = 1 << 2,
+
+ GET_MODE68K = 1 << 14,
+ GET_MODEARM = 1 << 15,
+};
+
+SysAppInfoPtr SysGetAppInfo(SysAppInfoPtr *uiAppPP, SysAppInfoPtr *actionCodeAppPP)
+ SYS_TRAP(sysTrapSysGetAppInfo);
+
+
+#endif
diff --git a/backends/platform/PalmOS/Src/palmversion.h b/backends/platform/PalmOS/Src/palmversion.h
new file mode 100644
index 0000000000..d4362ddd61
--- /dev/null
+++ b/backends/platform/PalmOS/Src/palmversion.h
@@ -0,0 +1,19 @@
+#ifndef PALMVERSION_H
+#define PALMVERSION_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if defined(COMPILE_ZODIAC)
+# include <tapwave.h>
+#else
+# include <PalmOS.h>
+# include <VFSMgr.h>
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/backends/platform/PalmOS/Src/prefixes/68k_agi.h b/backends/platform/PalmOS/Src/prefixes/68k_agi.h
new file mode 100644
index 0000000000..154c2d3115
--- /dev/null
+++ b/backends/platform/PalmOS/Src/prefixes/68k_agi.h
@@ -0,0 +1,9 @@
+#ifndef PREFIX_H
+#define PREFIX_H
+
+#include "compile.h"
+#undef DISABLE_AGI
+
+#define PALMOS_68K
+
+#endif
diff --git a/backends/platform/PalmOS/Src/prefixes/68k_cine.h b/backends/platform/PalmOS/Src/prefixes/68k_cine.h
new file mode 100644
index 0000000000..621fa0c4e1
--- /dev/null
+++ b/backends/platform/PalmOS/Src/prefixes/68k_cine.h
@@ -0,0 +1,9 @@
+#ifndef PREFIX_H
+#define PREFIX_H
+
+#include "compile.h"
+#undef DISABLE_CINE
+
+#define PALMOS_68K
+
+#endif
diff --git a/backends/platform/PalmOS/Src/prefixes/68k_gob.h b/backends/platform/PalmOS/Src/prefixes/68k_gob.h
new file mode 100644
index 0000000000..1eaa2a5e77
--- /dev/null
+++ b/backends/platform/PalmOS/Src/prefixes/68k_gob.h
@@ -0,0 +1,9 @@
+#ifndef PREFIX_H
+#define PREFIX_H
+
+#include "compile.h"
+#undef DISABLE_GOB
+
+#define PALMOS_68K
+
+#endif
diff --git a/backends/platform/PalmOS/Src/prefixes/68k_kyra.h b/backends/platform/PalmOS/Src/prefixes/68k_kyra.h
new file mode 100644
index 0000000000..0afb8de061
--- /dev/null
+++ b/backends/platform/PalmOS/Src/prefixes/68k_kyra.h
@@ -0,0 +1,9 @@
+#ifndef PREFIX_H
+#define PREFIX_H
+
+#include "compile.h"
+#undef DISABLE_KYRA
+
+#define PALMOS_68K
+
+#endif
diff --git a/backends/platform/PalmOS/Src/prefixes/68k_lure.h b/backends/platform/PalmOS/Src/prefixes/68k_lure.h
new file mode 100644
index 0000000000..1bc7b19edd
--- /dev/null
+++ b/backends/platform/PalmOS/Src/prefixes/68k_lure.h
@@ -0,0 +1,9 @@
+#ifndef PREFIX_H
+#define PREFIX_H
+
+#include "compile.h"
+#undef DISABLE_LURE
+
+#define PALMOS_68K
+
+#endif
diff --git a/backends/platform/PalmOS/Src/prefixes/68k_queen.h b/backends/platform/PalmOS/Src/prefixes/68k_queen.h
new file mode 100644
index 0000000000..cdf3859966
--- /dev/null
+++ b/backends/platform/PalmOS/Src/prefixes/68k_queen.h
@@ -0,0 +1,9 @@
+#ifndef PREFIX_H
+#define PREFIX_H
+
+#include "compile.h"
+#undef DISABLE_QUEEN
+
+#define PALMOS_68K
+
+#endif
diff --git a/backends/platform/PalmOS/Src/prefixes/68k_saga.h b/backends/platform/PalmOS/Src/prefixes/68k_saga.h
new file mode 100644
index 0000000000..0ad4089418
--- /dev/null
+++ b/backends/platform/PalmOS/Src/prefixes/68k_saga.h
@@ -0,0 +1,9 @@
+#ifndef PREFIX_H
+#define PREFIX_H
+
+#include "compile.h"
+#undef DISABLE_SAGA
+
+#define PALMOS_68K
+
+#endif
diff --git a/backends/platform/PalmOS/Src/prefixes/68k_scumm.h b/backends/platform/PalmOS/Src/prefixes/68k_scumm.h
new file mode 100644
index 0000000000..8a6e0d85c3
--- /dev/null
+++ b/backends/platform/PalmOS/Src/prefixes/68k_scumm.h
@@ -0,0 +1,12 @@
+#ifndef PREFIX_H
+#define PREFIX_H
+
+#include "compile.h"
+#undef DISABLE_SCUMM
+//#undef DISABLE_SCUMM_7_8
+//#undef DISABLE_HE
+
+#define PALMOS_68K
+//#define PALMOS_DEBUG
+
+#endif
diff --git a/backends/platform/PalmOS/Src/prefixes/68k_simon.h b/backends/platform/PalmOS/Src/prefixes/68k_simon.h
new file mode 100644
index 0000000000..54a57c0e93
--- /dev/null
+++ b/backends/platform/PalmOS/Src/prefixes/68k_simon.h
@@ -0,0 +1,9 @@
+#ifndef PREFIX_H
+#define PREFIX_H
+
+#include "compile.h"
+#undef DISABLE_SIMON
+
+#define PALMOS_68K
+
+#endif
diff --git a/backends/platform/PalmOS/Src/prefixes/68k_sky.h b/backends/platform/PalmOS/Src/prefixes/68k_sky.h
new file mode 100644
index 0000000000..52720f508d
--- /dev/null
+++ b/backends/platform/PalmOS/Src/prefixes/68k_sky.h
@@ -0,0 +1,9 @@
+#ifndef PREFIX_H
+#define PREFIX_H
+
+#include "compile.h"
+#undef DISABLE_SKY
+
+#define PALMOS_68K
+
+#endif
diff --git a/backends/platform/PalmOS/Src/prefixes/68k_sword1.h b/backends/platform/PalmOS/Src/prefixes/68k_sword1.h
new file mode 100644
index 0000000000..984e704cc5
--- /dev/null
+++ b/backends/platform/PalmOS/Src/prefixes/68k_sword1.h
@@ -0,0 +1,9 @@
+#ifndef PREFIX_H
+#define PREFIX_H
+
+#include "compile.h"
+#undef DISABLE_SWORD1
+
+#define PALMOS_68K
+
+#endif
diff --git a/backends/platform/PalmOS/Src/prefixes/68k_sword2.h b/backends/platform/PalmOS/Src/prefixes/68k_sword2.h
new file mode 100644
index 0000000000..bca68ff4d3
--- /dev/null
+++ b/backends/platform/PalmOS/Src/prefixes/68k_sword2.h
@@ -0,0 +1,9 @@
+#ifndef PREFIX_H
+#define PREFIX_H
+
+#include "compile.h"
+#undef DISABLE_SWORD2
+
+#define PALMOS_68K
+
+#endif
diff --git a/backends/platform/PalmOS/Src/prefixes/compile.h b/backends/platform/PalmOS/Src/prefixes/compile.h
new file mode 100644
index 0000000000..3d929b889c
--- /dev/null
+++ b/backends/platform/PalmOS/Src/prefixes/compile.h
@@ -0,0 +1,59 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 __COMPILE_H__
+#define __COMPILE_H__
+
+#define DISABLE_SCUMM
+#define DISABLE_SCUMM_7_8
+#define DISABLE_HE
+
+#define DISABLE_SIMON
+#define DISABLE_SKY
+#define DISABLE_SWORD1
+#define DISABLE_SWORD2
+#define DISABLE_QUEEN
+#define DISABLE_SAGA
+#define DISABLE_KYRA
+#define DISABLE_AWE
+#define DISABLE_GOB
+#define DISABLE_LURE
+#define DISABLE_CINE
+#define DISABLE_AGI
+
+#define DISABLE_HQ_SCALERS
+
+// PalmOS
+#define PALMOS_MODE
+#define COMPILE_ZODIAC
+//#define COMPILE_OS5
+
+//#define DISABLE_ADLIB
+//#define DISABLE_LIGHTSPEED
+//#define DISABLE_TAPWAVE
+//#define REDUCE_MEMORY_USAGE
+
+//#define _DEBUG
+
+#endif
diff --git a/backends/platform/PalmOS/Src/prefixes/native_agi.h b/backends/platform/PalmOS/Src/prefixes/native_agi.h
new file mode 100644
index 0000000000..496cf7c85b
--- /dev/null
+++ b/backends/platform/PalmOS/Src/prefixes/native_agi.h
@@ -0,0 +1,7 @@
+#ifndef PREFIX_H
+#define PREFIX_H
+
+#include "native_common.h"
+#undef DISABLE_AGI
+
+#endif
diff --git a/backends/platform/PalmOS/Src/prefixes/native_cine.h b/backends/platform/PalmOS/Src/prefixes/native_cine.h
new file mode 100644
index 0000000000..212a5544d0
--- /dev/null
+++ b/backends/platform/PalmOS/Src/prefixes/native_cine.h
@@ -0,0 +1,7 @@
+#ifndef PREFIX_H
+#define PREFIX_H
+
+#include "native_common.h"
+#undef DISABLE_CINE
+
+#endif
diff --git a/backends/platform/PalmOS/Src/prefixes/native_common.h b/backends/platform/PalmOS/Src/prefixes/native_common.h
new file mode 100644
index 0000000000..c04f5e1538
--- /dev/null
+++ b/backends/platform/PalmOS/Src/prefixes/native_common.h
@@ -0,0 +1,21 @@
+#ifndef ZNATIVE_COMMON_H
+#define ZNATIVE_COMMON_H
+
+#include "compile.h"
+#include "palmmad.h"
+#include "palmtremor.h"
+
+#define __TWNEW_H__
+
+#define PALMOS_ARM
+#define DISABLE_LIGHTSPEED
+
+#define USE_MAD
+#define USE_TREMOR
+//#define USE_VORBIS
+//#define USE_MPEG2
+
+// enable assert
+//#define _DEBUG
+
+#endif
diff --git a/backends/platform/PalmOS/Src/prefixes/native_gob.h b/backends/platform/PalmOS/Src/prefixes/native_gob.h
new file mode 100644
index 0000000000..16863cd5b6
--- /dev/null
+++ b/backends/platform/PalmOS/Src/prefixes/native_gob.h
@@ -0,0 +1,7 @@
+#ifndef PREFIX_H
+#define PREFIX_H
+
+#include "native_common.h"
+#undef DISABLE_GOB
+
+#endif
diff --git a/backends/platform/PalmOS/Src/prefixes/native_kyra.h b/backends/platform/PalmOS/Src/prefixes/native_kyra.h
new file mode 100644
index 0000000000..7f6dd57565
--- /dev/null
+++ b/backends/platform/PalmOS/Src/prefixes/native_kyra.h
@@ -0,0 +1,7 @@
+#ifndef PREFIX_H
+#define PREFIX_H
+
+#include "native_common.h"
+#undef DISABLE_KYRA
+
+#endif
diff --git a/backends/platform/PalmOS/Src/prefixes/native_lure.h b/backends/platform/PalmOS/Src/prefixes/native_lure.h
new file mode 100644
index 0000000000..1d9005045c
--- /dev/null
+++ b/backends/platform/PalmOS/Src/prefixes/native_lure.h
@@ -0,0 +1,7 @@
+#ifndef PREFIX_H
+#define PREFIX_H
+
+#include "native_common.h"
+#undef DISABLE_LURE
+
+#endif
diff --git a/backends/platform/PalmOS/Src/prefixes/native_queen.h b/backends/platform/PalmOS/Src/prefixes/native_queen.h
new file mode 100644
index 0000000000..d2a1b44ef8
--- /dev/null
+++ b/backends/platform/PalmOS/Src/prefixes/native_queen.h
@@ -0,0 +1,7 @@
+#ifndef PREFIX_H
+#define PREFIX_H
+
+#include "native_common.h"
+#undef DISABLE_QUEEN
+
+#endif
diff --git a/backends/platform/PalmOS/Src/prefixes/native_saga.h b/backends/platform/PalmOS/Src/prefixes/native_saga.h
new file mode 100644
index 0000000000..1a728e6bcb
--- /dev/null
+++ b/backends/platform/PalmOS/Src/prefixes/native_saga.h
@@ -0,0 +1,7 @@
+#ifndef PREFIX_H
+#define PREFIX_H
+
+#include "native_common.h"
+#undef DISABLE_SAGA
+
+#endif
diff --git a/backends/platform/PalmOS/Src/prefixes/native_scumm.h b/backends/platform/PalmOS/Src/prefixes/native_scumm.h
new file mode 100644
index 0000000000..196628909a
--- /dev/null
+++ b/backends/platform/PalmOS/Src/prefixes/native_scumm.h
@@ -0,0 +1,9 @@
+#ifndef PREFIX_H
+#define PREFIX_H
+
+#include "native_common.h"
+#undef DISABLE_SCUMM
+#undef DISABLE_SCUMM_7_8
+#undef DISABLE_HE
+
+#endif
diff --git a/backends/platform/PalmOS/Src/prefixes/native_simon.h b/backends/platform/PalmOS/Src/prefixes/native_simon.h
new file mode 100644
index 0000000000..b3c6710141
--- /dev/null
+++ b/backends/platform/PalmOS/Src/prefixes/native_simon.h
@@ -0,0 +1,7 @@
+#ifndef PREFIX_H
+#define PREFIX_H
+
+#include "native_common.h"
+#undef DISABLE_SIMON
+
+#endif
diff --git a/backends/platform/PalmOS/Src/prefixes/native_sky.h b/backends/platform/PalmOS/Src/prefixes/native_sky.h
new file mode 100644
index 0000000000..193c57e87d
--- /dev/null
+++ b/backends/platform/PalmOS/Src/prefixes/native_sky.h
@@ -0,0 +1,7 @@
+#ifndef PREFIX_H
+#define PREFIX_H
+
+#include "native_common.h"
+#undef DISABLE_SKY
+
+#endif
diff --git a/backends/platform/PalmOS/Src/prefixes/native_sword1.h b/backends/platform/PalmOS/Src/prefixes/native_sword1.h
new file mode 100644
index 0000000000..8e52a978a8
--- /dev/null
+++ b/backends/platform/PalmOS/Src/prefixes/native_sword1.h
@@ -0,0 +1,9 @@
+#ifndef PREFIX_H
+#define PREFIX_H
+
+#include "native_common.h"
+#undef DISABLE_SWORD1
+#define USE_MPEG2
+#define USE_VORBIS
+
+#endif
diff --git a/backends/platform/PalmOS/Src/prefixes/native_sword2.h b/backends/platform/PalmOS/Src/prefixes/native_sword2.h
new file mode 100644
index 0000000000..f74a8bcc9a
--- /dev/null
+++ b/backends/platform/PalmOS/Src/prefixes/native_sword2.h
@@ -0,0 +1,10 @@
+#ifndef PREFIX_H
+#define PREFIX_H
+
+#include "native_common.h"
+#undef DISABLE_SWORD2
+#undef _DEBUG
+#define USE_MPEG2
+#define USE_VORBIS
+
+#endif
diff --git a/backends/platform/PalmOS/Src/prefixes/prefix_frontend.h b/backends/platform/PalmOS/Src/prefixes/prefix_frontend.h
new file mode 100644
index 0000000000..6c7d749539
--- /dev/null
+++ b/backends/platform/PalmOS/Src/prefixes/prefix_frontend.h
@@ -0,0 +1,8 @@
+#ifndef PREFIX_H
+#define PREFIX_H
+
+#define PALMOS_68K
+#define PALMOS_MODE
+//#define _DEBUG_ENGINE
+
+#endif
diff --git a/backends/platform/PalmOS/Src/prefixes/prefix_os5.h b/backends/platform/PalmOS/Src/prefixes/prefix_os5.h
new file mode 100644
index 0000000000..a039002840
--- /dev/null
+++ b/backends/platform/PalmOS/Src/prefixes/prefix_os5.h
@@ -0,0 +1,11 @@
+#ifndef PREFIX_H
+#define PREFIX_H
+
+// PalmOS
+#define PALMOS_MODE
+#define PALMOS_68K
+#define PALMOS_NATIVE
+
+#define COMPILE_OS5
+
+#endif
diff --git a/backends/platform/PalmOS/Src/prefixes/prefix_zodiac.h b/backends/platform/PalmOS/Src/prefixes/prefix_zodiac.h
new file mode 100644
index 0000000000..708166d998
--- /dev/null
+++ b/backends/platform/PalmOS/Src/prefixes/prefix_zodiac.h
@@ -0,0 +1,11 @@
+#ifndef PREFIX_H
+#define PREFIX_H
+
+// PalmOS
+#define PALMOS_MODE
+#define PALMOS_68K
+#define PALMOS_NATIVE
+
+#define COMPILE_ZODIAC
+
+#endif
diff --git a/backends/platform/PalmOS/Src/rumble.cpp b/backends/platform/PalmOS/Src/rumble.cpp
new file mode 100644
index 0000000000..e868f25a04
--- /dev/null
+++ b/backends/platform/PalmOS/Src/rumble.cpp
@@ -0,0 +1,139 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 <PalmOS.h>
+#include "globals.h"
+#include "vibrate.h"
+#include "rumble.h"
+
+#ifndef DISABLE_TAPWAVE
+#include "tapwave.h"
+
+TwDeviceHandle hRumble;
+#endif
+
+Boolean RumbleExists() {
+ Boolean exists = false;
+ Err e;
+
+#ifndef DISABLE_TAPWAVE
+ if (OPTIONS_TST(kOptDeviceZodiac)) {
+ e = TwDeviceOpen(&hRumble, "vibrator0", "w");
+ if (!e) {
+ exists = true;
+ TwDeviceClose(hRumble);
+ }
+
+ } else
+#endif
+ {
+#ifndef PALMOS_ARM
+
+ UInt32 romVersion;
+
+ e = FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion);
+ if (!e) {
+ if (romVersion >= sysMakeROMVersion(4,0,0,sysROMStageRelease,0)) {
+ Boolean active = false;
+ e = HwrVibrateAttributes(0, kHwrVibrateActive, &active);
+ exists = (!e) ? true : exists;
+ }
+ }
+#endif
+ }
+
+
+ return exists;
+}
+
+void RumbleRun(Boolean active) {
+#ifndef DISABLE_TAPWAVE
+ if (OPTIONS_TST(kOptDeviceZodiac)) {
+ if (active) {
+ UInt8 buf[] = { '\64', '\100' };
+ TwDeviceControl(hRumble, 'play', buf, sizeof(buf));
+ } else {
+ TwDeviceControl(hRumble, 'stop', 0, 0);
+ }
+
+ } else
+#endif
+ {
+#ifndef PALMOS_ARM
+ UInt32 pattern = active ? 0xFF000000 : 0x00000000;
+
+ HwrVibrateAttributes(1, kHwrVibratePattern, &pattern);
+ HwrVibrateAttributes(1, kHwrVibrateActive, &active);
+#endif
+ }
+
+}
+
+Boolean RumbleInit() {
+ Boolean done = false;
+
+#ifndef DISABLE_TAPWAVE
+ if (OPTIONS_TST(kOptDeviceZodiac)) {
+ Err e = TwDeviceOpen(&hRumble, "vibrator0", "w");
+ done = (!e);
+
+ } else
+#endif
+ {
+#ifndef PALMOS_ARM
+ if (RumbleExists()) {
+ UInt16 cycle = (SysTicksPerSecond())/2;
+ UInt32 pattern = 0xFF000000;
+ UInt16 delay = 1;
+ UInt16 repeat = 1;
+
+ HwrVibrateAttributes(1, kHwrVibrateRate, &cycle);
+ HwrVibrateAttributes(1, kHwrVibratePattern, &pattern);
+ HwrVibrateAttributes(1, kHwrVibrateDelay, &delay);
+ HwrVibrateAttributes(1, kHwrVibrateRepeatCount, &repeat);
+
+ done = true;
+ }
+#endif
+ }
+ return done;
+}
+
+void RumbleRelease() {
+#ifndef DISABLE_TAPWAVE
+ if (OPTIONS_TST(kOptDeviceZodiac)) {
+ TwDeviceClose(hRumble);
+
+ } else
+#endif
+ {
+#ifndef PALMOS_ARM
+ UInt32 pattern = 0x00000000;
+ Boolean active = false;
+
+ HwrVibrateAttributes(1, kHwrVibratePattern, &pattern);
+ HwrVibrateAttributes(1, kHwrVibrateActive, &active);
+#endif
+ }
+} \ No newline at end of file
diff --git a/backends/platform/PalmOS/Src/rumble.h b/backends/platform/PalmOS/Src/rumble.h
new file mode 100644
index 0000000000..d9e8e5b951
--- /dev/null
+++ b/backends/platform/PalmOS/Src/rumble.h
@@ -0,0 +1,33 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 __RUMBLE_H__
+#define __RUMBLE_H__
+
+Boolean RumbleExists ();
+void RumbleRun (Boolean active);
+Boolean RumbleInit ();
+void RumbleRelease ();
+
+#endif \ No newline at end of file
diff --git a/backends/platform/PalmOS/Src/scumm_globals.cpp b/backends/platform/PalmOS/Src/scumm_globals.cpp
new file mode 100644
index 0000000000..a8fc5c67a6
--- /dev/null
+++ b/backends/platform/PalmOS/Src/scumm_globals.cpp
@@ -0,0 +1,155 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 <PalmOS.h>
+
+#include "palmdefs.h"
+#include "globals.h"
+#include "scumm_globals.h"
+
+static void GlbInitAll() {
+ if (gVars->globals[GBVARS_COMMON]) {
+ CALL_INIT(ScummFont)
+ }
+ if (gVars->globals[GBVARS_ENGINE]) {
+#ifndef DISABLE_SCUMM
+# ifndef DISABLE_SCUMM_7_8
+ CALL_INIT(DimuseTables)
+ CALL_INIT(DimuseCodecs)
+ CALL_INIT(Codec47)
+# endif
+ CALL_INIT(Akos)
+ CALL_INIT(Gfx)
+ CALL_INIT(Dialogs)
+ CALL_INIT(Charset)
+ CALL_INIT(Costume)
+ CALL_INIT(PlayerV2)
+ CALL_INIT(Scumm_md5table)
+#endif
+#ifndef DISABLE_SIMON
+ CALL_INIT(Simon_Simon)
+ CALL_INIT(Simon_Cursor)
+ CALL_INIT(Simon_Charset)
+#endif
+#ifndef DISABLE_SKY
+ CALL_INIT(Sky_Hufftext)
+#endif
+#ifndef DISABLE_SWORD1
+ CALL_INIT(Sword1_fxList)
+#endif
+#ifndef DISABLE_QUEEN
+ CALL_INIT(Queen_Talk)
+ CALL_INIT(Queen_Display)
+ CALL_INIT(Queen_Graphics)
+ CALL_INIT(Queen_Restables)
+ CALL_INIT(Queen_Musicdata)
+#endif
+ }
+}
+
+static void GlbReleaseAll() {
+ if (gVars->globals[GBVARS_COMMON]) {
+ CALL_RELEASE(ScummFont)
+
+ }
+ if (gVars->globals[GBVARS_SCUMM]) {
+#ifndef DISABLE_SCUMM
+# ifndef DISABLE_SCUMM_7_8
+ CALL_RELEASE(DimuseTables)
+ CALL_RELEASE(DimuseCodecs)
+ CALL_RELEASE(Codec47)
+# endif
+ CALL_RELEASE(Akos)
+ CALL_RELEASE(Gfx)
+ CALL_RELEASE(Dialogs)
+ CALL_RELEASE(Charset)
+ CALL_RELEASE(Costume)
+ CALL_RELEASE(PlayerV2)
+ CALL_RELEASE(Scumm_md5table)
+#endif
+#ifndef DISABLE_SIMON
+ CALL_RELEASE(Simon_Simon)
+ CALL_RELEASE(Simon_Cursor)
+ CALL_RELEASE(Simon_Charset)
+#endif
+#ifndef DISABLE_SKY
+ CALL_RELEASE(Sky_Hufftext)
+#endif
+#ifndef DISABLE_SWORD1
+ CALL_RELEASE(Sword1_fxList)
+#endif
+#ifndef DISABLE_QUEEN
+ CALL_RELEASE(Queen_Talk)
+ CALL_RELEASE(Queen_Display)
+ CALL_RELEASE(Queen_Graphics)
+ CALL_RELEASE(Queen_Restables)
+ CALL_RELEASE(Queen_Musicdata)
+#endif
+ }
+}
+
+//TODO : use Boolean instead of void to check err
+static DmOpenRef GlbOpenInternal(const Char *nameP) {
+ LocalID dbID = DmFindDatabase(0, nameP);
+ if (dbID) {
+ UInt32 dbType, dbCreator;
+ Err e = DmDatabaseInfo(0, dbID, 0, 0, 0, 0, 0, 0, 0, 0, 0, &dbType, &dbCreator);
+
+ if (!e && dbType == 'GLBS' && dbCreator == appFileCreator)
+ return DmOpenDatabase(0, dbID, dmModeReadOnly);
+ }
+ return NULL;
+}
+
+void GlbOpen() {
+ gVars->globals[GBVARS_COMMON] = GlbOpenInternal("Glbs::Common");
+ gVars->globals[GBVARS_ENGINE] = GlbOpenInternal("Glbs::Engine");
+ GlbInitAll();
+}
+
+void GlbClose() {
+ GlbReleaseAll();
+
+ if (gVars->globals[GBVARS_COMMON])
+ DmCloseDatabase(gVars->globals[GBVARS_COMMON]);
+ if (gVars->globals[GBVARS_ENGINE])
+ DmCloseDatabase(gVars->globals[GBVARS_ENGINE]);
+}
+
+void *GlbGetRecord(UInt16 index, UInt16 id) {
+ if (gVars->globals[id]) {
+ MemHandle recordH = DmQueryRecord(gVars->globals[id], index);
+ if (recordH)
+ return MemHandleLock(recordH);
+ }
+ return NULL;
+}
+
+void GlbReleaseRecord(UInt16 index, UInt16 id) {
+ if (gVars->globals[id]) {
+ MemHandle recordH = DmQueryRecord(gVars->globals[id], index);
+ if (recordH)
+ MemHandleUnlock(recordH);
+ }
+}
diff --git a/backends/platform/PalmOS/Src/scumm_globals.h b/backends/platform/PalmOS/Src/scumm_globals.h
new file mode 100644
index 0000000000..3308c54a73
--- /dev/null
+++ b/backends/platform/PalmOS/Src/scumm_globals.h
@@ -0,0 +1,91 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 __SCUMM_GLOBALS_H__
+#define __SCUMM_GLOBALS_H__
+
+#include "builder/enum_globals.h"
+
+void *GlbGetRecord(UInt16 index, UInt16 id);
+void GlbReleaseRecord(UInt16 index, UInt16 id);
+void GlbOpen();
+void GlbClose();
+
+
+#define _GINIT(x) void initGlobals_##x() {
+#define _GEND }
+#define _GRELEASE(x) void releaseGlobals_##x() {
+
+#define CALL_INIT(x) initGlobals_##x();
+#define CALL_RELEASE(x) releaseGlobals_##x();
+
+#define _GSETPTR(var,index,format,id) var = (format *)GlbGetRecord(index,id);
+#define _GRELEASEPTR(index,id) GlbReleaseRecord(index,id);
+
+#define PROTO_GLOBALS(x) void CALL_INIT(x);\
+ void CALL_RELEASE(x);
+
+
+// Common stuffs
+PROTO_GLOBALS(ScummFont)
+
+// Scumm stuffs
+#ifndef DISABLE_SCUMM
+PROTO_GLOBALS(DimuseTables)
+PROTO_GLOBALS(Akos)
+PROTO_GLOBALS(DimuseCodecs)
+PROTO_GLOBALS(Codec47)
+PROTO_GLOBALS(Gfx)
+PROTO_GLOBALS(Dialogs)
+PROTO_GLOBALS(Charset)
+PROTO_GLOBALS(Costume)
+PROTO_GLOBALS(PlayerV2)
+PROTO_GLOBALS(Scumm_md5table)
+#endif
+// Simon stuffs
+#ifndef DISABLE_SIMON
+PROTO_GLOBALS(Simon_Simon)
+PROTO_GLOBALS(Simon_Cursor)
+PROTO_GLOBALS(Simon_Charset)
+#endif
+// Sky stuffs
+#ifndef DISABLE_SKY
+PROTO_GLOBALS(Sky_Hufftext)
+#endif
+// Queen stuffs
+#ifndef DISABLE_QUEEN
+PROTO_GLOBALS(Queen_Talk)
+PROTO_GLOBALS(Queen_Display)
+PROTO_GLOBALS(Queen_Graphics)
+PROTO_GLOBALS(Queen_Restables)
+PROTO_GLOBALS(Queen_Musicdata)
+#endif
+// Sword1 stuffs
+#ifndef DISABLE_SWORD1
+PROTO_GLOBALS(Sword1_fxList)
+#endif
+
+#undef PROTO_GLOBALS
+
+#endif
diff --git a/backends/platform/PalmOS/Src/snd_pa1.cpp b/backends/platform/PalmOS/Src/snd_pa1.cpp
new file mode 100644
index 0000000000..ca64825fe6
--- /dev/null
+++ b/backends/platform/PalmOS/Src/snd_pa1.cpp
@@ -0,0 +1,113 @@
+#include <stdlib.h>
+
+#include "native.h"
+#include "globals.h"
+
+#ifdef COMPILE_PA1SND
+# include <endianutils.h>
+#endif
+
+
+static Int32 diffLookup[16] = {
+ 1,3,5,7,9,11,13,15,
+ -1,-3,-5,-7,-9,-11,-13,-15,
+};
+
+static Int32 indexScale[16] = {
+ 0x0e6, 0x0e6, 0x0e6, 0x0e6, 0x133, 0x199, 0x200, 0x266,
+ 0x0e6, 0x0e6, 0x0e6, 0x0e6, 0x133, 0x199, 0x200, 0x266 /* same value for speedup */
+};
+
+static int limit(int val,int min,int max) {
+ if (val<min) return min;
+ else if (val>max) return max;
+ else return val;
+}
+
+void pcm2adpcm(Int16 *src, UInt8 *dst, UInt32 length) {
+#ifndef COMPILE_PA1SND
+/*
+ if (OPTIONS_TST(kOptDeviceARM)) {
+ PnoDescriptor pno;
+ ARMPa1SndType userData = {src, dst, length};
+
+ MemPtr armP = _PnoInit(ARM_PA1SND, &pno);
+ _PnoCall(&pno, &userData);
+ _PnoFree(&pno, armP);
+
+ return;
+ }
+*/
+ int data,val,diff;
+ int signal,step;
+#else
+ long chan1, chan2;
+ long data,val,diff;
+ long signal,step;
+#endif
+
+ signal = 0;
+ step = 0x7F;
+ length >>= 3; // 16bit stereo -> 4bit mono
+
+ do {
+
+ // high nibble
+#ifdef COMPILE_PA1SND
+ chan1 = ByteSwap16(*src);
+ src++;
+ chan2 = ByteSwap16(*src);
+ src++;
+
+ diff = ((chan1 + chan2) >> 1) - signal;
+#else
+ diff = ((*src++ + *src++) >> 1) - signal;
+#endif
+ diff <<= 3;
+ diff /= step;
+
+ val = abs(diff) >> 1;
+
+ if (val > 7) val = 7;
+ if (diff < 0) val+= 8;
+
+ signal+= (step * diffLookup[val]) >> 3;
+ signal = limit(signal, -32768, 32767);
+
+ step = (step * indexScale[val]) >> 8;
+ step = limit(step, 0x7F, 0x6000);
+
+ data = val;
+
+ // low nibble
+#ifdef COMPILE_PA1SND
+ chan1 = ByteSwap16(*src);
+ src++;
+ chan2 = ByteSwap16(*src);
+ src++;
+
+ diff = ((chan1 + chan2) >> 1) - signal;
+#else
+ diff = ((*src++ + *src++) >> 1) - signal;
+#endif
+ diff <<= 3;
+ diff /= step;
+
+ val = abs(diff) >> 1;
+
+ if (val > 7) val = 7;
+ if (diff < 0) val+= 8;
+
+ signal+= (step * diffLookup[val]) >> 3;
+ signal = limit(signal, -32768, 32767);
+
+ step = (step * indexScale[val]) >> 8;
+ step = limit(step, 0x7F, 0x6000);
+
+ data |= val << 4;
+
+ *dst++ = (UInt8)data;
+
+ } while(--length);
+
+}
diff --git a/backends/platform/PalmOS/Src/stuffs.h b/backends/platform/PalmOS/Src/stuffs.h
new file mode 100644
index 0000000000..b6f5a3f38b
--- /dev/null
+++ b/backends/platform/PalmOS/Src/stuffs.h
@@ -0,0 +1,31 @@
+#ifndef STUFFS_H
+#define STUFFS_H
+
+enum {
+ kOptNone = 0,
+ kOptDeviceARM = 1 << 0x00,
+ kOptDeviceOS5 = 1 << 0x01,
+ kOptDeviceClie = 1 << 0x02,
+ kOptDeviceZodiac = 1 << 0x03,
+ kOptModeWide = 1 << 0x04,
+ kOptModeLandscape = 1 << 0x05,
+ kOptMode16Bit = 1 << 0x06,
+ kOptModeHiDensity = 1 << 0x07,
+ kOptCollapsible = 1 << 0x08,
+ kOptDisableOnScrDisp = 1 << 0x09,
+ kOpt5WayNavigatorV1 = 1 << 0x0A,
+ kOpt5WayNavigatorV2 = 1 << 0x0B,
+ kOptPalmSoundAPI = 1 << 0x0C,
+ kOptSonyPa1LibAPI = 1 << 0x0D,
+ kOptGoLcdAPI = 1 << 0x0E,
+ kOptLightspeedAPI = 1 << 0x0F,
+
+ kOptDeviceProcX86 = 1 << 0x1F // DEBUG only
+};
+
+// WARNING : you need to define OPTIONS_DEF()
+#define OPTIONS_TST(x) (OPTIONS_DEF() & (x))
+#define OPTIONS_SET(x) OPTIONS_DEF() |= (x)
+#define OPTIONS_RST(x) OPTIONS_DEF() &= ~(x)
+
+#endif
diff --git a/backends/platform/PalmOS/Src/vibrate.h b/backends/platform/PalmOS/Src/vibrate.h
new file mode 100644
index 0000000000..37604be5b7
--- /dev/null
+++ b/backends/platform/PalmOS/Src/vibrate.h
@@ -0,0 +1,61 @@
+/**********************************************************************
+** **
+** vibrate.h **
+** **
+** Definitions for setting/retrieving the state of the vibrator on **
+** PalmOS 4.x devices. These calls are not officially supported by **
+** Palm Inc and subsidiaries. It is not guaranteed that these calls **
+** will work at all or at least the same on every device. YOU ARE **
+** USING THESE ENTIRELY ON YOUR VERY OWN RISK ! **
+** **
+** Please send corrections to dseifert@dseifert.com **
+**********************************************************************/
+
+#include <PalmOS.h>
+
+/* HwrVibrateAttributes takes three arguments:
+** Boolean set Should the setting be set (1) or retrieved (0)
+** UInt32 setting what should be set
+** void* value pointer to the value to set, or to store the
+** retrieved setting
+*/
+
+Err HwrVibrateAttributes(Boolean set, UInt32 setting, void *value)
+ SYS_TRAP(sysTrapHwrVibrateAttributes);
+
+/* to determine whether the vibrator is supported on a specific device, you
+** need to make sure that you are running on PalmOS 4.x (so that the
+** trap exists), that the attention manager exists and you need to check
+** whether HwrVibrateAttributes(0, 1, &active) returns an error code of
+** 0. ('active' is a Boolean).
+*/
+
+
+/***************************************************************/
+/* For the second parameter, the following defines can be used */
+/***************************************************************/
+
+/* *value points to a Boolean stating the state of the vibrator */
+#define kHwrVibrateActive 1
+
+/* *value points to a UInt16, specifying the length of one cycle.
+** value is in ticks (1/100 seconds) */
+#define kHwrVibrateRate 2
+
+/* *value points to a UInt32, specifying the pattern of vibrating
+**
+** example:
+** 0xFFFFFFFF stay on, no vibrating
+** 0x0F0F0F0F vibrate four times in equal intervals
+** 0xAAAAAAAA vibrate really fast (not recommended)
+** 0x0F0F0000 vibrate twice, then pause
+*/
+#define kHwrVibratePattern 3
+
+/* *value points to a UInt16, specifying the delay between two
+** cycles in ticks */
+#define kHwrVibrateDelay 4
+
+/* *value points to a UInt16 specifying the amount of repeats. */
+#define kHwrVibrateRepeatCount 5
+
diff --git a/backends/platform/PalmOS/Src/zodiac_event.cpp b/backends/platform/PalmOS/Src/zodiac_event.cpp
new file mode 100644
index 0000000000..68afbe87a9
--- /dev/null
+++ b/backends/platform/PalmOS/Src/zodiac_event.cpp
@@ -0,0 +1,124 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2005 Chris Apers - PalmOS Backend
+ *
+ * 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 "be_zodiac.h"
+
+void OSystem_PalmZodiac::get_coordinates(EventPtr ev, Coord &x, Coord &y) {
+ Boolean dummy;
+ EvtGetPenNative(WinGetDisplayWindow(), &ev->screenX, &ev->screenY, &dummy);
+
+ x = (ev->screenX - _screenOffset.x);
+ y = (ev->screenY - _screenOffset.y);
+
+ if (_stretched) {
+ Int32 w, h;
+
+ if (_mode == GFX_NORMAL) {
+
+ h = gVars->screenHeight - MIN_OFFSET * 2;
+ w = gVars->screenWidth;
+ x = (_screenWidth * x) / w;
+ y = (_screenHeight * y) / h;
+
+ } else {
+
+ h = (_ratio.adjustAspect == kRatioHeight ? _ratio.height : gVars->screenFullHeight);
+ w = (_ratio.adjustAspect == kRatioWidth ? _ratio.width : gVars->screenFullWidth);
+ x = (_screenWidth * x) / w;
+ y = (_screenHeight * y) / h;
+ }
+ }
+}
+
+bool OSystem_PalmZodiac::check_event(Event &event, EventPtr ev) {
+ if (ev->eType == keyDownEvent) {
+ switch (ev->data.keyDown.chr) {
+ // F5 = menu
+ case vchrThumbWheelBack:
+ _lastKey = kKeyNone;
+ event.type = EVENT_KEYDOWN;
+ event.kbd.keycode = 319;
+ event.kbd.ascii = 319;
+ event.kbd.flags = 0;
+ return true;
+
+ case vchrTriggerLeft:
+ hotswap_gfx_mode(_mode == GFX_WIDE ? GFX_NORMAL: GFX_WIDE);
+ return false; // not a key
+
+ case vchrTriggerRight:
+ setFeatureState(kFeatureAspectRatioCorrection, 0);
+ return false; // not a key
+
+ case vchrActionLeft:
+ _lastKey = kKeyMouseLButton;
+ event.type = EVENT_LBUTTONDOWN;
+ event.mouse.x = _mouseCurState.x;
+ event.mouse.y = _mouseCurState.y;
+ return true;
+
+ case vchrActionRight:
+ _lastKey = kKeyNone;
+ event.type = EVENT_RBUTTONDOWN;
+ event.mouse.x = _mouseCurState.x;
+ event.mouse.y = _mouseCurState.y;
+ return true;
+
+ // skip text
+ case vchrActionDown:
+ event.type = EVENT_KEYDOWN;
+ event.kbd.keycode = '.';
+ event.kbd.ascii = '.';
+ event.kbd.flags = 0;
+ return true;
+
+ // trun off
+ case vchrAutoOff:
+ case vchrPowerOff:
+ // pause the sound thread if any
+ if (_sound.active)
+ SndStreamPause(_soundEx.handle, true);
+ break;
+
+ case vchrLateWakeup:
+ // resume the sound thread if any
+ if (_sound.active)
+ SndStreamPause(_soundEx.handle, false);
+ break;
+ }
+
+ } else if (_overlayVisible) {
+ switch (_lastKey) {
+ case kKeyMouseLButton:
+ _lastKey = kKeyNone;
+ event.type = EVENT_LBUTTONUP;
+ event.mouse.x = _mouseCurState.x;
+ event.mouse.y = _mouseCurState.y;
+ return true;
+
+ }
+ }
+
+ return false;
+}
diff --git a/backends/platform/PalmOS/Src/zodiac_gfx.cpp b/backends/platform/PalmOS/Src/zodiac_gfx.cpp
new file mode 100644
index 0000000000..bb70983e79
--- /dev/null
+++ b/backends/platform/PalmOS/Src/zodiac_gfx.cpp
@@ -0,0 +1,322 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 "be_zodiac.h"
+#include "common/config-manager.h"
+#include "graphics/surface.h"
+#include "rumble.h"
+
+#ifdef PALMOS_68K
+#define _TwGfxOpen(x, y) TwGfxOpen((TwGfxHandle*)x, y);
+#else
+static asm Err _TwGfxOpen(void **aResult, void *aInfoResult) {
+ stmfd sp!, {r4-r11,lr}
+ ldr r9, [r9]
+ ldr r9, [r9]
+ sub sp, sp, #0x24
+ mov r6, r0
+ mov r7, r1
+ ldr pc, =0x200995F0
+}
+#endif
+
+int OSystem_PalmZodiac::getDefaultGraphicsMode() const {
+ return GFX_WIDE;
+}
+
+void OSystem_PalmZodiac::load_gfx_mode() {
+ Err e;
+
+ if (_gfxLoaded)
+ return;
+ _gfxLoaded = true;
+
+ // get command line config
+ _fullscreen = ConfMan.getBool("fullscreen"); // TODO : (NORMAL mode)
+ _ratio.adjustAspect = ConfMan.getBool("aspect_ratio") ? kRatioHeight : kRatioNone;
+
+ // precalc ratio (WIDE mode)
+ _ratio.width = ((float)_screenWidth / _screenHeight * gVars->screenFullHeight);
+ _ratio.height = ((float)_screenHeight / _screenWidth * gVars->screenFullWidth);
+
+ _sysOldOrientation = SysGetOrientation();
+ SysSetOrientation(sysOrientationLandscape);
+
+ _mouseBackupP = (byte *)MemPtrNew(MAX_MOUSE_W * MAX_MOUSE_H * 2); // *2 if 16bit
+ _mouseDataP = (byte *)MemPtrNew(MAX_MOUSE_W * MAX_MOUSE_H);
+ _offScreenP = (byte *)MemPtrNew(_screenWidth * _screenHeight);
+
+ MemSet(_offScreenP, _screenWidth * _screenHeight, 0);
+ MemSet(_nativePal, sizeof(_nativePal), 0);
+ MemSet(_currentPalette, sizeof(_currentPalette), 0);
+
+ UInt32 depth = 16;
+ WinScreenMode(winScreenModeSet, NULL, NULL, &depth, NULL);
+
+ gVars->indicator.on = RGBToColor(0,255,0);
+ gVars->indicator.off = RGBToColor(0,0,0);
+
+ _screenH = WinGetDisplayWindow();
+ _screenP = (byte *)BmpGetBits(WinGetBitmap(_screenH));
+
+ e = _TwGfxOpen((void **)&_gfxH, 0);
+ e = TwGfxGetPalmDisplaySurface(_gfxH, &_palmScreenP);
+
+ // overlay buffer
+ TwGfxSurfaceInfoType nfo = {
+ sizeof(TwGfxSurfaceInfoType),
+ _screenWidth, _screenHeight, _screenWidth * 2,
+ twGfxLocationAcceleratorMemory,
+ twGfxPixelFormatRGB565_LE
+ };
+ e = TwGfxAllocSurface(_gfxH, &_overlayP, &nfo);
+
+ // prepare main bitmap
+ _srcBmp.size = sizeof(TwGfxBitmapType);
+ _srcBmp.width = _screenWidth;
+ _srcBmp.height = _screenHeight;
+ _srcBmp.rowBytes = _screenWidth;
+ _srcBmp.pixelFormat = twGfxPixelFormat8bpp;
+ _srcBmp.data = _offScreenP;
+ _srcBmp.palette = _nativePal;
+
+ _srcRect.x = 0;
+ _srcRect.y = 0;
+ _srcRect.w = _screenWidth;
+ _srcRect.h = _screenHeight;
+
+ hotswap_gfx_mode(_mode);
+}
+
+void OSystem_PalmZodiac::hotswap_gfx_mode(int mode) {
+ Err e;
+ TwGfxSetClip(_palmScreenP, 0);
+ WinSetDrawWindow(_screenH);
+
+ _screenDest.w = _screenWidth;
+ _screenDest.h = _screenHeight;
+
+ // prevent bad DIA redraw (Stat part)
+ if (mode == GFX_NORMAL) {
+ _redawOSD = true;
+ _stretched = (_screenWidth > gVars->screenWidth);
+ StatShow();
+ PINSetInputAreaState(pinInputAreaOpen);
+
+ if (_stretched) {
+ calc_rect(false);
+ } else {
+ // offsets
+ _screenOffset.x = (gVars->screenWidth - _screenWidth) / 2;
+ _screenOffset.y = (gVars->screenHeight - _screenHeight) / 2;
+
+ // clip Tapwave API
+ TwGfxRectType rt = { _screenOffset.x, _screenOffset.y, _screenWidth, _screenHeight };
+ TwGfxSetClip(_palmScreenP, &rt);
+ }
+
+ } else {
+ _redawOSD = false;
+ _stretched = true;
+ PINSetInputAreaState(pinInputAreaClosed);
+ StatHide();
+
+ calc_rect(true);
+ }
+
+ if (_stretched) {
+ OPTIONS_SET(kOptDisableOnScrDisp);
+ TwGfxSetClip(_palmScreenP, &_dstRect);
+
+ if (!_tmpScreenP) {
+ // wide buffer
+ TwGfxSurfaceInfoType nfo = {
+ sizeof(TwGfxSurfaceInfoType),
+ _screenWidth, _screenHeight, _screenWidth * 2,
+ twGfxLocationAcceleratorMemory,
+ twGfxPixelFormatRGB565_LE
+ };
+ e = TwGfxAllocSurface(_gfxH, &_tmpScreenP, &nfo);
+ }
+ } else {
+ OPTIONS_RST(kOptDisableOnScrDisp);
+ if (_tmpScreenP) {
+ e = TwGfxFreeSurface(_tmpScreenP);
+ _tmpScreenP = NULL;
+ }
+ }
+
+ _mode = mode;
+ _srcPos.x = _screenOffset.x;
+ _srcPos.y = _screenOffset.y;
+ clearScreen();
+// updateScreen();
+}
+
+void OSystem_PalmZodiac::unload_gfx_mode() {
+ Err e;
+
+ if (!_gfxLoaded)
+ return;
+ _gfxLoaded = false;
+
+ if (_tmpScreenP) {
+ e = TwGfxFreeSurface(_tmpScreenP);
+ _tmpScreenP = NULL;
+ }
+
+ e = TwGfxFreeSurface(_overlayP);
+ e = TwGfxClose(_gfxH);
+
+ UInt32 depth = 8;
+ WinScreenMode(winScreenModeSet, NULL, NULL, &depth, NULL);
+ clearScreen();
+
+ MemPtrFree(_mouseBackupP);
+ MemPtrFree(_mouseDataP);
+ MemPtrFree(_offScreenP);
+
+ SysSetOrientation(_sysOldOrientation);
+ StatShow();
+ PINSetInputAreaState(pinInputAreaOpen);
+}
+
+static void rumblePack(Boolean active) {
+ if (!gVars->vibrator)
+ return;
+
+ RumbleRun(active);
+}
+
+void OSystem_PalmZodiac::int_setShakePos(int shakeOffset) {
+ if (shakeOffset == 0)
+ rumblePack(false);
+}
+
+void OSystem_PalmZodiac::updateScreen() {
+ Err e;
+
+ // draw the mouse pointer
+ draw_mouse();
+ // update the screen
+ if (_overlayVisible) {
+ if (_stretched) {
+ TwGfxRectType dst = {_dstRect.x, _dstRect.y, _dstRect.w, _dstRect.h};
+ e = TwGfxStretchBlt2(_palmScreenP, &dst, _overlayP, &_srcRect, twGfxStretchFast| (gVars->filter ? twGfxStretchSmooth : 0));
+ } else {
+ e = TwGfxBitBlt(_palmScreenP, &_srcPos, _overlayP, &_srcRect);
+ }
+
+ } else {
+ if (_stretched) {
+ TwGfxPointType pos = {0, 0};
+ TwGfxRectType dst = {_dstRect.x, _dstRect.y, _dstRect.w, _dstRect.h};
+
+ if (_new_shake_pos != _current_shake_pos) {
+ TwGfxRectType r = { _screenOffset.x, _screenOffset.y, _dstRect.w, _new_shake_pos };
+
+ if (_new_shake_pos != 0) {
+ TwGfxFillRect(_palmScreenP, &r, 0);
+ rumblePack(_new_shake_pos >= 3);
+ }
+ r.y += dst.h;
+ r.h = _current_shake_pos;
+ TwGfxFillRect(_palmScreenP, &r, 0);
+
+ _current_shake_pos = _new_shake_pos;
+ dst.y += _new_shake_pos;
+ }
+ e = TwGfxDrawBitmap(_tmpScreenP, &pos, &_srcBmp);
+ e = TwGfxStretchBlt2(_palmScreenP, &dst, _tmpScreenP, &_srcRect, twGfxStretchFast| (gVars->filter ? twGfxStretchSmooth : 0));
+
+ } else {
+ TwGfxPointType pos = {_srcPos.x, _srcPos.y};
+
+ if (_new_shake_pos != _current_shake_pos) {
+ if (_new_shake_pos != 0) {
+ TwGfxRectType r = { _screenOffset.x, _screenOffset.y, _screenWidth, _new_shake_pos };
+ TwGfxFillRect(_palmScreenP, &r, 0);
+ rumblePack(_new_shake_pos >= 3);
+ }
+ _current_shake_pos = _new_shake_pos;
+ pos.y += _new_shake_pos;
+ }
+ e = TwGfxDrawBitmap(_palmScreenP, &pos, &_srcBmp);
+ }
+ }
+ undraw_mouse();
+}
+
+bool OSystem_PalmZodiac::grabRawScreen(Graphics::Surface *surf) {
+ assert(surf);
+
+ surf->create(_screenWidth, _screenHeight, 1);
+ MemMove(surf->pixels, _offScreenP, _screenWidth * _screenHeight);
+
+ return true;
+}
+
+void OSystem_PalmZodiac::extras_palette(uint8 index, uint8 r, uint8 g, uint8 b) {
+ _nativePal[index] = TwGfxMakeDisplayRGB( r, g, b);
+}
+
+void OSystem_PalmZodiac::draw_osd(UInt16 id, Int32 x, Int32 y, Boolean show, UInt8 color) {
+ if (_mode != GFX_NORMAL)
+ return;
+ MemHandle hTemp = DmGetResource(bitmapRsc, id + 100);
+
+ if (hTemp) {
+ RGBColorType oldRGB;
+ static const RGBColorType pal[4] = {
+ {0,0,255,0},
+ {0,255,255,0},
+ {0,255,0,0},
+ {0,0,0,0}
+ };
+
+ BitmapType *bmTemp;
+ bmTemp = (BitmapType *)MemHandleLock(hTemp);
+
+ Coord w, h;
+ WinGetBitmapDimensions(bmTemp, &w, &h); // return the size of the low density bmp
+
+ PointType dst = { _screenOffset.x + x, _screenOffset.y + y };
+ RectangleType c, r = { dst.x, dst.y, w * 2, h * 2 };
+
+ UInt16 old = WinSetCoordinateSystem(kCoordinatesNative);
+ WinSetDrawWindow(_screenH);
+ if (show) {
+ WinSetForeColorRGB(&pal[3], &oldRGB);
+ WinSetBackColorRGB(&pal[color], &oldRGB);
+ WinPaintBitmap(bmTemp, dst.x, dst.y);
+ } else {
+ WinSetBackColorRGB(&pal[3], &oldRGB);
+ WinFillRectangle(&r, 0);
+ }
+ WinSetCoordinateSystem(old);
+
+ MemPtrUnlock(bmTemp);
+ DmReleaseResource(hTemp);
+ }
+}
diff --git a/backends/platform/PalmOS/Src/zodiac_mouse.cpp b/backends/platform/PalmOS/Src/zodiac_mouse.cpp
new file mode 100644
index 0000000000..813da9d56a
--- /dev/null
+++ b/backends/platform/PalmOS/Src/zodiac_mouse.cpp
@@ -0,0 +1,153 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 "be_zodiac.h"
+
+void OSystem_PalmZodiac::draw_mouse() {
+ if (_mouseDrawn || !_mouseVisible)
+ return;
+
+ byte *src = _mouseDataP; // Image representing the mouse
+ byte color;
+ int width;
+
+ _mouseCurState.y = _mouseCurState.y >= _screenHeight ? _screenHeight - 1 : _mouseCurState.y;
+
+ int x = _mouseCurState.x - _mouseHotspotX;
+ int y = _mouseCurState.y - _mouseHotspotY;
+ int w = _mouseCurState.w;
+ int h = _mouseCurState.h;
+
+ int draw_x = x;
+ int draw_y = y;
+
+ // clip the mouse rect
+ if (x < 0) {
+ w += x;
+ src -= x;
+ x = 0;
+ }
+ if (y < 0) {
+ h += y;
+ src -= y * MAX_MOUSE_W;
+ y = 0;
+ }
+ if (w > _screenWidth - x)
+ w = _screenWidth - x;
+ if (h > _screenHeight - y)
+ h = _screenHeight - y;
+
+ // Quick check to see if anything has to be drawn at all
+ if (w <= 0 || h <= 0)
+ return;
+
+ // Store the bounding box so that undraw mouse can restore the area the
+ // mouse currently covers to its original content.
+ _mouseOldState.x = x;
+ _mouseOldState.y = y;
+ _mouseOldState.w = w;
+ _mouseOldState.h = h;
+
+ // Backup the covered area draw the mouse cursor
+ if (_overlayVisible) {
+ uint16 *bak = (uint16 *)_mouseBackupP; // Surface used to backup the area obscured by the mouse
+ uint16 *dst;
+
+ TwGfxLockSurface(_overlayP, (void **)&dst);
+ dst += y * _screenWidth + x;
+
+ do {
+ width = w;
+ do {
+ *bak++ = *dst;
+ color = *src++;
+ if (color != _mouseKeyColor) // transparent, don't draw
+ *dst = _nativePal[color];
+ dst++;
+ } while (--width);
+
+ src += MAX_MOUSE_W - w;
+ bak += MAX_MOUSE_W - w;
+ dst += _screenWidth - w;
+ } while (--h);
+
+ TwGfxUnlockSurface(_overlayP, true);
+
+ } else {
+ byte *bak = _mouseBackupP; // Surface used to backup the area obscured by the mouse
+ byte *dst =_offScreenP + y * _screenWidth + x; // Surface we are drawing into
+
+ do {
+ width = w;
+ do {
+ *bak++ = *dst;
+ color = *src++;
+ if (color != _mouseKeyColor) // transparent, don't draw
+ *dst = color;
+ dst++;
+ } while (--width);
+
+ src += MAX_MOUSE_W - w;
+ bak += MAX_MOUSE_W - w;
+ dst += _screenWidth - w;
+ } while (--h);
+ }
+
+ _mouseDrawn = true;
+}
+
+void OSystem_PalmZodiac::undraw_mouse() {
+ if (!_mouseDrawn)
+ return;
+
+ int h = _mouseOldState.h;
+ // No need to do clipping here, since draw_mouse() did that already
+ if (_overlayVisible) {
+ uint16 *bak = (uint16 *)_mouseBackupP;
+ uint16 *dst;
+
+ TwGfxLockSurface(_overlayP, (void **)&dst);
+ dst += _mouseOldState.y * _screenWidth + _mouseOldState.x;
+
+ do {
+ memcpy(dst, bak, _mouseOldState.w * 2);
+ bak += MAX_MOUSE_W;
+ dst += _screenWidth;
+ } while (--h);
+
+ TwGfxUnlockSurface(_overlayP, true);
+
+ } else {
+ byte *dst, *bak = _mouseBackupP;
+ dst = _offScreenP + _mouseOldState.y * _screenWidth + _mouseOldState.x;
+
+ do {
+ memcpy(dst, bak, _mouseOldState.w);
+ bak += MAX_MOUSE_W;
+ dst += _screenWidth;
+ } while (--h);
+ }
+
+ _mouseDrawn = false;
+}
diff --git a/backends/platform/PalmOS/Src/zodiac_overlay.cpp b/backends/platform/PalmOS/Src/zodiac_overlay.cpp
new file mode 100644
index 0000000000..d1b2f7a558
--- /dev/null
+++ b/backends/platform/PalmOS/Src/zodiac_overlay.cpp
@@ -0,0 +1,79 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 The ScummVM project
+ * Copyright (C) 2002-2006 Chris Apers - PalmOS Backend
+ *
+ * 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 "be_zodiac.h"
+#include "common/endian.h"
+
+void OSystem_PalmZodiac::clearOverlay() {
+ if (!_overlayVisible)
+ return;
+
+ Err e;
+ TwGfxPointType pos = {0, 0};
+ TwGfxBitmapType bmp = {
+ sizeof(TwGfxBitmapType),
+ _screenWidth, _screenHeight, _screenWidth, twGfxPixelFormat8bpp,
+ (void *)_offScreenP, _nativePal
+ };
+ e = TwGfxDrawBitmap(_overlayP, &pos, &bmp);
+}
+
+void OSystem_PalmZodiac::grabOverlay(OverlayColor *buf, int pitch) {
+ Err e;
+ OverlayColor *src;
+
+ e = TwGfxLockSurface(_overlayP, (void **)&src);
+ int h = _screenHeight;
+ do {
+ memcpy(buf, src, _screenWidth * 2);
+ src += _screenWidth;
+ buf += pitch;
+ } while (--h);
+
+ e = TwGfxUnlockSurface(_overlayP, 0);
+}
+
+void OSystem_PalmZodiac::copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h) {
+ Err e;
+ TwGfxPointType pos = {x, y};
+ TwGfxBitmapType bmp = {
+ sizeof(TwGfxBitmapType),
+ w, h, pitch * 2 , twGfxPixelFormatRGB565_LE,
+ (void *)buf, 0
+ };
+ e = TwGfxDrawBitmap(_overlayP, &pos, &bmp);
+}
+
+OverlayColor OSystem_PalmZodiac::RGBToColor(uint8 r, uint8 g, uint8 b) {
+ return TwGfxMakeDisplayRGB(r, g, b);
+}
+
+void OSystem_PalmZodiac::colorToRGB(OverlayColor color, uint8 &r, uint8 &g, uint8 &b) {
+#ifdef PALMOS_68K
+ color = SWAP_BYTES_16(color);
+#endif
+ r = ((color >> 8) & 0xF8);
+ g = ((color >> 3) & 0xFC);
+ b = ((color << 3) & 0xF8);
+}
diff --git a/backends/platform/PalmOS/scummvm.mcp b/backends/platform/PalmOS/scummvm.mcp
new file mode 100644
index 0000000000..f63966f9eb
--- /dev/null
+++ b/backends/platform/PalmOS/scummvm.mcp
Binary files differ