diff --git a/README.md b/README.md index 5cc2048..a4555a5 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,24 @@ # ACK-Launcher -A clone of the ACK Launcher application in TCL. +A clone of the [Adventure Creation Kit](http://mozomedia.com/ack/) Launcher application in TCL. + +## Dependencies + * Adventure Creation Kit + * Dosbox + * Wish 8.5 + +## Installation + - Copy the "ack_launcher.tcl" file and the "launcher_icons" folder into +the parent directory of your ACK installation. + - Copy the dosbox.conf file into your ACK folder. + - The directory structure must be like this: + +``` + Parent directory + |--- ack_launcher.tcl + |--- launcher_icons + |--- ACK + |--- dosbox.conf +``` + +## Notes +The launcher icons and Adventure Creation Kit are © Chris Hopkins diff --git a/ack_launcher.tcl b/ack_launcher.tcl new file mode 100755 index 0000000..cef4b82 --- /dev/null +++ b/ack_launcher.tcl @@ -0,0 +1,229 @@ +#! /usr/bin/env wish + +# Copyright (c) 2015, Miguel Angel Astor Romero +# All rights reserved. +# See the enclosed LICENSE file for more information. + +frame .banner -relief flat +frame .info_f -relief flat +frame .buttons -relief flat -pady 5 +frame .bottom -relief flat -pady 5 +pack .banner -fill both -expand 1 +pack .info_f -fill both -expand 1 +pack .buttons -fill both -expand 1 +pack .bottom -fill both -expand 1 + +image create photo bar1 -format GIF -file "launcher_icons/banner1.gif" +image create photo bar2 -format GIF -file "launcher_icons/banner2.gif" +image create photo con -format GIF -file "launcher_icons/configure.gif" +image create photo cre -format GIF -file "launcher_icons/create.gif" +image create photo fon -format GIF -file "launcher_icons/font.gif" +image create photo imp -format GIF -file "launcher_icons/import.gif" +image create photo mac -format GIF -file "launcher_icons/macros.gif" +image create photo map -format GIF -file "launcher_icons/map.gif" +image create photo mes -format GIF -file "launcher_icons/messages.gif" +image create photo obj -format GIF -file "launcher_icons/object.gif" +image create photo pep -format GIF -file "launcher_icons/people.gif" +image create photo run -format GIF -file "launcher_icons/run.gif" +image create photo til -format GIF -file "launcher_icons/tile.gif" + +label .banner.bimg1 -image bar1 +label .banner.bimg2 -image bar2 +label .banner.just -font {-size 9 -weight bold} \ + -text " Just launch ACK: " +checkbutton .banner.mouse_c -text "Enable mouse (experimental)" -onvalue 1 \ + -offvalue 0 -variable mouse_var +label .banner.sclabel -text "Graphic Scaler: " +ttk::combobox .banner.scaler -width 10 +.banner.scaler configure -values [ list none normal2x normal3x advmame2x \ + advmame3x hq2x hq3x 2xsai super2xsai supereagle advinterp2x \ + advinterp3x tv2x tv3x rgb2x rgb3x scan2x scan3x ] +.banner.scaler configure -state readonly +.banner.scaler set "hq3x" +label .banner.fslabel -text "ALT + ENTER toggles fullscreen while running ACK" + +label .sep1 \ +-text "------------------------------------------------------------------------" +label .sep2 \ +-text "------------------------------------------------------------------------" + +label .info1 -font {-size 9 -weight bold} \ + -text "... or launch multiple ACK editors" +label .info2 -font {-size 9 -weight bold} \ + -text "in separate windows:" +label .info3 -text "- Pick adventure with \"Select Adventure\" dropdown" +label .info4 -text "- Click buttons below to launch editors" +label .info5 -text "- Press TAB to save changes in current editor. Then" +label .info6 -text "switch to another editor window and press TAB to" +label .info7 -text "update it with the changes made in the previous" +label .info8 -text "editor. (You may need to use a selection menu" +label .info9 -text "before changes will appear.)" + +label .buttons.butimg1 -image cre +label .buttons.butimg2 -image con +label .buttons.butimg3 -image til +label .buttons.butimg4 -image map +label .buttons.butimg5 -image imp +label .buttons.butimg6 -image fon +label .buttons.butimg7 -image obj +label .buttons.butimg8 -image pep +label .buttons.butimg9 -image mes +label .buttons.butimg10 -image mac +label .buttons.butimg11 -image run + +button .banner.b01 -text "Go!" -command "ack_base" -width 10 +button .buttons.b02 -text "Create Adventure" -command "ackmod -n" -width 15 +button .buttons.b03 -text "Configure Adventure" \ + -command "ackmod -c" -width 15 +button .buttons.b04 -text "Edit Objects" -command "ackmod -o" -width 15 +button .buttons.b05 -text "Tile Editor" -command "ackmod -g" -width 15 +button .buttons.b06 -text "Edit People" -command "ackmod -p" -width 15 +button .buttons.b07 -text "Map Editor" -command "ackmod -m" -width 15 +button .buttons.b08 -text "Edit Messages" -command "ackmod -t" -width 15 +button .buttons.b09 -text "Import / Export" -command "ackmod -i" -width 15 +button .buttons.b10 -text "Edit Macros" -command "ackmod -x" -width 15 +button .buttons.b11 -text "Edit Font" -command "ackmod -f" -width 15 +button .buttons.b12 -text "Run Adventure" -command "ackmod -r" -width 15 +button .bottom.b13 -text "ACK Manual" -command "game_manual" -width 10 +button .bottom.b14 -text "Open Game Folder" -command "game_dir" -width 15 +button .bottom.b15 -text "Visit ACK Site" -command "home_page" -width 10 +button .buttons.b89 -text "Refresh Adventures" -command "refresh" -width 15 + +label .buttons.advlbl -text "Select Adventure:" +ttk::combobox .buttons.advents +.buttons.advents configure -values [ concat ".. " [ exec ls -1 "ACK/GAMES/" ] ] +.buttons.advents configure -state readonly +.buttons.advents set ".." +bind .buttons.advents <> { + if { [.buttons.advents get] == ".." } { + disable_buttons + } else { + enable_buttons + } +} + +grid .banner -row 0 -column 0 +grid .banner.bimg1 -row 0 -column 0 -rowspan 5 +grid .banner.just -row 0 -column 1 -columnspan 2 +grid .banner.b01 -row 1 -column 1 -columnspan 2 +grid .banner.bimg2 -row 0 -column 3 -rowspan 5 +grid .banner.mouse_c -row 3 -column 1 -columnspan 2 +grid .banner.sclabel -row 5 -column 1 +grid .banner.scaler -row 5 -column 2 +grid .banner.fslabel -row 6 -column 0 -columnspan 4 + +grid .sep1 -row 1 -column 0 +grid .info_f -row 2 -column 0 +pack .info1 -in .info_f +pack .info2 -in .info_f +pack .info3 -in .info_f -anchor w +pack .info4 -in .info_f -anchor w +pack .info5 -in .info_f -anchor w +pack .info6 -in .info_f -anchor w +pack .info7 -in .info_f -anchor w +pack .info8 -in .info_f -anchor w +pack .info9 -in .info_f -anchor w + +grid .buttons -row 3 -column 0 +grid .buttons.advlbl -row 0 -column 1 -columnspan 2 +grid .buttons.advents -row 1 -column 1 -columnspan 2 +grid .buttons.butimg1 -row 2 -column 0 +grid .buttons.butimg2 -row 3 -column 0 +grid .buttons.butimg3 -row 4 -column 0 +grid .buttons.butimg4 -row 5 -column 0 +grid .buttons.butimg5 -row 6 -column 0 +grid .buttons.butimg6 -row 7 -column 0 +grid .buttons.b02 -row 2 -column 1 +grid .buttons.b03 -row 3 -column 1 +grid .buttons.b05 -row 4 -column 1 +grid .buttons.b07 -row 5 -column 1 +grid .buttons.b09 -row 6 -column 1 +grid .buttons.b11 -row 7 -column 1 +grid .buttons.b89 -row 2 -column 2 +grid .buttons.b04 -row 3 -column 2 +grid .buttons.b06 -row 4 -column 2 +grid .buttons.b08 -row 5 -column 2 +grid .buttons.b10 -row 6 -column 2 +grid .buttons.b12 -row 7 -column 2 +grid .buttons.butimg7 -row 3 -column 3 +grid .buttons.butimg8 -row 4 -column 3 +grid .buttons.butimg9 -row 5 -column 3 +grid .buttons.butimg10 -row 6 -column 3 +grid .buttons.butimg11 -row 7 -column 3 + +grid .sep2 -row 4 -column 0 +grid .bottom -row 5 -column 0 +grid .bottom.b13 -row 0 -column 0 +grid .bottom.b14 -row 0 -column 1 +grid .bottom.b15 -row 0 -column 2 + +proc refresh {} { + .buttons.advents configure -values [ concat ".. " [ exec ls -1 "GAMES/" ] ] +} + +proc ack_base {} { + set scaler [ .banner.scaler get ] + exec dosbox -scaler $scaler -conf dosbox.conf -noconsole -c "ack.bat -exit" & +} + +proc ackmod module { + global mouse_var + if { $module == "-r" } then { + set scaler [ .banner.scaler get ] + } else { + set scaler "hq2x" + } + if { $mouse_var == 1 && $module == "-r" } then { + set use_mouse "-mouse" + } else { + set use_mouse "" + } + set command [ concat "ackmod $module" [ \ + concat [ .buttons.advents get ] "$use_mouse" ] ] + exec dosbox -scaler $scaler -conf dosbox.conf -noconsole -c $command & +} + +proc game_dir {} { + if { [.buttons.advents get] != ".." } then { + set game [ .buttons.advents get ] + exec nautilus "GAMES/$game" & + } +} + +proc game_manual {} { exec evince "MANUAL.PDF" & } + +proc home_page {} { exec firefox "http://mozomedia.com/ack/" & } + +proc disable_buttons {} { + .buttons.b03 configure -state disabled + .buttons.b04 configure -state disabled + .buttons.b05 configure -state disabled + .buttons.b06 configure -state disabled + .buttons.b07 configure -state disabled + .buttons.b08 configure -state disabled + .buttons.b09 configure -state disabled + .buttons.b10 configure -state disabled + .buttons.b11 configure -state disabled + .buttons.b12 configure -state disabled + .bottom.b14 configure -state disabled +} + +proc enable_buttons {} { + .buttons.b03 configure -state normal + .buttons.b04 configure -state normal + .buttons.b05 configure -state normal + .buttons.b06 configure -state normal + .buttons.b07 configure -state normal + .buttons.b08 configure -state normal + .buttons.b09 configure -state normal + .buttons.b10 configure -state normal + .buttons.b11 configure -state normal + .buttons.b12 configure -state normal + .bottom.b14 configure -state normal +} + +wm resizable . false false +wm title . "ACK Launcher" +disable_buttons +set mouse_var 0 +cd "ACK" diff --git a/dosbox.conf b/dosbox.conf new file mode 100644 index 0000000..f46fb3a --- /dev/null +++ b/dosbox.conf @@ -0,0 +1,196 @@ +# This is the configurationfile for DOSBox 0.72. +# Lines starting with a # are commentlines. +# They are used to (briefly) document the effect of each option. + +[sdl] +# fullscreen -- Start dosbox directly in fullscreen. +# fulldouble -- Use double buffering in fullscreen. +# fullresolution -- What resolution to use for fullscreen: original or fixed size (e.g. 1024x768). +# windowresolution -- Scale the window to this size IF the output device supports hardware scaling. +# output -- What to use for output: surface,overlay,opengl,openglnb,ddraw. +# autolock -- Mouse will automatically lock, if you click on the screen. +# sensitiviy -- Mouse sensitivity. +# waitonerror -- Wait before closing the console if dosbox has an error. +# priority -- Priority levels for dosbox: lowest,lower,normal,higher,highest,pause (when not focussed). +# Second entry behind the comma is for when dosbox is not focused/minimized. +# mapperfile -- File used to load/save the key/event mappings from. +# usescancodes -- Avoid usage of symkeys, might not work on all operating systems. + +fullscreen=false +fulldouble=true +fullresolution=original +windowresolution=original +output=surface +autolock=true +sensitivity=100 +waitonerror=true +priority=higher,pause +mapperfile=mapper.txt +usescancodes=false + +[dosbox] +# language -- Select another language file. +# memsize -- Amount of memory DOSBox has in megabytes. +# machine -- The type of machine tries to emulate:hercules,cga,tandy,pcjr,vga. +# captures -- Directory where things like wave,midi,screenshot get captured. + +language= +machine=vga +captures=capture +memsize=16 + +[render] +# frameskip -- How many frames DOSBox skips before drawing one. +# aspect -- Do aspect correction, if your output method doesn't support scaling this can slow things down!. +# scaler -- Scaler used to enlarge/enhance low resolution modes. +# Supported are none,normal2x,normal3x,advmame2x,advmame3x,hq2x,hq3x, +# 2xsai,super2xsai,supereagle,advinterp2x,advinterp3x, +# tv2x,tv3x,rgb2x,rgb3x,scan2x,scan3x. +# If forced is appended (like scaler=hq2x forced), the scaler will be used +# even if the result might not be desired. + +frameskip=0 +aspect=true +scaler=hq3x + +[cpu] +# core -- CPU Core used in emulation: normal,simple,dynamic,auto. +# auto switches from normal to dynamic if appropriate. +# cycles -- Amount of instructions DOSBox tries to emulate each millisecond. +# Setting this value too high results in sound dropouts and lags. +# You can also let DOSBox guess the correct value by setting it to max. +# The default setting (auto) switches to max if appropriate. +# cycleup -- Amount of cycles to increase/decrease with keycombo. +# cycledown Setting it lower than 100 will be a percentage. + +core=auto +cycles=9000 +cycleup=500 +cycledown=20 + +[mixer] +# nosound -- Enable silent mode, sound is still emulated though. +# rate -- Mixer sample rate, setting any devices higher than this will +# probably lower their sound quality. +# blocksize -- Mixer block size, larger blocks might help sound stuttering +# but sound will also be more lagged. +# prebuffer -- How many milliseconds of data to keep on top of the blocksize. + +nosound=false +rate=22050 +blocksize=1024 +prebuffer=1000 + +[midi] +# mpu401 -- Type of MPU-401 to emulate: none, uart or intelligent. +# device -- Device that will receive the MIDI data from MPU-401. +# This can be default,alsa,oss,win32,coreaudio,none. +# config -- Special configuration options for the device. In Windows put +# the id of the device you want to use. See README for details. + +mpu401=intelligent +device=default +config= + +[sblaster] +# sbtype -- Type of sblaster to emulate:none,sb1,sb2,sbpro1,sbpro2,sb16. +# sbbase,irq,dma,hdma -- The IO/IRQ/DMA/High DMA address of the soundblaster. +# mixer -- Allow the soundblaster mixer to modify the DOSBox mixer. +# oplmode -- Type of OPL emulation: auto,cms,opl2,dualopl2,opl3. +# On auto the mode is determined by sblaster type. +# All OPL modes are 'Adlib', except for CMS. +# oplrate -- Sample rate of OPL music emulation. + +sbtype=sbpro1 +sbbase=220 +irq=5 +dma=1 + +[gus] +# gus -- Enable the Gravis Ultrasound emulation. +# gusbase,irq1,irq2,dma1,dma2 -- The IO/IRQ/DMA addresses of the +# Gravis Ultrasound. (Same IRQ's and DMA's are OK.) +# gusrate -- Sample rate of Ultrasound emulation. +# ultradir -- Path to Ultrasound directory. In this directory +# there should be a MIDI directory that contains +# the patch files for GUS playback. Patch sets used +# with Timidity should work fine. + +gus=true +gusrate=22050 +gusbase=240 +irq1=5 +irq2=5 +dma1=3 +dma2=3 +ultradir=C:\ULTRASND + +[speaker] +# pcspeaker -- Enable PC-Speaker emulation. +# pcrate -- Sample rate of the PC-Speaker sound generation. +# tandy -- Enable Tandy Sound System emulation (off,on,auto). +# For auto Tandysound emulation is present only if machine is set to tandy. +# tandyrate -- Sample rate of the Tandy 3-Voice generation. +# disney -- Enable Disney Sound Source emulation. Covox Voice Master and Speech Thing compatible. + +pcspeaker=true +pcrate=22050 +tandy=auto +tandyrate=22050 +disney=true + +[joystick] +# joysticktype -- Type of joystick to emulate: auto (default), none, +# 2axis (supports two joysticks, +# 4axis (supports one joystick, first joystick used), +# 4axis_2 (supports one joystick, second joystick used), +# fcs (Thrustmaster), ch (CH Flightstick). +# none disables joystick emulation. +# auto chooses emulation depending on real joystick(s). +# timed -- enable timed intervals for axis. (false is old style behaviour). +# autofire -- continuously fires as long as you keep the button pressed. +# swap34 -- swap the 3rd and the 4th axis. can be useful for certain joysticks. +# buttonwrap -- enable button wrapping at the number of emulated buttons. + +joysticktype=auto +timed=true +autofire=false +swap34=false +buttonwrap=true + +[serial] +# serial1-4 -- set type of device connected to com port. +# Can be disabled, dummy, modem, nullmodem, directserial. +# Additional parameters must be in the same line in the form of +# parameter:value. Parameter for all types is irq. +# for directserial: realport (required), rxdelay (optional). +# for modem: listenport (optional). +# for nullmodem: server, rxdelay, txdelay, telnet, usedtr, +# transparent, port, inhsocket (all optional). +# Example: serial1=modem listenport:5000 + +serial1=dummy +serial2=dummy +serial3=disabled +serial4=disabled + +[dos] +# xms -- Enable XMS support. +# ems -- Enable EMS support. +# umb -- Enable UMB support. +# keyboardlayout -- Language code of the keyboard layout (or none). + +xms=true +ems=true +umb=true +keyboardlayout=none + +[ipx] +# ipx -- Enable ipx over UDP/IP emulation. + +ipx=false + +[autoexec] +# Lines in this section will be run at startup. +mount c ./ +c: diff --git a/launcher_icons/banner1.gif b/launcher_icons/banner1.gif new file mode 100644 index 0000000..605c934 Binary files /dev/null and b/launcher_icons/banner1.gif differ diff --git a/launcher_icons/banner2.gif b/launcher_icons/banner2.gif new file mode 100644 index 0000000..dcf97ef Binary files /dev/null and b/launcher_icons/banner2.gif differ diff --git a/launcher_icons/configure.gif b/launcher_icons/configure.gif new file mode 100644 index 0000000..0c981df Binary files /dev/null and b/launcher_icons/configure.gif differ diff --git a/launcher_icons/create.gif b/launcher_icons/create.gif new file mode 100644 index 0000000..05e68b5 Binary files /dev/null and b/launcher_icons/create.gif differ diff --git a/launcher_icons/font.gif b/launcher_icons/font.gif new file mode 100644 index 0000000..9583358 Binary files /dev/null and b/launcher_icons/font.gif differ diff --git a/launcher_icons/import.gif b/launcher_icons/import.gif new file mode 100644 index 0000000..258f917 Binary files /dev/null and b/launcher_icons/import.gif differ diff --git a/launcher_icons/macros.gif b/launcher_icons/macros.gif new file mode 100644 index 0000000..3a73fdb Binary files /dev/null and b/launcher_icons/macros.gif differ diff --git a/launcher_icons/map.gif b/launcher_icons/map.gif new file mode 100644 index 0000000..cbd8077 Binary files /dev/null and b/launcher_icons/map.gif differ diff --git a/launcher_icons/messages.gif b/launcher_icons/messages.gif new file mode 100644 index 0000000..5ecd3f3 Binary files /dev/null and b/launcher_icons/messages.gif differ diff --git a/launcher_icons/object.gif b/launcher_icons/object.gif new file mode 100644 index 0000000..208ced8 Binary files /dev/null and b/launcher_icons/object.gif differ diff --git a/launcher_icons/people.gif b/launcher_icons/people.gif new file mode 100644 index 0000000..88f478e Binary files /dev/null and b/launcher_icons/people.gif differ diff --git a/launcher_icons/run.gif b/launcher_icons/run.gif new file mode 100644 index 0000000..8b5773d Binary files /dev/null and b/launcher_icons/run.gif differ diff --git a/launcher_icons/tile.gif b/launcher_icons/tile.gif new file mode 100644 index 0000000..4b336e0 Binary files /dev/null and b/launcher_icons/tile.gif differ