pkgsrc-WIP-changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

infraarcana: update to infraarcana-18.2



Module Name:	pkgsrc-wip
Committed By:	Yorick Hardy <yorickhardy%gmail.com@localhost>
Pushed By:	yhardy
Date:		Sun Nov 20 18:27:33 2016 +0200
Changeset:	e4b9cfc0e42d783ba44c091266882a75ffc5e526

Modified Files:
	infraarcana/Makefile
	infraarcana/PLIST
	infraarcana/distinfo
Added Files:
	infraarcana/files/infraarcana.sh
	infraarcana/patches/patch-Makefile
	infraarcana/patches/patch-src_config.cpp
	infraarcana/patches/patch-src_input.cpp
	infraarcana/patches/patch-src_save__handling.cpp
Removed Files:
	infraarcana/files/infraarcanum.sh
	infraarcana/patches/patch-src_Config.cpp
	infraarcana/patches/patch-src_SaveHandling.cpp

Log Message:
infraarcana: update to infraarcana-18.2

The shell script has been renamed  "infraarcana" in line with the package name.
Infra Arcana has switched to SDL2 and along with the change I experienced some
input problems for which I added a work around (see
patches/patch-src_input.cpp).

Changes:

--------------------------------------------------------------
v18.2 (July 2, 2016)
--------------------------------------------------------------
Gameplay
* All backgrounds (classes) now have ranged attack bonus vs unaware targets (not just Rogues)
* Ghoul characters are no longer shocked by Ghoul statues
* You no longer drop your items when you die
* Removed the "R" command to rearrange rounds between pistol magazines - this is now instead done when you wait (with "5", "s", or ".")
* Spider webs are now destroyed when the creature held is teleported away or knocked back
* Fire Hound bites now also causes Burning (like their ranged attacks)
* Slightly reduced the number of Medical Bag supplies
* Critically failing a melee attack can no longer result in dropping the weapon

Interface
* When picking traits, the game now shows all traits and their prerequisites (no information is hidden)
* When aiming explosives, the explosion size is marked on the map
* Added option for confirming "-More-" prompts with any key (off by default)
* Messages are no longer written in all capitals while Frenzied
* New menu color scheme
* Removed some redundant messages to reduce clutter ("I pause for a while...", "I stop waiting.")
* Added a section in the manual about inventory handling

Bug fixes
* Fixed a bug that caused monsters with Fear Resistance to end all player phobias when they spawned (this was mistakenly reported to the insanity system as a "player gaining permanent rFear" event)
* Fixed some buggy item drop code (which may have caused crashes)
* Fixed some minor bugs in the map generator (the map generator can also do a few new things now, although it's probably subtle)
* Fixed some errors in Manuscript names (underscores had snuck into a few names for some reason)
* Fixed a bug that (in some rare specific cases) allowed monsters to move into the position already occupied by another monster
* Fixed a bug were teleporting or being knocked back while held by a spider web, caused the web to be able to hold any creature that walked into it, regardless of monster type (e.g. ethereal monsters or spiders could then also be held)

--------------------------------------------------------------
v18.1 (Mars 17, 2016)
--------------------------------------------------------------
Gameplay
* Worms Masses may now only split once (i.e. the split worms may not also split themselves), they do not split if they are killed with enough damage, they are not allowed to attack immediately after being split, and the confusion effect from Mind Worm bites has a much shorter duration. However, Worms now move at normal speed (instead of slow).
* Gas Mask and Asbestos Suit now protects against blindness from Ravens, Spitting Cobras, and Dust Vortexes
* Vortex monsters no longer "explode" when they die
* Oozes can no longer regenerate HP while burning
* There is now much smaller chance of gaining multiple phobias, and you can never become both sadistic and masochistic at the same time
* Picking the Fearless trait immediately ends all active phobias
* When bashing or eating multiple corpses in the same cell, Zombie-type monsters are now prioritized (since you want to destroy them as soon as possible before they rise)
* You can now also kick in your own cell ("w", then "5" or ".") - to destroy corpses you're standing on
* You are no longer "telepathically"aware of where all allied monsters are - if they are out of sight or invisible, you can lose awareness of them
* You can now only accidentally drop your melee weapon during combat if you are Cursed

Interface
* Spells in the casting menu now appear in the order that you learned the spells (instead of alphabetically)
* On turns that you can walk for free due to Dextrous, the "T" is now colored green instead of the number (to be less distracting)
* Removed the "icon mode" which used a heart, brain, stopwatch etc as symbols in the user interface
* The message "I stop waiting" is no longer printed when fainting or paralyzed

Bug fixes
* Fixed some bugs in the monster movement AI (it wasn't anything critical, but it made them act a bit weird in a few specific situations)
* Fixed a faulty message when pressing "t" with no item selected for throwing (the message adviced to press "w" to wield a throwing weapon, but the actual key should be "i")
* Property messages such as "...is paralyzed" is no longer allowed for dead monsters

--------------------------------------------------------------
v18.0 (January 28, 2016)
--------------------------------------------------------------
Gameplay
* Added more monsters
* Added invisibility property
* Ghost-type monsters and Polyps are invisible.
* New Potions: Invisibility and See Invisible (can see all invisible and sneaking monsters, prevents blindness)
* Bumping an unseen monster (sneaking or invisible) that you are unaware of no longer performs a melee attack, instead it prints a message such as "There is someone here!", and makes you aware of the monster (you see it as a "!" on the map)
* New background: Ghoul
* New property: Infravision (the Ghoul background starts with this, and many monsters has it), which allows you to see infra-visible creatures in the dark
* Made several changes to how traps work - most importantly, when they activate there is usually a delay of a couple of turns from when they activate until the effect occurs - this means that you can (sometimes) avoid the effect by moving away from the trap
* Added command [R] for organizing Colt magazines (the game will reload your wielded or readied Colt, or move single rounds between magazines, whichever is better)
* Added command [N] to make noise (for luring monsters)
* Monsters fighting each other now generates sounds ("I hear fighting.")
* Unequipping any item spends a turn
* Critical misses for melee attacks (1% chance normally) now cause various bad things to happen, such as becoming exhausted, or dropping the weapon
* Disarming traps gives a small amount of XP
* Potions of Fortitude no longer cures all insanity symptoms (phobias, etc), instead they only heal one random symptom
* There is now a delay when quaffing Potion of Descent until the effect happens
* Changed Potion of Antidote to Potion of Curing, which acts like a light version of Potion of Healing
* All Potions are now guaranteed to identify when you drink them
* Added new item class "Rods" - these are similar to Devices, except they never break or malfunction, and instead have a cooldown time before they can be used again
* The Wound system (which was removed in v17) is now back again - when you take heavy damage in one hit you receive a Wound - each wound reduces your fighting abilities, maximum HP, and HP regeneration rate - wounds can be healed with the Medical Bag
* Chests are never made of iron until at least dungeon level 3
* Added more traits
* The Melee Fighter skills now also gives extra damage (in addition to better hit chances), Master Marksman (the final Marksman skill) gives extra ranged damage
* The Mobile trait now only makes every third step a free action (instead of every second step)
* Walking in liquids stops Burning
* You can no longer read scrolls in darkness
* Items which in the previous version raised your shock when carried/equiped (such as Jewelry or the Mi-go armor) now raise your insanity instead (as long as you keep the item).
* Removed cold damage, and all items/monsters related to it
* Removed Potion of Frenzy
* Added Frenzy as an insanity symptom
* Braziers light up cells around them, and can be kicked over to do fire damage in a small area (similar to a small molotov explosion)
* The Spirit traits now also gives spell resistance - a harmful spell cast on you will be blocked, then it takes a certain number of turns to regain spell resistance
* Any melee weapon can now be thrown
* New spell: Animate Weapons - causes melee weapons to rise into the air and protect you (after a while they will drop to the ground and become normal weapons again)
* Added more Insanity symptoms

Interface
* Migrated to SDL2 (fullscreen mode may work better for you now, if you had problems with this before)
* In window mode, the window is created centered on the screen
* In some menus, options can now be selected directly with letter keys
* Page Up / Page Down can now be used in menus to jump to the top/bottom (if menu fits on screen), or to the previous/next screen (if menu takes up multiple screens)
* The [a] command is no longer a shortcut for Medical Bag and Electric Lantern, instead it opens a filtered inventory view only showing items which can be Applied (read, quaffed, activated, ignited, etc)
* Changed Inventory key to [i] instead of [w]
* [w] is now used for kicking/bashing instead of [q] (*Wham*)
* Intrinsic properties that lasts indefinitely are now spelled with upper case (e.g. you can be "DISEASED" or "Diseased"), to clarify that waiting will not end the effect
* Added an option for using symbols such as a heart for Hit Points, and a brain for Insanity in the interface (the old text based way is the default option)
* Reworked background and trait picking screens
* Removed the [D] command for jamming doors - instead using the "Close" command [c] on an already closed door will now attempt to jam it
* Removed uppercase [X] command, and instead made lowercase [x] bring up the spell selection menu (instead of re-casting previous spell)
* Added another typewriter font
* There is now a log of "historic events" (such as identifying a potion, or killing a unique monster) viewable from the character info screen or from the game info screen after the game is over
* If you are Dexterous, the turncount is marked green on turns where you will get a free step
* The monster description pages shows more information (e.g. how many turns they will remember you, how frightening they are, and also their current properties such as terrified, burning, flying, etc)
* Added more sound effects (events and ambient sounds)
* While aiming aiming, the marker shows if the path goes through any seen blocking cells

Bug fixes
* Fixed a bug that could crash the game, especially during map generation (thanks "stevebob"!)
* Fixed a bug that caused the player's dodge chance to be calculated the wrong way when Ghosts attempted to "touch" you
* If you ignited an explosive (Dynamite, Molotov, Flare, Smoke grenade) while already holding another, the first one would just be erased - now the game prevents you from igniting a new explosive instead
* Fixed a bug that prevented Flare Guns from burning the target
* Fixed a bug where bumping a hidden door would print a different message than bumping a wall (and thus indicating the presence of the door)

To see a diff of this commit:
https://wip.pkgsrc.org/cgi-bin/gitweb.cgi?p=pkgsrc-wip.git;a=commitdiff;h=e4b9cfc0e42d783ba44c091266882a75ffc5e526

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

diffstat:
 infraarcana/Makefile                             |  51 +++--
 infraarcana/PLIST                                | 226 +++++++++++----------
 infraarcana/distinfo                             |  17 +-
 infraarcana/files/infraarcana.sh                 |   3 +
 infraarcana/files/infraarcanum.sh                |   3 -
 infraarcana/patches/patch-Makefile               |  15 ++
 infraarcana/patches/patch-src_Config.cpp         |  50 -----
 infraarcana/patches/patch-src_SaveHandling.cpp   |  49 -----
 infraarcana/patches/patch-src_config.cpp         |  42 ++++
 infraarcana/patches/patch-src_input.cpp          | 240 +++++++++++++++++++++++
 infraarcana/patches/patch-src_save__handling.cpp |  42 ++++
 11 files changed, 510 insertions(+), 228 deletions(-)

diffs:
diff --git a/infraarcana/Makefile b/infraarcana/Makefile
index fc2089b..ed89286 100644
--- a/infraarcana/Makefile
+++ b/infraarcana/Makefile
@@ -1,10 +1,18 @@
 # $NetBSD: Makefile,v 1.1 2015/08/19 19:42:29 yhardy Exp $
 
-DISTNAME=	ia-17.0
-PKGNAME=	infraarcana-17.0
+DISTNAME=	ia-18.2
+PKGNAME=	infraarcana-18.2
 CATEGORIES=	games
-MASTER_SITES=	${MASTER_SITE_GITHUB:=InfraArcana/}
+MASTER_SITES=	${MASTER_SITE_GITHUB:=martin-tornqvist/}
+GITHUB_PROJECT=	ia
 GITHUB_TAG=	v${PKGVERSION_NOREV}
+DIST_SUBDIR=	${PKGBASE}
+DISTFILES=	${DEFAULT_DISTFILES} rl_utils-${RLUTILSVER}.zip
+
+RLUTILSVER=	757bef657fa43e2d7f41192e07227a00c62236e4
+
+SITES.rl_utils-${RLUTILSVER}.zip=	\
+		-${MASTER_SITES:=rl_utils/archive/${RLUTILSVER}.zip}
 
 MAINTAINER=	pkgsrc-users%NetBSD.org@localhost
 HOMEPAGE=	https://sites.google.com/site/infraarcana/
@@ -18,31 +26,38 @@ USE_TOOLS+=	gmake
 USE_GAMESGROUP=	yes
 
 INSTALLATION_DIRS+=	bin
-INSTALLATION_DIRS+=	share/InfraArcanum
-INSTALLATION_DIRS+=	share/InfraArcanum/audio
-INSTALLATION_DIRS+=	share/InfraArcanum/data
-INSTALLATION_DIRS+=	share/InfraArcanum/images
+INSTALLATION_DIRS+=	share/InfraArcana
+INSTALLATION_DIRS+=	share/InfraArcana/audio
+INSTALLATION_DIRS+=	share/InfraArcana/data
+INSTALLATION_DIRS+=	share/InfraArcana/images
+
+# See patches/patch-Makefile
+BUILD_MAKE_FLAGS+=	X11_LDFLAGS=${X11_LDFLAGS:Q}
+
+post-extract:
+	${UNZIP_CMD} -d ${WRKSRC}/rl_utils ${DISTDIR}/${DIST_SUBDIR}/rl_utils-${RLUTILSVER}.zip
+	cd ${WRKSRC}/rl_utils && ${MV} rl_utils-${RLUTILSVER}/* .
 
 post-build:
-	${SED} -e 's,@PREFIX@,${PREFIX},g' < ${FILESDIR}/infraarcanum.sh > ${WRKSRC}/infraarcanum.sh
+	${SED} -e 's,@PREFIX@,${PREFIX},g' < ${FILESDIR}/infraarcana.sh > ${WRKSRC}/infraarcana.sh
 	${TOUCH} ${WRKSRC}/target/data/highscores
 
 do-install:
-	${INSTALL_GAME} ${WRKSRC}/target/ia ${DESTDIR}${PREFIX}/share/InfraArcanum
+	${INSTALL_GAME} ${WRKSRC}/target/ia ${DESTDIR}${PREFIX}/share/InfraArcana
 	for f in ${WRKSRC}/target/*.txt; do \
-		${INSTALL_DATA} $$f ${DESTDIR}${PREFIX}/share/InfraArcanum/$${f##*/}; \
+		${INSTALL_DATA} $$f ${DESTDIR}${PREFIX}/share/InfraArcana/$${f##*/}; \
 	done
 	for f in ${WRKSRC}/target/audio/*; do \
-		${INSTALL_DATA} $$f ${DESTDIR}${PREFIX}/share/InfraArcanum/audio/$${f##*/}; \
+		${INSTALL_DATA} $$f ${DESTDIR}${PREFIX}/share/InfraArcana/audio/$${f##*/}; \
 	done
 	for f in ${WRKSRC}/target/images/*; do \
-		${INSTALL_DATA} $$f ${DESTDIR}${PREFIX}/share/InfraArcanum/images/$${f##*/}; \
+		${INSTALL_DATA} $$f ${DESTDIR}${PREFIX}/share/InfraArcana/images/$${f##*/}; \
 	done
-	${INSTALL_GAME_DATA} ${WRKSRC}/target/ascii_graveyard ${DESTDIR}${PREFIX}/share/InfraArcanum/
-	${INSTALL_GAME_DATA} ${WRKSRC}/target/data/highscores ${DESTDIR}${PREFIX}/share/InfraArcanum/data/
-	${INSTALL_SCRIPT} ${WRKSRC}/infraarcanum.sh ${DESTDIR}${PREFIX}/bin/infraarcanum
+	${INSTALL_GAME_DATA} ${WRKSRC}/target/data/highscores ${DESTDIR}${PREFIX}/share/InfraArcana/data/
+	${INSTALL_GAME_DATA} ${WRKSRC}/target/data/save ${DESTDIR}${PREFIX}/share/InfraArcana/data/
+	${INSTALL_SCRIPT} ${WRKSRC}/infraarcana.sh ${DESTDIR}${PREFIX}/bin/infraarcana
 
-.include "../../audio/SDL_mixer/buildlink3.mk"
-.include "../../devel/SDL/buildlink3.mk"
-.include "../../graphics/SDL_image/buildlink3.mk"
+.include "../../audio/SDL2_mixer/buildlink3.mk"
+.include "../../devel/SDL2/buildlink3.mk"
+.include "../../graphics/SDL2_image/buildlink3.mk"
 .include "../../mk/bsd.pkg.mk"
diff --git a/infraarcana/PLIST b/infraarcana/PLIST
index ce917fe..d02f9d9 100644
--- a/infraarcana/PLIST
+++ b/infraarcana/PLIST
@@ -1,103 +1,123 @@
-@comment $NetBSD: PLIST,v 1.1 2015/08/19 19:42:29 yhardy Exp $
-bin/infraarcanum
-share/InfraArcanum/ascii_graveyard
-share/InfraArcanum/audio/Musica_Cthulhiana-Fragment-Madness.ogg
-share/InfraArcanum/audio/amb_001.ogg
-share/InfraArcanum/audio/amb_002.ogg
-share/InfraArcanum/audio/amb_003.ogg
-share/InfraArcanum/audio/amb_004.ogg
-share/InfraArcanum/audio/amb_005.ogg
-share/InfraArcanum/audio/amb_006.ogg
-share/InfraArcanum/audio/amb_007.ogg
-share/InfraArcanum/audio/amb_008.ogg
-share/InfraArcanum/audio/amb_009.ogg
-share/InfraArcanum/audio/amb_010.ogg
-share/InfraArcanum/audio/amb_011.ogg
-share/InfraArcanum/audio/amb_012.ogg
-share/InfraArcanum/audio/amb_013.ogg
-share/InfraArcanum/audio/amb_014.ogg
-share/InfraArcanum/audio/amb_015.ogg
-share/InfraArcanum/audio/amb_016.ogg
-share/InfraArcanum/audio/amb_017.ogg
-share/InfraArcanum/audio/amb_018.ogg
-share/InfraArcanum/audio/amb_019.ogg
-share/InfraArcanum/audio/amb_020.ogg
-share/InfraArcanum/audio/amb_021.ogg
-share/InfraArcanum/audio/amb_022.ogg
-share/InfraArcanum/audio/amb_023.ogg
-share/InfraArcanum/audio/amb_024.ogg
-share/InfraArcanum/audio/amb_025.ogg
-share/InfraArcanum/audio/amb_026.ogg
-share/InfraArcanum/audio/amb_027.ogg
-share/InfraArcanum/audio/amb_028.ogg
-share/InfraArcanum/audio/amb_029.ogg
-share/InfraArcanum/audio/amb_030.ogg
-share/InfraArcanum/audio/amb_031.ogg
-share/InfraArcanum/audio/amb_032.ogg
-share/InfraArcanum/audio/amb_033.ogg
-share/InfraArcanum/audio/amb_034.ogg
-share/InfraArcanum/audio/amb_035.ogg
-share/InfraArcanum/audio/amb_036.ogg
-share/InfraArcanum/audio/amb_037.ogg
-share/InfraArcanum/audio/sfx_ape.ogg
-share/InfraArcanum/audio/sfx_backpack.ogg
-share/InfraArcanum/audio/sfx_bossVoice1.ogg
-share/InfraArcanum/audio/sfx_bossVoice2.ogg
-share/InfraArcanum/audio/sfx_death.ogg
-share/InfraArcanum/audio/sfx_dogSnarl.ogg
-share/InfraArcanum/audio/sfx_doorBang.ogg
-share/InfraArcanum/audio/sfx_doorBreak.ogg
-share/InfraArcanum/audio/sfx_doorClose.ogg
-share/InfraArcanum/audio/sfx_doorOpen.ogg
-share/InfraArcanum/audio/sfx_electricLantern.ogg
-share/InfraArcanum/audio/sfx_explosion.ogg
-share/InfraArcanum/audio/sfx_explosionMolotov.ogg
-share/InfraArcanum/audio/sfx_flappingWings.ogg
-share/InfraArcanum/audio/sfx_fountainDrink.ogg
-share/InfraArcanum/audio/sfx_ghoulGrowl.ogg
-share/InfraArcanum/audio/sfx_glop.ogg
-share/InfraArcanum/audio/sfx_hitCorpseBreak.ogg
-share/InfraArcanum/audio/sfx_hitHard.ogg
-share/InfraArcanum/audio/sfx_hitMedium.ogg
-share/InfraArcanum/audio/sfx_hitSharp.ogg
-share/InfraArcanum/audio/sfx_hitSmall.ogg
-share/InfraArcanum/audio/sfx_insanityRising.ogg
-share/InfraArcanum/audio/sfx_machineGunFire.ogg
-share/InfraArcanum/audio/sfx_machineGunReload.ogg
-share/InfraArcanum/audio/sfx_metalClank.ogg
-share/InfraArcanum/audio/sfx_migoGun.ogg
-share/InfraArcanum/audio/sfx_missHeavy.ogg
-share/InfraArcanum/audio/sfx_missLight.ogg
-share/InfraArcanum/audio/sfx_missMedium.ogg
-share/InfraArcanum/audio/sfx_oozeGurgle.ogg
-share/InfraArcanum/audio/sfx_pickup.ogg
-share/InfraArcanum/audio/sfx_pistolFire.ogg
-share/InfraArcanum/audio/sfx_pistolReload.ogg
-share/InfraArcanum/audio/sfx_potionQuaff.ogg
-share/InfraArcanum/audio/sfx_ricochet.ogg
-share/InfraArcanum/audio/sfx_shotgunPumpFire.ogg
-share/InfraArcanum/audio/sfx_shotgunReload.ogg
-share/InfraArcanum/audio/sfx_shotgunSawedOffFire.ogg
-share/InfraArcanum/audio/sfx_spellGeneric.ogg
-share/InfraArcanum/audio/sfx_spikeGun.ogg
-share/InfraArcanum/audio/sfx_tombOpen.ogg
-share/InfraArcanum/audio/sfx_wolfHowl.ogg
-share/InfraArcanum/audio/sfx_zombieGrowl.ogg
-share/InfraArcanum/contact.txt
-share/InfraArcanum/credits.txt
-share/InfraArcanum/data/highscores
-share/InfraArcanum/ia
-share/InfraArcanum/images/11x19.png
-share/InfraArcanum/images/11x22.png
-share/InfraArcanum/images/12x24.png
-share/InfraArcanum/images/16x24_DOS.png
-share/InfraArcanum/images/16x24_typewriter.png
-share/InfraArcanum/images/16x24_v1.png
-share/InfraArcanum/images/16x24_v2.png
-share/InfraArcanum/images/16x24_v3.png
-share/InfraArcanum/images/8x12_DOS.png
-share/InfraArcanum/images/gfx_16x24.png
-share/InfraArcanum/images/main_menu_logo.png
-share/InfraArcanum/license.txt
-share/InfraArcanum/manual.txt
-share/InfraArcanum/release_history.txt
+@comment $NetBSD$
+bin/infraarcana
+share/InfraArcana/audio/amb_001.ogg
+share/InfraArcana/audio/amb_002.ogg
+share/InfraArcana/audio/amb_003.ogg
+share/InfraArcana/audio/amb_004.ogg
+share/InfraArcana/audio/amb_005.ogg
+share/InfraArcana/audio/amb_006.ogg
+share/InfraArcana/audio/amb_007.ogg
+share/InfraArcana/audio/amb_008.ogg
+share/InfraArcana/audio/amb_009.ogg
+share/InfraArcana/audio/amb_010.ogg
+share/InfraArcana/audio/amb_011.ogg
+share/InfraArcana/audio/amb_012.ogg
+share/InfraArcana/audio/amb_013.ogg
+share/InfraArcana/audio/amb_014.ogg
+share/InfraArcana/audio/amb_015.ogg
+share/InfraArcana/audio/amb_016.ogg
+share/InfraArcana/audio/amb_017.ogg
+share/InfraArcana/audio/amb_018.ogg
+share/InfraArcana/audio/amb_019.ogg
+share/InfraArcana/audio/amb_020.ogg
+share/InfraArcana/audio/amb_021.ogg
+share/InfraArcana/audio/amb_022.ogg
+share/InfraArcana/audio/amb_023.ogg
+share/InfraArcana/audio/amb_024.ogg
+share/InfraArcana/audio/amb_025.ogg
+share/InfraArcana/audio/amb_026.ogg
+share/InfraArcana/audio/amb_027.ogg
+share/InfraArcana/audio/amb_028.ogg
+share/InfraArcana/audio/amb_029.ogg
+share/InfraArcana/audio/amb_030.ogg
+share/InfraArcana/audio/amb_031.ogg
+share/InfraArcana/audio/amb_032.ogg
+share/InfraArcana/audio/amb_033.ogg
+share/InfraArcana/audio/amb_034.ogg
+share/InfraArcana/audio/amb_035.ogg
+share/InfraArcana/audio/amb_036.ogg
+share/InfraArcana/audio/amb_037.ogg
+share/InfraArcana/audio/amb_038.ogg
+share/InfraArcana/audio/amb_039.ogg
+share/InfraArcana/audio/amb_040.ogg
+share/InfraArcana/audio/amb_041.ogg
+share/InfraArcana/audio/amb_042.ogg
+share/InfraArcana/audio/amb_043.ogg
+share/InfraArcana/audio/amb_044.ogg
+share/InfraArcana/audio/amb_045.ogg
+share/InfraArcana/audio/amb_046.ogg
+share/InfraArcana/audio/amb_047.ogg
+share/InfraArcana/audio/amb_048.ogg
+share/InfraArcana/audio/amb_049.ogg
+share/InfraArcana/audio/amb_050.ogg
+share/InfraArcana/audio/musica_cthulhiana-fragment-madness.ogg
+share/InfraArcana/audio/sfx_ape.ogg
+share/InfraArcana/audio/sfx_backpack.ogg
+share/InfraArcana/audio/sfx_bite.ogg
+share/InfraArcana/audio/sfx_boss_voice1.ogg
+share/InfraArcana/audio/sfx_boss_voice2.ogg
+share/InfraArcana/audio/sfx_death.ogg
+share/InfraArcana/audio/sfx_dog_snarl.ogg
+share/InfraArcana/audio/sfx_door_bang.ogg
+share/InfraArcana/audio/sfx_door_break.ogg
+share/InfraArcana/audio/sfx_door_close.ogg
+share/InfraArcana/audio/sfx_door_open.ogg
+share/InfraArcana/audio/sfx_electric_lantern.ogg
+share/InfraArcana/audio/sfx_explosion.ogg
+share/InfraArcana/audio/sfx_explosion_molotov.ogg
+share/InfraArcana/audio/sfx_flapping_wings.ogg
+share/InfraArcana/audio/sfx_fountain_drink.ogg
+share/InfraArcana/audio/sfx_gas.ogg
+share/InfraArcana/audio/sfx_ghoul_growl.ogg
+share/InfraArcana/audio/sfx_glop.ogg
+share/InfraArcana/audio/sfx_hiss.ogg
+share/InfraArcana/audio/sfx_hit_corpse_break.ogg
+share/InfraArcana/audio/sfx_hit_hard.ogg
+share/InfraArcana/audio/sfx_hit_medium.ogg
+share/InfraArcana/audio/sfx_hit_sharp.ogg
+share/InfraArcana/audio/sfx_hit_small.ogg
+share/InfraArcana/audio/sfx_insanity_rising.ogg
+share/InfraArcana/audio/sfx_machine_gun_fire.ogg
+share/InfraArcana/audio/sfx_machine_gun_reload.ogg
+share/InfraArcana/audio/sfx_metal_clank.ogg
+share/InfraArcana/audio/sfx_migo_gun.ogg
+share/InfraArcana/audio/sfx_miss_heavy.ogg
+share/InfraArcana/audio/sfx_miss_light.ogg
+share/InfraArcana/audio/sfx_miss_medium.ogg
+share/InfraArcana/audio/sfx_ooze_gurgle.ogg
+share/InfraArcana/audio/sfx_pickup.ogg
+share/InfraArcana/audio/sfx_pistol_fire.ogg
+share/InfraArcana/audio/sfx_pistol_reload.ogg
+share/InfraArcana/audio/sfx_potion_quaff.ogg
+share/InfraArcana/audio/sfx_ricochet.ogg
+share/InfraArcana/audio/sfx_shotgun_pump_fire.ogg
+share/InfraArcana/audio/sfx_shotgun_reload.ogg
+share/InfraArcana/audio/sfx_shotgun_sawed_off_fire.ogg
+share/InfraArcana/audio/sfx_spell_generic.ogg
+share/InfraArcana/audio/sfx_spell_shield_break.ogg
+share/InfraArcana/audio/sfx_spike_gun.ogg
+share/InfraArcana/audio/sfx_tomb_open.ogg
+share/InfraArcana/audio/sfx_wolf_howl.ogg
+share/InfraArcana/audio/sfx_zombie_growl.ogg
+share/InfraArcana/contact.txt
+share/InfraArcana/credits.txt
+share/InfraArcana/data/highscores
+share/InfraArcana/data/save
+share/InfraArcana/ia
+share/InfraArcana/images/11x19.png
+share/InfraArcana/images/11x22.png
+share/InfraArcana/images/12x24.png
+share/InfraArcana/images/16x24_DOS.png
+share/InfraArcana/images/16x24_typewriter_v1.png
+share/InfraArcana/images/16x24_typewriter_v2.png
+share/InfraArcana/images/16x24_v1.png
+share/InfraArcana/images/16x24_v2.png
+share/InfraArcana/images/16x24_v3.png
+share/InfraArcana/images/8x12_DOS.png
+share/InfraArcana/images/SPECIAL_ELITE_License.txt
+share/InfraArcana/images/gfx_16x24.png
+share/InfraArcana/images/main_menu_logo.png
+share/InfraArcana/images/skull.png
+share/InfraArcana/license.txt
+share/InfraArcana/manual.txt
+share/InfraArcana/release_history.txt
diff --git a/infraarcana/distinfo b/infraarcana/distinfo
index c9fc613..2d2e903 100644
--- a/infraarcana/distinfo
+++ b/infraarcana/distinfo
@@ -1,7 +1,14 @@
 $NetBSD: distinfo,v 1.1 2015/08/19 19:42:29 yhardy Exp $
 
-SHA1 (ia-17.0.tar.gz) = 27cf4e37cf727367899208ad3cec67d2e4c28027
-RMD160 (ia-17.0.tar.gz) = ec57372405bc8f106aa6f1ff0616c1da4f214d78
-Size (ia-17.0.tar.gz) = 19962153 bytes
-SHA1 (patch-src_Config.cpp) = 3de8baf11b217d8640d921b468be579451592896
-SHA1 (patch-src_SaveHandling.cpp) = e57e5674ec255c7205d6d8992a4e32d69134c3d2
+SHA1 (infraarcana/ia-18.2.tar.gz) = 73e21a3c41b130d937b123268678765612b7c7da
+RMD160 (infraarcana/ia-18.2.tar.gz) = 9b7d499506246fe1246e562c4cf81ee64f3630d4
+SHA512 (infraarcana/ia-18.2.tar.gz) = 4a6d09c0836ad0337e0e92e1f554551c2f93c65767779072abce9d9482b5aabc20da14eeb66bfda80d18254e1b42b71c93c4c1da8b5e449ce526db07be73885d
+Size (infraarcana/ia-18.2.tar.gz) = 33576360 bytes
+SHA1 (infraarcana/rl_utils-757bef657fa43e2d7f41192e07227a00c62236e4.zip) = bc96a273a940cd218b9f7ea0819eda2ef45cc920
+RMD160 (infraarcana/rl_utils-757bef657fa43e2d7f41192e07227a00c62236e4.zip) = 51ba0809f8fb915164039eb396a68d34534f9515
+SHA512 (infraarcana/rl_utils-757bef657fa43e2d7f41192e07227a00c62236e4.zip) = 9ad70df01991302fa2b33739c1971072447daf65db1fc5d550208be7f31037bc2558a4f83b2eb5f769a127743949b177b9ac8c979d33c4da80cea3a5edacbf97
+Size (infraarcana/rl_utils-757bef657fa43e2d7f41192e07227a00c62236e4.zip) = 13629 bytes
+SHA1 (patch-Makefile) = fee6998b86b63e1e67ee3d55561865d2f4565013
+SHA1 (patch-src_config.cpp) = ac2ee03728e5dc0e7cd851bd5f9ef0392ae27f22
+SHA1 (patch-src_input.cpp) = a84f3c470d08c9fa84de766fd951286a93dc1855
+SHA1 (patch-src_save__handling.cpp) = 634c7a6db5870861e0d8e1a70a341776c16464a6
diff --git a/infraarcana/files/infraarcana.sh b/infraarcana/files/infraarcana.sh
new file mode 100644
index 0000000..b7e22f3
--- /dev/null
+++ b/infraarcana/files/infraarcana.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+cd @PREFIX@/share/InfraArcana && exec ./ia "$@"
diff --git a/infraarcana/files/infraarcanum.sh b/infraarcana/files/infraarcanum.sh
deleted file mode 100644
index 27f068a..0000000
--- a/infraarcana/files/infraarcanum.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-cd @PREFIX@/share/InfraArcanum && exec ./ia
diff --git a/infraarcana/patches/patch-Makefile b/infraarcana/patches/patch-Makefile
new file mode 100644
index 0000000..71b18f6
--- /dev/null
+++ b/infraarcana/patches/patch-Makefile
@@ -0,0 +1,15 @@
+$NetBSD$
+
+Add X11 search path for libraries.
+Is this a bug in devel/SDL2 ?
+
+--- Makefile.orig	2016-07-02 15:42:10.000000000 +0000
++++ Makefile
+@@ -91,6 +91,7 @@ release debug: LD_FLAGS = \
+   $(shell sdl2-config --libs) \
+   -lSDL2_image \
+   -lSDL2_mixer \
++  ${X11_LDFLAGS} \
+   #
+ 
+ # Executable
diff --git a/infraarcana/patches/patch-src_Config.cpp b/infraarcana/patches/patch-src_Config.cpp
deleted file mode 100644
index 9487839..0000000
--- a/infraarcana/patches/patch-src_Config.cpp
+++ /dev/null
@@ -1,50 +0,0 @@
-$NetBSD: patch-src_Config.cpp,v 1.1 2015/08/19 19:42:29 yhardy Exp $
-
-Store config in home directory
-
---- src/Config.cpp.orig	2015-02-18 19:24:13.000000000 +0000
-+++ src/Config.cpp
-@@ -2,6 +2,7 @@
- 
- #include "Init.h"
- 
-+#include <cstdlib>
- #include <fstream>
- #include <SDL_image.h>
- 
-@@ -472,7 +473,16 @@ void draw(const MenuBrowser* const brows
- void readFile(vector<string>& lines)
- {
-     ifstream file;
--    file.open("data/config");
-+
-+    char *home = getenv("HOME");
-+    string config = "data/config";
-+    if (home != NULL)
-+    {
-+        config = home;
-+        config += "/.ia_config";
-+    }
-+
-+    file.open(config);
-     if (file.is_open())
-     {
-         string line;
-@@ -563,8 +573,16 @@ void setAllVariablesFromLines(vector<str
- void writeLinesToFile(vector<string>& lines)
- {
-     ofstream file;
--    file.open("data/config", ios::trunc);
- 
-+    char *home = getenv("HOME");
-+    string config = "data/config";
-+    if (home != NULL)
-+    {
-+        config = home;
-+        config += "/.ia_config";
-+    }
-+
-+    file.open(config, ios::trunc);
-     for (size_t i = 0; i < lines.size(); ++i)
-     {
-         file << lines[i];
diff --git a/infraarcana/patches/patch-src_SaveHandling.cpp b/infraarcana/patches/patch-src_SaveHandling.cpp
deleted file mode 100644
index c9cf20a..0000000
--- a/infraarcana/patches/patch-src_SaveHandling.cpp
+++ /dev/null
@@ -1,49 +0,0 @@
-$NetBSD: patch-src_SaveHandling.cpp,v 1.1 2015/08/19 19:42:29 yhardy Exp $
-
-Store saves in home directory
-
---- src/SaveHandling.cpp.orig	2015-02-18 19:24:13.000000000 +0000
-+++ src/SaveHandling.cpp
-@@ -1,5 +1,6 @@
- #include "SaveHandling.h"
- 
-+#include <cstdlib>
- #include <fstream>
- #include <iostream>
- 
-@@ -73,7 +74,16 @@ void setupGameFromLines(vector<string>& 
- void writeFile(const vector<string>& lines)
- {
-     ofstream file;
--    file.open("data/save", ios::trunc);
-+
-+    char *home = getenv("HOME");
-+    string save = "data/save";
-+    if (home != NULL)
-+    {
-+        save = home;
-+        save += "/.ia_save";
-+    }
-+
-+    file.open(save, ios::trunc);
- 
-     if (file.is_open())
-     {
-@@ -91,7 +101,16 @@ void readFile(vector<string>& lines)
-     lines.clear();
- 
-     string curLine;
--    ifstream file("data/save");
-+
-+    char *home = getenv("HOME");
-+    string save = "data/save";
-+    if (home != NULL)
-+    {
-+        save = home;
-+        save += "/.ia_save";
-+    }
-+
-+    ifstream file(save);
-     if (file.is_open())
-     {
-         while (getline(file, curLine)) {lines.push_back(curLine);}
diff --git a/infraarcana/patches/patch-src_config.cpp b/infraarcana/patches/patch-src_config.cpp
new file mode 100644
index 0000000..ee90481
--- /dev/null
+++ b/infraarcana/patches/patch-src_config.cpp
@@ -0,0 +1,42 @@
+$NetBSD: patch-src_Config.cpp,v 1.1 2015/08/19 19:42:29 yhardy Exp $
+
+Store config in home directory
+
+--- src/config.cpp.orig	2016-07-02 15:42:10.000000000 +0000
++++ src/config.cpp
+@@ -512,7 +512,16 @@ void draw(const Menu_browser* const brow
+ void read_file(std::vector<std::string>& lines)
+ {
+     std::ifstream file;
+-    file.open("data/config");
++    char *home = getenv("HOME");
++    std::string config = "data/config";
++
++    if (home != NULL)
++    {
++        config = home;
++        config += "/.ia_config";
++    }
++
++    file.open(config);
+ 
+     if (file.is_open())
+     {
+@@ -605,7 +614,16 @@ void set_variables_from_lines(std::vecto
+ void write_lines_to_file(std::vector<std::string>& lines)
+ {
+     std::ofstream file;
+-    file.open("data/config", std::ios::trunc);
++    char *home = getenv("HOME");
++    std::string config = "data/config";
++
++    if (home != NULL)
++    {
++        config = home;
++        config += "/.ia_config";
++    }
++
++    file.open(config, std::ios::trunc);
+ 
+     for (size_t i = 0; i < lines.size(); ++i)
+     {
diff --git a/infraarcana/patches/patch-src_input.cpp b/infraarcana/patches/patch-src_input.cpp
new file mode 100644
index 0000000..67dfedd
--- /dev/null
+++ b/infraarcana/patches/patch-src_input.cpp
@@ -0,0 +1,240 @@
+$NetBSD$
+
+SDL_StartTextInput() does not seem to provide the keys as expected,
+so work around the problem by using the key codes (this does not
+ignore SDL_TEXTINPUT events, it handles the case when SDL_KEYDOWN
+is sent instead).
+
+It looks like devel/SDL2 must depend on inputmethod/ibus for
+SDL_StartTextInput() to work as expected (*cringe*).  Alternatively,
+we need to define X_HAVE_UTF8_STRING when compiling devel/SDL and
+devel/SDL2, but the configure scripts don't provide a means to
+enable this flag (and I could not get the input to work with this
+flag - so I am not sure if the problem is solved in this case).
+
+--- src/input.cpp.orig	2016-07-02 15:42:10.000000000 +0000
++++ src/input.cpp
+@@ -1295,6 +1295,223 @@ Key_data input(const bool IS_O_RETURN)
+                     }
+                     break;
+ 
++                case SDLK_QUOTE:
++                    if (IS_SHIFT_HELD && !is_done)
++                    {
++                        ret = Key_data('"', sdl_key, IS_SHIFT_HELD, IS_CTRL_HELD);
++                        is_done = true;
++                    }
++                case SDLK_COMMA:
++                    if (IS_SHIFT_HELD && !is_done)
++                    {
++                        ret = Key_data('<', sdl_key, IS_SHIFT_HELD, IS_CTRL_HELD);
++                        is_done = true;
++                    }
++                case SDLK_MINUS:
++                    if (IS_SHIFT_HELD && !is_done)
++                    {
++                        ret = Key_data('_', sdl_key, IS_SHIFT_HELD, IS_CTRL_HELD);
++                        is_done = true;
++                    }
++                case SDLK_PERIOD:
++                    if (IS_SHIFT_HELD && !is_done)
++                    {
++                        ret = Key_data('>', sdl_key, IS_SHIFT_HELD, IS_CTRL_HELD);
++                        is_done = true;
++                    }
++                case SDLK_SLASH:
++                    if (IS_SHIFT_HELD && !is_done)
++                    {
++                        ret = Key_data('?', sdl_key, IS_SHIFT_HELD, IS_CTRL_HELD);
++                        is_done = true;
++                    }
++                case SDLK_0:
++                    if (IS_SHIFT_HELD && !is_done)
++                    {
++                        ret = Key_data(')', sdl_key, IS_SHIFT_HELD, IS_CTRL_HELD);
++                        is_done = true;
++                    }
++                case SDLK_1:
++                    if (IS_SHIFT_HELD && !is_done)
++                    {
++                        ret = Key_data('!', sdl_key, IS_SHIFT_HELD, IS_CTRL_HELD);
++                        is_done = true;
++                    }
++                case SDLK_2:
++                    if (IS_SHIFT_HELD && !is_done)
++                    {
++                        ret = Key_data('@', sdl_key, IS_SHIFT_HELD, IS_CTRL_HELD);
++                        is_done = true;
++                    }
++                case SDLK_3:
++                    if (IS_SHIFT_HELD && !is_done)
++                    {
++                        ret = Key_data('#', sdl_key, IS_SHIFT_HELD, IS_CTRL_HELD);
++                        is_done = true;
++                    }
++                case SDLK_4:
++                    if (IS_SHIFT_HELD && !is_done)
++                    {
++                        ret = Key_data('$', sdl_key, IS_SHIFT_HELD, IS_CTRL_HELD);
++                        is_done = true;
++                    }
++                case SDLK_5:
++                    if (IS_SHIFT_HELD && !is_done)
++                    {
++                        ret = Key_data('%', sdl_key, IS_SHIFT_HELD, IS_CTRL_HELD);
++                        is_done = true;
++                    }
++                case SDLK_6:
++                    if (IS_SHIFT_HELD && !is_done)
++                    {
++                        ret = Key_data('^', sdl_key, IS_SHIFT_HELD, IS_CTRL_HELD);
++                        is_done = true;
++                    }
++                case SDLK_7:
++                    if (IS_SHIFT_HELD && !is_done)
++                    {
++                        ret = Key_data('&', sdl_key, IS_SHIFT_HELD, IS_CTRL_HELD);
++                        is_done = true;
++                    }
++                case SDLK_8:
++                    if (IS_SHIFT_HELD && !is_done)
++                    {
++                        ret = Key_data('*', sdl_key, IS_SHIFT_HELD, IS_CTRL_HELD);
++                        is_done = true;
++                    }
++                case SDLK_9:
++                    if (IS_SHIFT_HELD && !is_done)
++                    {
++                        ret = Key_data('(', sdl_key, IS_SHIFT_HELD, IS_CTRL_HELD);
++                        is_done = true;
++                    }
++                case SDLK_SEMICOLON:
++                    if (IS_SHIFT_HELD && !is_done)
++                    {
++                        ret = Key_data(':', sdl_key, IS_SHIFT_HELD, IS_CTRL_HELD);
++                        is_done = true;
++                    }
++                case SDLK_EQUALS:
++                    if (IS_SHIFT_HELD && !is_done)
++                    {
++                        ret = Key_data('+', sdl_key, IS_SHIFT_HELD, IS_CTRL_HELD);
++                        is_done = true;
++                    }
++                case SDLK_LEFTBRACKET:
++                    if (IS_SHIFT_HELD && !is_done)
++                    {
++                        ret = Key_data('{', sdl_key, IS_SHIFT_HELD, IS_CTRL_HELD);
++                        is_done = true;
++                    }
++                case SDLK_BACKSLASH:
++                    if (IS_SHIFT_HELD && !is_done)
++                    {
++                        ret = Key_data('|', sdl_key, IS_SHIFT_HELD, IS_CTRL_HELD);
++                        is_done = true;
++                    }
++                case SDLK_RIGHTBRACKET:
++                    if (IS_SHIFT_HELD && !is_done)
++                    {
++                        ret = Key_data('}', sdl_key, IS_SHIFT_HELD, IS_CTRL_HELD);
++                        is_done = true;
++                    }
++                case SDLK_BACKQUOTE:
++                    if (IS_SHIFT_HELD && !is_done)
++                    {
++                        ret = Key_data('~', sdl_key, IS_SHIFT_HELD, IS_CTRL_HELD);
++                        is_done = true;
++                    }
++                case SDLK_a:
++                case SDLK_b:
++                case SDLK_c:
++                case SDLK_d:
++                case SDLK_e:
++                case SDLK_f:
++                case SDLK_g:
++                case SDLK_h:
++                case SDLK_i:
++                case SDLK_j:
++                case SDLK_k:
++                case SDLK_l:
++                case SDLK_m:
++                case SDLK_n:
++                case SDLK_o:
++                case SDLK_p:
++                case SDLK_q:
++                case SDLK_r:
++                case SDLK_s:
++                case SDLK_t:
++                case SDLK_u:
++                case SDLK_v:
++                case SDLK_w:
++                case SDLK_x:
++                case SDLK_y:
++                case SDLK_z:
++                    if (IS_SHIFT_HELD && !is_done)
++                    {
++                        ret = Key_data(sdl_key-32, sdl_key, IS_SHIFT_HELD, IS_CTRL_HELD);
++                        is_done = true;
++                    }
++                    if (!is_done)
++                    {
++                        ret = Key_data(sdl_key, sdl_key, IS_SHIFT_HELD, IS_CTRL_HELD);
++                        is_done = true;
++                    }
++                    break;
++
++                case SDLK_KP_DIVIDE:
++                    ret = Key_data('/', sdl_key, IS_SHIFT_HELD, IS_CTRL_HELD);
++                    is_done = true;
++                    break;
++                case SDLK_KP_MULTIPLY:
++                    ret = Key_data('*', sdl_key, IS_SHIFT_HELD, IS_CTRL_HELD);
++                    is_done = true;
++                    break;
++                case SDLK_KP_MINUS:
++                    ret = Key_data('-', sdl_key, IS_SHIFT_HELD, IS_CTRL_HELD);
++                    is_done = true;
++                    break;
++                case SDLK_KP_PLUS:
++                    ret = Key_data('+', sdl_key, IS_SHIFT_HELD, IS_CTRL_HELD);
++                    is_done = true;
++                    break;
++                case SDLK_KP_1:
++                    ret = Key_data('1', sdl_key, IS_SHIFT_HELD, IS_CTRL_HELD);
++                    is_done = true;
++                    break;
++                case SDLK_KP_2:
++                    ret = Key_data('2', sdl_key, IS_SHIFT_HELD, IS_CTRL_HELD);
++                    is_done = true;
++                    break;
++                case SDLK_KP_3:
++                    ret = Key_data('3', sdl_key, IS_SHIFT_HELD, IS_CTRL_HELD);
++                    is_done = true;
++                    break;
++                case SDLK_KP_4:
++                    ret = Key_data('4', sdl_key, IS_SHIFT_HELD, IS_CTRL_HELD);
++                    is_done = true;
++                    break;
++                case SDLK_KP_5:
++                    ret = Key_data('5', sdl_key, IS_SHIFT_HELD, IS_CTRL_HELD);
++                    is_done = true;
++                    break;
++                case SDLK_KP_6:
++                    ret = Key_data('6', sdl_key, IS_SHIFT_HELD, IS_CTRL_HELD);
++                    is_done = true;
++                    break;
++                case SDLK_KP_7:
++                    ret = Key_data('7', sdl_key, IS_SHIFT_HELD, IS_CTRL_HELD);
++                    is_done = true;
++                    break;
++                case SDLK_KP_8:
++                    ret = Key_data('8', sdl_key, IS_SHIFT_HELD, IS_CTRL_HELD);
++                    is_done = true;
++                    break;
++                case SDLK_KP_9:
++                    ret = Key_data('9', sdl_key, IS_SHIFT_HELD, IS_CTRL_HELD);
++                    is_done = true;
++                    break;
++
+                 case SDLK_SPACE:
+                 case SDLK_BACKSPACE:
+                 case SDLK_TAB:
diff --git a/infraarcana/patches/patch-src_save__handling.cpp b/infraarcana/patches/patch-src_save__handling.cpp
new file mode 100644
index 0000000..454a6ca
--- /dev/null
+++ b/infraarcana/patches/patch-src_save__handling.cpp
@@ -0,0 +1,42 @@
+$NetBSD: patch-src_SaveHandling.cpp,v 1.1 2015/08/19 19:42:29 yhardy Exp $
+
+Store saves in home directory
+
+--- src/save_handling.cpp.orig	2016-07-02 15:42:10.000000000 +0000
++++ src/save_handling.cpp
+@@ -104,8 +104,16 @@ void load_modules()
+ void write_file()
+ {
+     std::ofstream file;
++    char *home = getenv("HOME");
++    std::string save = "data/save";
+ 
+-    file.open("data/save", std::ios::trunc);
++    if (home != NULL)
++    {
++        save = home;
++        save += "/.ia_save";
++    }
++
++    file.open(save, std::ios::trunc);
+ 
+     if (file.is_open())
+     {
+@@ -125,7 +133,16 @@ void write_file()
+ 
+ void read_file()
+ {
+-    std::ifstream file("data/save");
++    char *home = getenv("HOME");
++    std::string save = "data/save";
++
++    if (home != NULL)
++    {
++        save = home;
++        save += "/.ia_save";
++    }
++
++    std::ifstream file(save);
+ 
+     if (file.is_open())
+     {


Home | Main Index | Thread Index | Old Index