Index: src/Cube.mm ================================================================== --- src/Cube.mm +++ src/Cube.mm @@ -133,41 +133,41 @@ gl_init(_width, _height); log(@"basetex"); int xs, ys; if (!installtex(2, - [_userDataIRI IRIByAppendingPathComponent:@"data/newchars.png"], + [_gameDataIRI IRIByAppendingPathComponent:@"data/newchars.png"], &xs, &ys, false) || !installtex(3, - [_userDataIRI + [_gameDataIRI IRIByAppendingPathComponent:@"data/martin/base.png"], &xs, &ys, false) || !installtex(6, - [_userDataIRI + [_gameDataIRI IRIByAppendingPathComponent:@"data/martin/ball1.png"], &xs, &ys, false) || !installtex(7, - [_userDataIRI + [_gameDataIRI IRIByAppendingPathComponent:@"data/martin/smoke.png"], &xs, &ys, false) || !installtex(8, - [_userDataIRI + [_gameDataIRI IRIByAppendingPathComponent:@"data/martin/ball2.png"], &xs, &ys, false) || !installtex(9, - [_userDataIRI + [_gameDataIRI IRIByAppendingPathComponent:@"data/martin/ball3.png"], &xs, &ys, false) || !installtex(4, - [_userDataIRI + [_gameDataIRI IRIByAppendingPathComponent:@"data/explosion.jpg"], &xs, &ys, false) || !installtex(5, - [_userDataIRI IRIByAppendingPathComponent:@"data/items.png"], + [_gameDataIRI IRIByAppendingPathComponent:@"data/items.png"], &xs, &ys, false) || !installtex(1, - [_userDataIRI + [_gameDataIRI IRIByAppendingPathComponent:@"data/crosshair.png"], &xs, &ys, false)) fatal(@"could not find core textures (hint: run cube from the " @"parent of the bin directory)"); @@ -180,12 +180,13 @@ exec(@"data/keymap.cfg"); exec(@"data/menus.cfg"); exec(@"data/prefabs.cfg"); exec(@"data/sounds.cfg"); exec(@"servers.cfg"); - if (!execfile(@"config.cfg")) - execfile(@"data/defaults.cfg"); + if (!execfile([_userDataIRI IRIByAppendingPathComponent:@"config.cfg"])) + execfile([_gameDataIRI + IRIByAppendingPathComponent:@"data/defaults.cfg"]); exec(@"autoexec.cfg"); log(@"localconnect"); localconnect(); // if this map is changed, also change depthcorrect() Index: src/commands.mm ================================================================== --- src/commands.mm +++ src/commands.mm @@ -336,17 +336,19 @@ completeidx = 0; } } bool -execfile(OFString *cfgfile) +execfile(OFIRI *cfgfile) { @autoreleasepool { OFString *command; @try { - command = [OFString stringWithContentsOfFile:cfgfile]; - } @catch (id e) { + command = [OFString stringWithContentsOfIRI:cfgfile]; + } @catch (OFOpenItemFailedException *e) { + return false; + } @catch (OFReadFailedException *e) { return false; } execute(command); return true; @@ -354,14 +356,16 @@ } void exec(OFString *cfgfile) { - if (!execfile(cfgfile)) { - @autoreleasepool { + @autoreleasepool { + if (!execfile([Cube.sharedInstance.userDataIRI + IRIByAppendingPathComponent:cfgfile]) && + !execfile([Cube.sharedInstance.gameDataIRI + IRIByAppendingPathComponent:cfgfile])) conoutf(@"could not read \"%@\"", cfgfile); - } } } void writecfg() Index: src/protos.h ================================================================== --- src/protos.h +++ src/protos.h @@ -7,11 +7,11 @@ extern int getvar(OFString *name); extern bool identexists(OFString *name); extern bool addcommand(OFString *name, void (*fun)(), int narg); extern int execute(OFString *p, bool down = true); extern void exec(OFString *cfgfile); -extern bool execfile(OFString *cfgfile); +extern bool execfile(OFIRI *cfgfile); extern void resetcomplete(); extern void complete(OFString *s); extern void alias(OFString *name, OFString *action); extern OFString *getalias(OFString *name); extern void writecfg(); Index: src/worldio.mm ================================================================== --- src/worldio.mm +++ src/worldio.mm @@ -382,10 +382,12 @@ OFString *aliasname = [OFString stringWithFormat:@"level_trigger_%d", l]; if (identexists(aliasname)) alias(aliasname, @""); } - execfile(@"data/default_map_settings.cfg"); - execfile(pcfname); - execfile(mcfname); + OFIRI *gameDataIRI = Cube.sharedInstance.gameDataIRI; + execfile([gameDataIRI IRIByAppendingPathComponent: + @"data/default_map_settings.cfg"]); + execfile([gameDataIRI IRIByAppendingPathComponent:pcfname]); + execfile([gameDataIRI IRIByAppendingPathComponent:mcfname]); } }