# HG changeset patch # User koda # Date 1285556295 -7200 # Node ID e11df2de6af2b0574210ba45d08916f9e4fd88d3 # Parent 46d7a5cf8ac6bcc28e8ffc1209871555804ee9d3 have engine try for a second position when map loading fails (in this way it's possible to move Missions data to any path) remove nsstringextra and implement raw dump when needed diff -r 46d7a5cf8ac6 -r e11df2de6af2 hedgewars/uConsts.pas --- a/hedgewars/uConsts.pas Mon Sep 27 01:51:12 2010 +0200 +++ b/hedgewars/uConsts.pas Mon Sep 27 04:58:15 2010 +0200 @@ -40,7 +40,7 @@ TPathType = (ptNone, ptData, ptGraphics, ptThemes, ptCurrTheme, ptTeams, ptMaps, ptMapCurrent, ptDemos, ptSounds, ptGraves, ptFonts, ptForts, - ptLocale, ptAmmoMenu, ptHedgehog, ptVoices, ptHats, ptFlags); + ptLocale, ptAmmoMenu, ptHedgehog, ptVoices, ptHats, ptFlags, ptMissionMaps); TSprite = (sprWater, sprCloud, sprBomb, sprBigDigit, sprFrame, sprLag, sprArrow, sprGrenade, sprTargetP, sprBee, @@ -460,7 +460,8 @@ 'Graphics/Hedgehog', // ptHedgehog 'Sounds/voices', // ptVoices 'Graphics/Hats', // ptHats - 'Graphics/Flags' // ptFlags + 'Graphics/Flags', // ptFlags + 'Missions/Maps' // ptMissionMaps ); cTagsMasks : array[0..15] of byte = (7, 0, 0, 0, 15, 6, 4, 5, 0, 0, 0, 0, 0, 14, 12, 13); diff -r 46d7a5cf8ac6 -r e11df2de6af2 hedgewars/uLand.pas --- a/hedgewars/uLand.pas Mon Sep 27 01:51:12 2010 +0200 +++ b/hedgewars/uLand.pas Mon Sep 27 04:58:15 2010 +0200 @@ -52,7 +52,7 @@ function LandBackPixel(x, y: LongInt): LongWord; implementation -uses uConsole, uStore, uMisc, uRandom, uTeams, uLandObjects, Adler32, uIO, uLandTexture; +uses uConsole, uStore, uMisc, uRandom, uTeams, uLandObjects, Adler32, uIO, uLandTexture, sysutils; operator=(const a, b: direction) c: Boolean; begin @@ -1165,22 +1165,35 @@ var tmpsurf: PSDL_Surface; s: shortstring; f: textfile; + mapName: shortstring; begin isMap:= true; WriteLnToConsole('Loading land from file...'); AddProgress; -tmpsurf:= LoadImage(Pathz[ptMapCurrent] + '/map', ifAlpha or ifCritical or ifTransparent or ifIgnoreCaps); +tmpsurf:= LoadImage(Pathz[ptMapCurrent] + '/map', ifAlpha or ifTransparent or ifIgnoreCaps); +if tmpsurf = nil then +begin + mapName:= ExtractFileName(Pathz[ptMapCurrent]); + tmpsurf:= LoadImage(Pathz[ptMissionMaps] + '/' + mapName + '/map', ifAlpha or ifCritical or ifTransparent or ifIgnoreCaps); +end; TryDo((tmpsurf^.w <= LAND_WIDTH) and (tmpsurf^.h <= LAND_HEIGHT), 'Map dimensions too big!', true); // unC0Rr - should this be passed from the GUI? I am not sure which layer does what s:= Pathz[ptMapCurrent] + '/map.cfg'; WriteLnToConsole('Fetching map HH limit'); +{$I-} Assign(f, s); filemode:= 0; // readonly Reset(f); +if IOResult <> 0 then +begin + s:= Pathz[ptMissionMaps] + '/' + mapName + '/map.cfg'; + Assign(f, s); + Reset(f); +end; Readln(f); if not eof(f) then Readln(f, MaxHedgehogs); - +{$I+} if (MaxHedgehogs = 0) then MaxHedgehogs:= 18; playHeight:= tmpsurf^.h; diff -r 46d7a5cf8ac6 -r e11df2de6af2 project_files/HedgewarsMobile/Classes/GameSetup.m --- a/project_files/HedgewarsMobile/Classes/GameSetup.m Mon Sep 27 01:51:12 2010 +0200 +++ b/project_files/HedgewarsMobile/Classes/GameSetup.m Mon Sep 27 04:58:15 2010 +0200 @@ -251,11 +251,21 @@ [NSThread detachNewThreadSelector:usage toTarget:self withObject:nil]; } +-(void) dumpRawData:(const uint8_t*)buffer ofSize:(uint8_t) length { + // is it performant to reopen the stream every time? + NSOutputStream *os = [[NSOutputStream alloc] initToFileAtPath:self.savePath append:YES]; + [os open]; + [os write:&length maxLength:1]; + [os write:buffer maxLength:length]; + [os close]; + [os release]; +} + // wrapper that computes the length of the message and then sends the command string, saving the command on a file -(int) sendToEngine: (NSString *)string { uint8_t length = [string length]; - [[NSString stringWithFormat:@"%c%@",length,string] appendToFile:savePath]; + [self dumpRawData:(const uint8_t *)[string UTF8String] ofSize:length]; SDLNet_TCP_Send(csd, &length, 1); return SDLNet_TCP_Send(csd, [string UTF8String], length); } @@ -304,8 +314,6 @@ SDLNet_TCP_Close(sd); while (!clientQuit) { - NSString *msgToSave = nil; - NSOutputStream *os = nil; msgSize = 0; memset(buffer, '\0', BUFFER_SIZE); if (SDLNet_TCP_Recv(csd, &msgSize, sizeof(uint8_t)) <= 0) @@ -322,7 +330,7 @@ else [self sendToEngineNoSave:@"TL"]; NSString *saveHeader = @"TS"; - [[NSString stringWithFormat:@"%c%@",[saveHeader length], saveHeader] appendToFile:savePath]; + [self dumpRawData:(const uint8_t *)[saveHeader UTF8String] ofSize:[saveHeader length]]; // seed info [self sendToEngine:[self.gameConfig objectForKey:@"seed_command"]]; @@ -367,9 +375,8 @@ clientQuit = YES; break; case 'e': - msgToSave = [NSString stringWithFormat:@"%c%s",msgSize,buffer]; - [msgToSave appendToFile:self.savePath]; - + [self dumpRawData:buffer ofSize:msgSize]; + sscanf((char *)buffer, "%*s %d", &eProto); short int netProto = 0; char *versionStr; @@ -404,13 +411,7 @@ setGameRunning(NO); break; default: - // is it performant to reopen the stream every time? - os = [[NSOutputStream alloc] initToFileAtPath:self.savePath append:YES]; - [os open]; - [os write:&msgSize maxLength:1]; - [os write:buffer maxLength:msgSize]; - [os close]; - [os release]; + [self dumpRawData:buffer ofSize:msgSize]; break; } } diff -r 46d7a5cf8ac6 -r e11df2de6af2 project_files/HedgewarsMobile/Classes/MapConfigViewController.m --- a/project_files/HedgewarsMobile/Classes/MapConfigViewController.m Mon Sep 27 01:51:12 2010 +0200 +++ b/project_files/HedgewarsMobile/Classes/MapConfigViewController.m Mon Sep 27 04:58:15 2010 +0200 @@ -171,6 +171,7 @@ self.themeCommand = [NSString stringWithFormat:@"etheme %@", [split objectAtIndex:0]]; self.staticMapCommand = [NSString stringWithFormat:@"emap %@", [source objectAtIndex:index]]; + if (scIndex != 3) self.missionCommand = @""; else diff -r 46d7a5cf8ac6 -r e11df2de6af2 project_files/HedgewarsMobile/Classes/NSStringExtra.h --- a/project_files/HedgewarsMobile/Classes/NSStringExtra.h Mon Sep 27 01:51:12 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -/* - * Hedgewars-iOS, a Hedgewars port for iOS devices - * Copyright (c) 2009-2010 Vittorio Giovara - * - * 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; version 2 of the License - * - * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * File created on 21/09/2010. - */ - - -#import - -@interface NSString (extra) - --(BOOL) appendToFile:(NSString *)path; --(BOOL) appendToFile:(NSString *)path usingEncoding:(NSStringEncoding) encoding; - -@end diff -r 46d7a5cf8ac6 -r e11df2de6af2 project_files/HedgewarsMobile/Classes/NSStringExtra.m --- a/project_files/HedgewarsMobile/Classes/NSStringExtra.m Mon Sep 27 01:51:12 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,60 +0,0 @@ -/* - * Hedgewars-iOS, a Hedgewars port for iOS devices - * Copyright (c) 2009-2010 Vittorio Giovara - * - * 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; version 2 of the License - * - * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * File created on 21/09/2010. - */ - - -#import "NSStringExtra.h" - -@implementation NSString (extra) - --(BOOL) appendToFile:(NSString *)path { - NSOutputStream* os = [[NSOutputStream alloc] initToFileAtPath:path append:YES]; - NSData *allData = [self dataUsingEncoding:NSUTF8StringEncoding]; - - [os open]; - [os write:[allData bytes] maxLength:[allData length]]; - [os close]; - - [os release]; - return YES; -} - --(BOOL) appendToFile:(NSString *)path usingStream:(NSOutputStream *)os { - NSData *allData = [self dataUsingEncoding:NSUTF8StringEncoding]; - [os write:[allData bytes] maxLength:[allData length]]; - return YES; -} - -// by http://iphonedevelopment.blogspot.com/2010/08/nsstring-appendtofileusingencoding.html --(BOOL) appendToFile:(NSString *)path usingEncoding:(NSStringEncoding) encoding { - NSFileHandle *fh = [NSFileHandle fileHandleForWritingAtPath:path]; - if (fh == nil) - return [self writeToFile:path atomically:YES encoding:encoding error:nil]; - - [fh truncateFileAtOffset:[fh seekToEndOfFile]]; - NSData *encoded = [self dataUsingEncoding:encoding]; - - if (encoded == nil) - return NO; - - [fh writeData:encoded]; - return YES; -} - -@end diff -r 46d7a5cf8ac6 -r e11df2de6af2 project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj --- a/project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj Mon Sep 27 01:51:12 2010 +0200 +++ b/project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj Mon Sep 27 04:58:15 2010 +0200 @@ -25,7 +25,6 @@ 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; 28FD15000DC6FC520079059D /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 28FD14FF0DC6FC520079059D /* OpenGLES.framework */; }; 28FD15080DC6FC5B0079059D /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 28FD15070DC6FC5B0079059D /* QuartzCore.framework */; settings = {ATTRIBUTES = (Required, ); }; }; - 611D9B12124949D000008271 /* NSStringExtra.m in Sources */ = {isa = PBXBuildFile; fileRef = 611D9B11124949D000008271 /* NSStringExtra.m */; }; 611D9BFB12497E9800008271 /* SavedGamesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 611D9BF912497E9800008271 /* SavedGamesViewController.m */; }; 611D9BFC12497E9800008271 /* SavedGamesViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 611D9BFA12497E9800008271 /* SavedGamesViewController.xib */; }; 611DA031124E2BC500008271 /* background_med.png in Resources */ = {isa = PBXBuildFile; fileRef = 611DA030124E2BC500008271 /* background_med.png */; }; @@ -721,8 +720,6 @@ 28FD14FF0DC6FC520079059D /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; }; 28FD15070DC6FC5B0079059D /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; 32CA4F630368D1EE00C91783 /* Hedgewars_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Hedgewars_Prefix.pch; sourceTree = ""; }; - 611D9B10124949D000008271 /* NSStringExtra.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NSStringExtra.h; path = Classes/NSStringExtra.h; sourceTree = ""; }; - 611D9B11124949D000008271 /* NSStringExtra.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NSStringExtra.m; path = Classes/NSStringExtra.m; sourceTree = ""; }; 611D9BF812497E9800008271 /* SavedGamesViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SavedGamesViewController.h; sourceTree = ""; }; 611D9BF912497E9800008271 /* SavedGamesViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SavedGamesViewController.m; sourceTree = ""; }; 611D9BFA12497E9800008271 /* SavedGamesViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SavedGamesViewController.xib; sourceTree = ""; }; @@ -1014,8 +1011,6 @@ 6165922B11CA9BD500D6E256 /* SquareButtonView.m */, 6165922C11CA9BD500D6E256 /* UIImageExtra.h */, 6165922D11CA9BD500D6E256 /* UIImageExtra.m */, - 611D9B10124949D000008271 /* NSStringExtra.h */, - 611D9B11124949D000008271 /* NSStringExtra.m */, 619C5BA0124FA59000D041AE /* MapPreviewButtonView.h */, 619C5BA1124FA59000D041AE /* MapPreviewButtonView.m */, ); @@ -2253,7 +2248,6 @@ 61F2E7CE1205EDE0005734F7 /* AboutViewController.m in Sources */, 611EEAEE122B2A4D00DF6938 /* HelpPageViewController.m in Sources */, 6199E839124647DE00DADF8C /* SupportViewController.m in Sources */, - 611D9B12124949D000008271 /* NSStringExtra.m in Sources */, 611D9BFB12497E9800008271 /* SavedGamesViewController.m in Sources */, 619C5AF4124F7E3100D041AE /* LuaPas.pas in Sources */, 619C5BA2124FA59000D041AE /* MapPreviewButtonView.m in Sources */,