project_files/HedgewarsMobile/Classes/GameSetup.m
author koda
Thu, 16 Dec 2010 01:45:15 +0100
changeset 4540 9b614e420de5
parent 4512 c6aff8ceada0
child 4547 b70004a576a3
permissions -rw-r--r--
add two preferences for enabling/disabling blurry land and multitasking
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3829
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
     1
/*
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
     2
 * Hedgewars-iOS, a Hedgewars port for iOS devices
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
     3
 * Copyright (c) 2009-2010 Vittorio Giovara <vittorio.giovara@gmail.com>
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
     4
 *
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
     6
 * it under the terms of the GNU General Public License as published by
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
     7
 * the Free Software Foundation; version 2 of the License
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
     8
 *
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
    12
 * GNU General Public License for more details.
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
    13
 *
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
    14
 * You should have received a copy of the GNU General Public License
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
    15
 * along with this program; if not, write to the Free Software
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
    16
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
    17
 *
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
    18
 * File created on 10/01/2010.
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
    19
 */
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
    20
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    21
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    22
#import "GameSetup.h"
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    23
#import "SDL_uikitappdelegate.h"
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    24
#import "SDL_net.h"
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    25
#import "PascalImports.h"
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    26
#import "CommodityFunctions.h"
3904
22e4d74240e5 finishing touches to save games handling (help label, dim on overlay, edit text only when table is editable)
koda
parents: 3902
diff changeset
    27
#import "OverlayViewController.h"
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    28
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
    29
#define BUFFER_SIZE 255     // like in original frontend
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    30
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    31
@implementation GameSetup
3935
5ca27a0e9a63 made the new menu toggable
koda
parents: 3930
diff changeset
    32
@synthesize systemSettings, gameConfig, savePath, menuStyle;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    33
3616
85d69ddb41b6 tackling the iphoneos todo (another trial for the beginning sporadic bug, remove curl animation, don't need to go to detail page)
koda
parents: 3613
diff changeset
    34
-(id) initWithDictionary:(NSDictionary *)gameDictionary {
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    35
    if (self = [super init]) {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    36
        ipcPort = randomPort();
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    37
3948
24daa33a3114 some rethinking of initial menu presentation and initial orientation (also merging images should be threadsafe now)
koda
parents: 3941
diff changeset
    38
        // the general settings file + menu style (read by the overlay)
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    39
        NSDictionary *dictSett = [[NSDictionary alloc] initWithContentsOfFile:SETTINGS_FILE()];
3948
24daa33a3114 some rethinking of initial menu presentation and initial orientation (also merging images should be threadsafe now)
koda
parents: 3941
diff changeset
    40
        self.menuStyle = [[dictSett objectForKey:@"menu"] boolValue];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    41
        self.systemSettings = dictSett;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    42
        [dictSett release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    43
3948
24daa33a3114 some rethinking of initial menu presentation and initial orientation (also merging images should be threadsafe now)
koda
parents: 3941
diff changeset
    44
        // this game run settings
3893
568bfd083465 allow more flexibility between viewcontrollers, also added stub pages for saved games
koda
parents: 3891
diff changeset
    45
        self.gameConfig = [gameDictionary objectForKey:@"game_dictionary"];
3948
24daa33a3114 some rethinking of initial menu presentation and initial orientation (also merging images should be threadsafe now)
koda
parents: 3941
diff changeset
    46
24daa33a3114 some rethinking of initial menu presentation and initial orientation (also merging images should be threadsafe now)
koda
parents: 3941
diff changeset
    47
        // is it a netgame?
3893
568bfd083465 allow more flexibility between viewcontrollers, also added stub pages for saved games
koda
parents: 3891
diff changeset
    48
        isNetGame = [[gameDictionary objectForKey:@"netgame"] boolValue];
3948
24daa33a3114 some rethinking of initial menu presentation and initial orientation (also merging images should be threadsafe now)
koda
parents: 3941
diff changeset
    49
24daa33a3114 some rethinking of initial menu presentation and initial orientation (also merging images should be threadsafe now)
koda
parents: 3941
diff changeset
    50
        // is it a Save?
3893
568bfd083465 allow more flexibility between viewcontrollers, also added stub pages for saved games
koda
parents: 3891
diff changeset
    51
        NSString *path = [gameDictionary objectForKey:@"savefile"];
3948
24daa33a3114 some rethinking of initial menu presentation and initial orientation (also merging images should be threadsafe now)
koda
parents: 3941
diff changeset
    52
        // if path is empty it means that you have to create a new file, otherwise read from that file
3898
0a9c3735a713 implemented reloading savefiles
koda
parents: 3895
diff changeset
    53
        if ([path isEqualToString:@""] == YES) {
0a9c3735a713 implemented reloading savefiles
koda
parents: 3895
diff changeset
    54
            NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init];
3978
9660600e43cb fix some glitches
koda
parents: 3976
diff changeset
    55
            [outputFormatter setDateFormat:@"yyyy-MM-dd '@' HH.mm"];
3898
0a9c3735a713 implemented reloading savefiles
koda
parents: 3895
diff changeset
    56
            NSString *newDateString = [outputFormatter stringFromDate:[NSDate date]];
0a9c3735a713 implemented reloading savefiles
koda
parents: 3895
diff changeset
    57
            self.savePath = [SAVES_DIRECTORY() stringByAppendingFormat:@"%@.hws", newDateString];
0a9c3735a713 implemented reloading savefiles
koda
parents: 3895
diff changeset
    58
            [outputFormatter release];
0a9c3735a713 implemented reloading savefiles
koda
parents: 3895
diff changeset
    59
        } else
0a9c3735a713 implemented reloading savefiles
koda
parents: 3895
diff changeset
    60
            self.savePath = path;
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    61
    }
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    62
    return self;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    63
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    64
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    65
-(void) dealloc {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    66
    [gameConfig release];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    67
    [systemSettings release];
3891
f8f0d0ceb19c initial support for savegames
koda
parents: 3829
diff changeset
    68
    [savePath release];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    69
    [super dealloc];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    70
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    71
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    72
#pragma mark -
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    73
#pragma mark Provider functions
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    74
// unpacks team data from the selected team.plist to a sequence of engine commands
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    75
-(void) provideTeamData:(NSString *)teamName forHogs:(NSInteger) numberOfPlayingHogs withHealth:(NSInteger) initialHealth ofColor:(NSNumber *)teamColor {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    76
    /*
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    77
     addteam <32charsMD5hash> <color> <team name>
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    78
     addhh <level> <health> <hedgehog name>
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    79
     <level> is 0 for human, 1-5 for bots (5 is the most stupid)
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    80
    */
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    81
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    82
    NSString *teamFile = [[NSString alloc] initWithFormat:@"%@/%@", TEAMS_DIRECTORY(), teamName];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    83
    NSDictionary *teamData = [[NSDictionary alloc] initWithContentsOfFile:teamFile];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    84
    [teamFile release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    85
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    86
    NSString *teamHashColorAndName = [[NSString alloc] initWithFormat:@"eaddteam %@ %@ %@",
3660
bc125bea5849 complete settings page rework
koda
parents: 3642
diff changeset
    87
                                      [teamData objectForKey:@"hash"], [teamColor stringValue], [teamName stringByDeletingPathExtension]];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    88
    [self sendToEngine: teamHashColorAndName];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    89
    [teamHashColorAndName release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    90
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    91
    NSString *grave = [[NSString alloc] initWithFormat:@"egrave %@", [teamData objectForKey:@"grave"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    92
    [self sendToEngine: grave];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    93
    [grave release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    94
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    95
    NSString *fort = [[NSString alloc] initWithFormat:@"efort %@", [teamData objectForKey:@"fort"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    96
    [self sendToEngine: fort];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    97
    [fort release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    98
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    99
    NSString *voicepack = [[NSString alloc] initWithFormat:@"evoicepack %@", [teamData objectForKey:@"voicepack"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   100
    [self sendToEngine: voicepack];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   101
    [voicepack release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   102
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   103
    NSString *flag = [[NSString alloc] initWithFormat:@"eflag %@", [teamData objectForKey:@"flag"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   104
    [self sendToEngine: flag];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   105
    [flag release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   106
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   107
    NSArray *hogs = [teamData objectForKey:@"hedgehogs"];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   108
    for (int i = 0; i < numberOfPlayingHogs; i++) {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   109
        NSDictionary *hog = [hogs objectAtIndex:i];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   110
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   111
        NSString *hogLevelHealthAndName = [[NSString alloc] initWithFormat:@"eaddhh %@ %d %@",
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   112
                                           [hog objectForKey:@"level"], initialHealth, [hog objectForKey:@"hogname"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   113
        [self sendToEngine: hogLevelHealthAndName];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   114
        [hogLevelHealthAndName release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   115
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   116
        NSString *hogHat = [[NSString alloc] initWithFormat:@"ehat %@", [hog objectForKey:@"hat"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   117
        [self sendToEngine: hogHat];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   118
        [hogHat release];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   119
    }
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   120
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   121
    [teamData release];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   122
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   123
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   124
// unpacks ammostore data from the selected ammo.plist to a sequence of engine commands
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   125
-(void) provideAmmoData:(NSString *)ammostoreName forPlayingTeams:(NSInteger) numberOfTeams {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   126
    NSString *weaponPath = [[NSString alloc] initWithFormat:@"%@/%@",WEAPONS_DIRECTORY(),ammostoreName];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   127
    NSDictionary *ammoData = [[NSDictionary alloc] initWithContentsOfFile:weaponPath];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   128
    [weaponPath release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   129
3621
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3617
diff changeset
   130
    // if we're loading an older version of ammos fill the engine message with 0s
3930
8b00b4f93242 remove a useless field from weaponfile format
koda
parents: 3926
diff changeset
   131
    int diff = HW_getNumberOfWeapons() - [[ammoData objectForKey:@"ammostore_initialqt"] length];
8b00b4f93242 remove a useless field from weaponfile format
koda
parents: 3926
diff changeset
   132
    NSString *update = @"";
8b00b4f93242 remove a useless field from weaponfile format
koda
parents: 3926
diff changeset
   133
    while ([update length] < diff)
8b00b4f93242 remove a useless field from weaponfile format
koda
parents: 3926
diff changeset
   134
        update = [update stringByAppendingString:@"0"];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   135
3621
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3617
diff changeset
   136
    NSString *ammloadt = [[NSString alloc] initWithFormat:@"eammloadt %@%@", [ammoData objectForKey:@"ammostore_initialqt"], update];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   137
    [self sendToEngine: ammloadt];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   138
    [ammloadt release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   139
3621
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3617
diff changeset
   140
    NSString *ammprob = [[NSString alloc] initWithFormat:@"eammprob %@%@", [ammoData objectForKey:@"ammostore_probability"], update];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   141
    [self sendToEngine: ammprob];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   142
    [ammprob release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   143
3621
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3617
diff changeset
   144
    NSString *ammdelay = [[NSString alloc] initWithFormat:@"eammdelay %@%@", [ammoData objectForKey:@"ammostore_delay"], update];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   145
    [self sendToEngine: ammdelay];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   146
    [ammdelay release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   147
3621
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3617
diff changeset
   148
    NSString *ammreinf = [[NSString alloc] initWithFormat:@"eammreinf %@%@", [ammoData objectForKey:@"ammostore_crate"], update];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   149
    [self sendToEngine: ammreinf];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   150
    [ammreinf release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   151
3930
8b00b4f93242 remove a useless field from weaponfile format
koda
parents: 3926
diff changeset
   152
    // send this for each team so it applies the same ammostore to all teams
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   153
    NSString *ammstore = [[NSString alloc] initWithString:@"eammstore"];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   154
    for (int i = 0; i < numberOfTeams; i++)
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   155
        [self sendToEngine: ammstore];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   156
    [ammstore release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   157
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   158
    [ammoData release];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   159
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   160
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   161
// unpacks scheme data from the selected scheme.plist to a sequence of engine commands
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   162
-(NSInteger) provideScheme:(NSString *)schemeName {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   163
    NSString *schemePath = [[NSString alloc] initWithFormat:@"%@/%@",SCHEMES_DIRECTORY(),schemeName];
3781
2bfda544ae48 modified file format for schemes files (which is going to introduce a lot of pre-release bugs, i'm sure)
koda
parents: 3779
diff changeset
   164
    NSDictionary *schemeDictionary = [[NSDictionary alloc] initWithContentsOfFile:schemePath];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   165
    [schemePath release];
3781
2bfda544ae48 modified file format for schemes files (which is going to introduce a lot of pre-release bugs, i'm sure)
koda
parents: 3779
diff changeset
   166
    NSArray *basicArray = [schemeDictionary objectForKey:@"basic"];
2bfda544ae48 modified file format for schemes files (which is going to introduce a lot of pre-release bugs, i'm sure)
koda
parents: 3779
diff changeset
   167
    NSArray *gamemodArray = [schemeDictionary objectForKey:@"gamemod"];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   168
    int result = 0;
4000
ddc4a09889e7 engine: reorder GameFlags and update files, frontend and other stuff
koda
parents: 3996
diff changeset
   169
    int mask = 0x00000004;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   170
4000
ddc4a09889e7 engine: reorder GameFlags and update files, frontend and other stuff
koda
parents: 3996
diff changeset
   171
    // pack the gameflags in a single var and send it
ddc4a09889e7 engine: reorder GameFlags and update files, frontend and other stuff
koda
parents: 3996
diff changeset
   172
    for (NSNumber *value in gamemodArray) {
ddc4a09889e7 engine: reorder GameFlags and update files, frontend and other stuff
koda
parents: 3996
diff changeset
   173
        if ([value boolValue] == YES)
ddc4a09889e7 engine: reorder GameFlags and update files, frontend and other stuff
koda
parents: 3996
diff changeset
   174
            result |= mask;
ddc4a09889e7 engine: reorder GameFlags and update files, frontend and other stuff
koda
parents: 3996
diff changeset
   175
        mask <<= 1;
ddc4a09889e7 engine: reorder GameFlags and update files, frontend and other stuff
koda
parents: 3996
diff changeset
   176
    }
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   177
    NSString *flags = [[NSString alloc] initWithFormat:@"e$gmflags %d",result];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   178
    [self sendToEngine:flags];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   179
    [flags release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   180
4211
7dcbd236ca59 this time i got it right, i'm sure of it; TEST ANYWAYS
koda
parents: 4210
diff changeset
   181
    /* basic game flags */
7dcbd236ca59 this time i got it right, i'm sure of it; TEST ANYWAYS
koda
parents: 4210
diff changeset
   182
    NSString *path = [[NSString alloc] initWithFormat:@"%@/basicFlags_en.plist",IFRONTEND_DIRECTORY()];
7dcbd236ca59 this time i got it right, i'm sure of it; TEST ANYWAYS
koda
parents: 4210
diff changeset
   183
    NSArray *mods = [[NSArray alloc] initWithContentsOfFile:path];
7dcbd236ca59 this time i got it right, i'm sure of it; TEST ANYWAYS
koda
parents: 4210
diff changeset
   184
    [path release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   185
4488
e83216eba1db forgot to update these files
koda
parents: 4478
diff changeset
   186
    int i = 0;
4211
7dcbd236ca59 this time i got it right, i'm sure of it; TEST ANYWAYS
koda
parents: 4210
diff changeset
   187
    // initial health
4488
e83216eba1db forgot to update these files
koda
parents: 4478
diff changeset
   188
    result = [[basicArray objectAtIndex:i++] intValue];
4211
7dcbd236ca59 this time i got it right, i'm sure of it; TEST ANYWAYS
koda
parents: 4210
diff changeset
   189
7dcbd236ca59 this time i got it right, i'm sure of it; TEST ANYWAYS
koda
parents: 4210
diff changeset
   190
    // turn time
4488
e83216eba1db forgot to update these files
koda
parents: 4478
diff changeset
   191
    NSInteger tentativeTurntime = [[basicArray objectAtIndex:i++] intValue];
4210
caa9b08990eb revert 4200:dd54999c2822 - it was breaking schemes. koda. just leave this alone until next release
nemo
parents: 4208
diff changeset
   192
    if (tentativeTurntime >= 100)
caa9b08990eb revert 4200:dd54999c2822 - it was breaking schemes. koda. just leave this alone until next release
nemo
parents: 4208
diff changeset
   193
        tentativeTurntime = 9999;
caa9b08990eb revert 4200:dd54999c2822 - it was breaking schemes. koda. just leave this alone until next release
nemo
parents: 4208
diff changeset
   194
    NSString *turnTime = [[NSString alloc] initWithFormat:@"e$turntime %d",tentativeTurntime * 1000];
caa9b08990eb revert 4200:dd54999c2822 - it was breaking schemes. koda. just leave this alone until next release
nemo
parents: 4208
diff changeset
   195
    [self sendToEngine:turnTime];
caa9b08990eb revert 4200:dd54999c2822 - it was breaking schemes. koda. just leave this alone until next release
nemo
parents: 4208
diff changeset
   196
    [turnTime release];
caa9b08990eb revert 4200:dd54999c2822 - it was breaking schemes. koda. just leave this alone until next release
nemo
parents: 4208
diff changeset
   197
4488
e83216eba1db forgot to update these files
koda
parents: 4478
diff changeset
   198
    NSString *minesTime = [[NSString alloc] initWithFormat:@"e$turntime %d",[[basicArray objectAtIndex:i++] intValue] * 1000];
4478
05029b4d8490 code cleanup
koda
parents: 4244
diff changeset
   199
    [self sendToEngine:minesTime];
05029b4d8490 code cleanup
koda
parents: 4244
diff changeset
   200
    [minesTime release];
05029b4d8490 code cleanup
koda
parents: 4244
diff changeset
   201
4488
e83216eba1db forgot to update these files
koda
parents: 4478
diff changeset
   202
    for (; i < [basicArray count]; i++) {
4211
7dcbd236ca59 this time i got it right, i'm sure of it; TEST ANYWAYS
koda
parents: 4210
diff changeset
   203
        NSDictionary *basicDict = [mods objectAtIndex:i];
7dcbd236ca59 this time i got it right, i'm sure of it; TEST ANYWAYS
koda
parents: 4210
diff changeset
   204
        NSString *command = [basicDict objectForKey:@"command"];
7dcbd236ca59 this time i got it right, i'm sure of it; TEST ANYWAYS
koda
parents: 4210
diff changeset
   205
        NSInteger value = [[basicArray objectAtIndex:i] intValue];
7dcbd236ca59 this time i got it right, i'm sure of it; TEST ANYWAYS
koda
parents: 4210
diff changeset
   206
        if ([basicDict objectForKey:@"checkOverMax"] && value >= [[basicDict objectForKey:@"max"] intValue])
7dcbd236ca59 this time i got it right, i'm sure of it; TEST ANYWAYS
koda
parents: 4210
diff changeset
   207
            value = 9999;
7dcbd236ca59 this time i got it right, i'm sure of it; TEST ANYWAYS
koda
parents: 4210
diff changeset
   208
        NSString *strToSend = [[NSString alloc] initWithFormat:@"%@ %d",command,value];
7dcbd236ca59 this time i got it right, i'm sure of it; TEST ANYWAYS
koda
parents: 4210
diff changeset
   209
        [self sendToEngine:strToSend];
7dcbd236ca59 this time i got it right, i'm sure of it; TEST ANYWAYS
koda
parents: 4210
diff changeset
   210
        [strToSend release];
7dcbd236ca59 this time i got it right, i'm sure of it; TEST ANYWAYS
koda
parents: 4210
diff changeset
   211
    }
7dcbd236ca59 this time i got it right, i'm sure of it; TEST ANYWAYS
koda
parents: 4210
diff changeset
   212
    [mods release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   213
3781
2bfda544ae48 modified file format for schemes files (which is going to introduce a lot of pre-release bugs, i'm sure)
koda
parents: 3779
diff changeset
   214
    [schemeDictionary release];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   215
    return result;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   216
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   217
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   218
#pragma mark -
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   219
#pragma mark Thread/Network relevant code
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   220
// select one of GameSetup method and execute it in a seprate thread
4149
51200479f9d8 update ios port with new health modes, increase sd turns, new game modes, fixed bugs that prevented the creation of AI controlled teams, revisited update modes
koda
parents: 4082
diff changeset
   221
-(void) startThread:(NSString *)selector {
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   222
    SEL usage = NSSelectorFromString(selector);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   223
    [NSThread detachNewThreadSelector:usage toTarget:self withObject:nil];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   224
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   225
3912
e11df2de6af2 have engine try for a second position when map loading fails (in this way it's possible to move Missions data to any path)
koda
parents: 3911
diff changeset
   226
-(void) dumpRawData:(const uint8_t*)buffer ofSize:(uint8_t) length {
e11df2de6af2 have engine try for a second position when map loading fails (in this way it's possible to move Missions data to any path)
koda
parents: 3911
diff changeset
   227
    // is it performant to reopen the stream every time?
e11df2de6af2 have engine try for a second position when map loading fails (in this way it's possible to move Missions data to any path)
koda
parents: 3911
diff changeset
   228
    NSOutputStream *os = [[NSOutputStream alloc] initToFileAtPath:self.savePath append:YES];
e11df2de6af2 have engine try for a second position when map loading fails (in this way it's possible to move Missions data to any path)
koda
parents: 3911
diff changeset
   229
    [os open];
e11df2de6af2 have engine try for a second position when map loading fails (in this way it's possible to move Missions data to any path)
koda
parents: 3911
diff changeset
   230
    [os write:&length maxLength:1];
e11df2de6af2 have engine try for a second position when map loading fails (in this way it's possible to move Missions data to any path)
koda
parents: 3911
diff changeset
   231
    [os write:buffer maxLength:length];
e11df2de6af2 have engine try for a second position when map loading fails (in this way it's possible to move Missions data to any path)
koda
parents: 3911
diff changeset
   232
    [os close];
e11df2de6af2 have engine try for a second position when map loading fails (in this way it's possible to move Missions data to any path)
koda
parents: 3911
diff changeset
   233
    [os release];
e11df2de6af2 have engine try for a second position when map loading fails (in this way it's possible to move Missions data to any path)
koda
parents: 3911
diff changeset
   234
}
e11df2de6af2 have engine try for a second position when map loading fails (in this way it's possible to move Missions data to any path)
koda
parents: 3911
diff changeset
   235
3891
f8f0d0ceb19c initial support for savegames
koda
parents: 3829
diff changeset
   236
// wrapper that computes the length of the message and then sends the command string, saving the command on a file
4512
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   237
-(int) sendToEngine:(NSString *)string {
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   238
    uint8_t length = [string length];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   239
3912
e11df2de6af2 have engine try for a second position when map loading fails (in this way it's possible to move Missions data to any path)
koda
parents: 3911
diff changeset
   240
    [self dumpRawData:(const uint8_t *)[string UTF8String] ofSize:length];
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   241
    SDLNet_TCP_Send(csd, &length, 1);
3891
f8f0d0ceb19c initial support for savegames
koda
parents: 3829
diff changeset
   242
    return SDLNet_TCP_Send(csd, [string UTF8String], length);
f8f0d0ceb19c initial support for savegames
koda
parents: 3829
diff changeset
   243
}
f8f0d0ceb19c initial support for savegames
koda
parents: 3829
diff changeset
   244
f8f0d0ceb19c initial support for savegames
koda
parents: 3829
diff changeset
   245
// wrapper that computes the length of the message and then sends the command string, skipping file writing
4512
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   246
-(int) sendToEngineNoSave:(NSString *)string {
3891
f8f0d0ceb19c initial support for savegames
koda
parents: 3829
diff changeset
   247
    uint8_t length = [string length];
f8f0d0ceb19c initial support for savegames
koda
parents: 3829
diff changeset
   248
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   249
    SDLNet_TCP_Send(csd, &length, 1);
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   250
    return SDLNet_TCP_Send(csd, [string UTF8String], length);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   251
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   252
4512
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   253
-(int) sendToServer:(NSString *)command withArgument:(NSString *)argument {
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   254
    NSString *message = [[NSString alloc] initWithFormat:@"%@\n%@\n\n",command,argument];
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   255
    int result = SDLNet_TCP_Send(esd, [message UTF8String], [message length]);
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   256
    [message release];
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   257
    return result;
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   258
}
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   259
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   260
-(int) sendToServer:(NSString *)command {
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   261
    NSString *message = [[NSString alloc] initWithFormat:@"%@\n\n",command];
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   262
    int result = SDLNet_TCP_Send(esd, [message UTF8String], [message length]);
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   263
    [message release];
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   264
    return result;
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   265
}
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   266
4510
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   267
-(void) serverProtocol {
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   268
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   269
    IPaddress ip;
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   270
    BOOL clientQuit = NO;
4512
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   271
    char *buffer = (char *)malloc(sizeof(char)*BUFFER_SIZE);
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   272
    int dim = BUFFER_SIZE;
4510
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   273
    uint8_t msgSize;
4512
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   274
    NSString *arg = nil;
4510
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   275
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   276
    if (SDLNet_Init() < 0) {
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   277
        DLog(@"SDLNet_Init: %s", SDLNet_GetError());
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   278
        clientQuit = YES;
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   279
    }
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   280
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   281
    // Resolving the host using NULL make network interface to listen
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   282
    if (SDLNet_ResolveHost(&ip, "netserver.hedgewars.org", DEFAULT_NETGAME_PORT) < 0 && !clientQuit) {
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   283
        DLog(@"SDLNet_ResolveHost: %s\n", SDLNet_GetError());
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   284
        clientQuit = YES;
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   285
    }
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   286
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   287
    // Open a connection with the IP provided (listen on the host's port)
4512
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   288
    if (!(esd = SDLNet_TCP_Open(&ip)) && !clientQuit) {
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   289
        DLog(@"SDLNet_TCP_Open: %s %\n", SDLNet_GetError(), DEFAULT_NETGAME_PORT);
4510
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   290
        clientQuit = YES;
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   291
    }
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   292
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   293
    DLog(@"Found server on port %d", DEFAULT_NETGAME_PORT);
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   294
    while (!clientQuit) {
4512
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   295
        int index = 0;
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   296
        BOOL exitBufferLoop = NO;
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   297
        memset(buffer, '\0', dim);
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   298
        
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   299
        while (exitBufferLoop != YES) {
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   300
            msgSize = SDLNet_TCP_Recv(esd, &buffer[index], 2);
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   301
            
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   302
            // exit in case of error
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   303
            if (msgSize <= 0) {
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   304
                DLog(@"SDLNet_TCP_Recv: %s", SDLNet_GetError());
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   305
                clientQuit = YES;
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   306
                break;
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   307
            }
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   308
            
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   309
            // update index position and check for End-Of-Message
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   310
            index += msgSize;
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   311
            if (strncmp(&buffer[index-2], "\n\n", 2) == 0) {
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   312
                exitBufferLoop = YES;
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   313
            }
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   314
            
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   315
            // if message is too big allocate new space
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   316
            if (index >= dim) {
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   317
                dim += BUFFER_SIZE;
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   318
                buffer = (char *)realloc(buffer, dim);
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   319
                if (buffer == NULL) {
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   320
                    clientQuit = YES;
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   321
                    break;
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   322
                }
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   323
            }
4510
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   324
        }
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   325
4512
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   326
        NSString *bufferedMessage = [[NSString alloc] initWithBytes:buffer length:index-2 encoding:NSASCIIStringEncoding];
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   327
        NSArray *listOfCommands = [bufferedMessage componentsSeparatedByString:@"\n"];
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   328
        [bufferedMessage release];
4510
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   329
        NSString *command = [listOfCommands objectAtIndex:0];
4512
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   330
        DLog(@"size = %d, %@", index-2, listOfCommands);
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   331
        if ([command isEqualToString:@"PING"]) {
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   332
            if ([listOfCommands count] > 1)
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   333
                [self sendToServer:@"PONG" withArgument:[listOfCommands objectAtIndex:1]];
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   334
            else
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   335
                [self sendToServer:@"PONG"];
4510
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   336
4512
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   337
            [arg release];
4510
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   338
        }
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   339
        else if ([command isEqualToString:@"NICK"]) {
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   340
            //TODO: what is this for?
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   341
        }
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   342
        else if ([command isEqualToString:@"PROTO"]) {
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   343
            if ([[listOfCommands objectAtIndex:1] intValue] == 34) {
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   344
                //TODO: unused
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   345
            }
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   346
        }
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   347
        else if ([command isEqualToString:@"ROOM"]) {
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   348
            //TODO: stub
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   349
        }
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   350
        else if ([command isEqualToString:@"LOBBY:LEFT"]) {
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   351
            //TODO: stub
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   352
        }
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   353
        else if ([command isEqualToString:@"LOBBY:JOINED"]) {
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   354
            //TODO: stub
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   355
        }
4512
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   356
        else if ([command isEqualToString:@"ASKPASSWORD"]) {
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   357
            //TODO: store hashed password in settings.plist (nil here will vouluntary trigger an exception)
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   358
            [self sendToServer:@"PASSWORD" withArgument:nil];
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   359
        }
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   360
        else if ([command isEqualToString:@"CONNECTED"]) {
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   361
            [self sendToServer:@"NICK" withArgument:@"koda"];
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   362
            [self sendToServer:@"PROTO" withArgument:@"34"];
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   363
        }
4510
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   364
        else if ([command isEqualToString:@"SERVER_MESSAGE"]) {
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   365
            DLog(@"%@", [listOfCommands objectAtIndex:1]);
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   366
        }
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   367
        else if ([command isEqualToString:@"WARNING"]) {
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   368
            if ([listOfCommands count] > 1)
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   369
                DLog(@"Server warning - %@", [listOfCommands objectAtIndex:1]);
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   370
            else
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   371
                DLog(@"Server warning - unknown");
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   372
        }
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   373
        else if ([command isEqualToString:@"ERROR"]) {
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   374
            DLog(@"Server error - %@", [listOfCommands objectAtIndex:1]);
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   375
        }
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   376
        else if ([command isEqualToString:@"BYE"]) {
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   377
            //TODO: handle "Reconnected too fast"
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   378
            DLog(@"Server disconnected, reason: %@", [listOfCommands objectAtIndex:1]);
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   379
            clientQuit = YES;
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   380
        }
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   381
        else {
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   382
            DLog(@"Unknown/Unsupported message received: %@", command);
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   383
        }
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   384
    }
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   385
    DLog(@"Server exited, ending thread");
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   386
4512
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   387
    free(buffer);
4510
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   388
    // Close the client socket
4512
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   389
    SDLNet_TCP_Close(esd);
4510
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   390
    SDLNet_Quit();
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   391
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   392
    [pool release];
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   393
}
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   394
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   395
// method that handles net setup with engine and keeps connection alive
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   396
-(void) engineProtocol {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   397
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   398
    TCPsocket sd;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   399
    IPaddress ip;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   400
    int eProto;
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   401
    BOOL clientQuit;
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   402
    uint8_t buffer[BUFFER_SIZE];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   403
    uint8_t msgSize;
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   404
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   405
    clientQuit = NO;
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   406
    csd = NULL;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   407
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   408
    if (SDLNet_Init() < 0) {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   409
        DLog(@"SDLNet_Init: %s", SDLNet_GetError());
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   410
        clientQuit = YES;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   411
    }
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   412
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   413
    // Resolving the host using NULL make network interface to listen
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   414
    if (SDLNet_ResolveHost(&ip, NULL, ipcPort) < 0 && !clientQuit) {
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   415
        DLog(@"SDLNet_ResolveHost: %s\n", SDLNet_GetError());
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   416
        clientQuit = YES;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   417
    }
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   418
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   419
    // Open a connection with the IP provided (listen on the host's port)
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   420
    if (!(sd = SDLNet_TCP_Open(&ip)) && !clientQuit) {
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   421
        DLog(@"SDLNet_TCP_Open: %s %\n", SDLNet_GetError(), ipcPort);
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   422
        clientQuit = YES;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   423
    }
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   424
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   425
    DLog(@"Waiting for a client on port %d", ipcPort);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   426
    while (csd == NULL)
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   427
        csd = SDLNet_TCP_Accept(sd);
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   428
    SDLNet_TCP_Close(sd);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   429
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   430
    while (!clientQuit) {
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   431
        msgSize = 0;
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   432
        memset(buffer, '\0', BUFFER_SIZE);
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   433
        if (SDLNet_TCP_Recv(csd, &msgSize, sizeof(uint8_t)) <= 0)
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   434
            break;
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   435
        if (SDLNet_TCP_Recv(csd, buffer, msgSize) <=0)
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   436
            break;
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   437
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   438
        switch (buffer[0]) {
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   439
            case 'C':
3626
19f78afa0188 fix the multitouch shooting and moving
koda
parents: 3624
diff changeset
   440
                DLog(@"sending game config...\n%@",self.gameConfig);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   441
3893
568bfd083465 allow more flexibility between viewcontrollers, also added stub pages for saved games
koda
parents: 3891
diff changeset
   442
                if (isNetGame == YES)
568bfd083465 allow more flexibility between viewcontrollers, also added stub pages for saved games
koda
parents: 3891
diff changeset
   443
                    [self sendToEngineNoSave:@"TN"];
568bfd083465 allow more flexibility between viewcontrollers, also added stub pages for saved games
koda
parents: 3891
diff changeset
   444
                else
568bfd083465 allow more flexibility between viewcontrollers, also added stub pages for saved games
koda
parents: 3891
diff changeset
   445
                    [self sendToEngineNoSave:@"TL"];
3891
f8f0d0ceb19c initial support for savegames
koda
parents: 3829
diff changeset
   446
                NSString *saveHeader = @"TS";
3912
e11df2de6af2 have engine try for a second position when map loading fails (in this way it's possible to move Missions data to any path)
koda
parents: 3911
diff changeset
   447
                [self dumpRawData:(const uint8_t *)[saveHeader UTF8String] ofSize:[saveHeader length]];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   448
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   449
                // seed info
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   450
                [self sendToEngine:[self.gameConfig objectForKey:@"seed_command"]];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   451
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   452
                // dimension of the map
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   453
                [self sendToEngine:[self.gameConfig objectForKey:@"templatefilter_command"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   454
                [self sendToEngine:[self.gameConfig objectForKey:@"mapgen_command"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   455
                [self sendToEngine:[self.gameConfig objectForKey:@"mazesize_command"]];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   456
3642
fb39fecca350 support for static map added to iFrontend
koda
parents: 3634
diff changeset
   457
                // static land (if set)
fb39fecca350 support for static map added to iFrontend
koda
parents: 3634
diff changeset
   458
                NSString *staticMap = [self.gameConfig objectForKey:@"staticmap_command"];
fb39fecca350 support for static map added to iFrontend
koda
parents: 3634
diff changeset
   459
                if ([staticMap length] != 0)
fb39fecca350 support for static map added to iFrontend
koda
parents: 3634
diff changeset
   460
                    [self sendToEngine:staticMap];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   461
3910
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents: 3904
diff changeset
   462
                // lua script (if set)
3911
46d7a5cf8ac6 further rework of MapConfigViewController, lists missions correctly (they don't load fine yet)
koda
parents: 3910
diff changeset
   463
                NSString *script = [self.gameConfig objectForKey:@"mission_command"];
3910
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents: 3904
diff changeset
   464
                if ([script length] != 0)
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents: 3904
diff changeset
   465
                    [self sendToEngine:script];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents: 3904
diff changeset
   466
                
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   467
                // theme info
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   468
                [self sendToEngine:[self.gameConfig objectForKey:@"theme_command"]];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   469
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   470
                // scheme (returns initial health)
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   471
                NSInteger health = [self provideScheme:[self.gameConfig objectForKey:@"scheme"]];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   472
4000
ddc4a09889e7 engine: reorder GameFlags and update files, frontend and other stuff
koda
parents: 3996
diff changeset
   473
                // send an ammostore for each team
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   474
                NSArray *teamsConfig = [self.gameConfig objectForKey:@"teams_list"];
4000
ddc4a09889e7 engine: reorder GameFlags and update files, frontend and other stuff
koda
parents: 3996
diff changeset
   475
                [self provideAmmoData:[self.gameConfig objectForKey:@"weapon"] forPlayingTeams:[teamsConfig count]];
ddc4a09889e7 engine: reorder GameFlags and update files, frontend and other stuff
koda
parents: 3996
diff changeset
   476
ddc4a09889e7 engine: reorder GameFlags and update files, frontend and other stuff
koda
parents: 3996
diff changeset
   477
                // finally add hogs
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   478
                for (NSDictionary *teamData in teamsConfig) {
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   479
                    [self provideTeamData:[teamData objectForKey:@"team"]
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   480
                                  forHogs:[[teamData objectForKey:@"number"] intValue]
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   481
                               withHealth:health
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   482
                                  ofColor:[teamData objectForKey:@"color"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   483
                }
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   484
                break;
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   485
            case '?':
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   486
                DLog(@"Ping? Pong!");
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   487
                [self sendToEngine:@"!"];
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   488
                break;
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   489
            case 'E':
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   490
                DLog(@"ERROR - last console line: [%s]", &buffer[1]);
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   491
                clientQuit = YES;
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   492
                break;
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   493
            case 'e':
3912
e11df2de6af2 have engine try for a second position when map loading fails (in this way it's possible to move Missions data to any path)
koda
parents: 3911
diff changeset
   494
                [self dumpRawData:buffer ofSize:msgSize];
e11df2de6af2 have engine try for a second position when map loading fails (in this way it's possible to move Missions data to any path)
koda
parents: 3911
diff changeset
   495
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   496
                sscanf((char *)buffer, "%*s %d", &eProto);
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   497
                short int netProto = 0;
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   498
                char *versionStr;
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   499
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   500
                HW_versionInfo(&netProto, &versionStr);
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   501
                if (netProto == eProto) {
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   502
                    DLog(@"Setting protocol version %d (%s)", eProto, versionStr);
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   503
                } else {
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   504
                    DLog(@"ERROR - wrong protocol number: [%s] - expecting %d", &buffer[1], eProto);
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   505
                    clientQuit = YES;
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   506
                }
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   507
                break;
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   508
            case 'i':
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   509
                switch (buffer[1]) {
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   510
                    case 'r':
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   511
                        DLog(@"Winning team: %s", &buffer[2]);
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   512
                        break;
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   513
                    case 'k':
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   514
                        DLog(@"Best Hedgehog: %s", &buffer[2]);
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   515
                        break;
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   516
                    default:
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   517
                        // TODO: losta stats stuff
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   518
                        break;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   519
                }
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   520
                break;
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   521
            case 'q':
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   522
                // game ended, can remove the savefile
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   523
                [[NSFileManager defaultManager] removeItemAtPath:self.savePath error:nil];
3978
9660600e43cb fix some glitches
koda
parents: 3976
diff changeset
   524
                //[[NSNotificationCenter defaultCenter] postNotificationName:@"removedSave" object:nil];
3930
8b00b4f93242 remove a useless field from weaponfile format
koda
parents: 3926
diff changeset
   525
                // and remove + disable the overlay
8b00b4f93242 remove a useless field from weaponfile format
koda
parents: 3926
diff changeset
   526
                [[NSNotificationCenter defaultCenter] postNotificationName:@"remove overlay" object:nil];
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   527
                break;
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   528
            default:
3912
e11df2de6af2 have engine try for a second position when map loading fails (in this way it's possible to move Missions data to any path)
koda
parents: 3911
diff changeset
   529
                [self dumpRawData:buffer ofSize:msgSize];
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   530
                break;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   531
        }
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   532
    }
4510
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   533
    DLog(@"Engine exited, ending thread");
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   534
    // wait a little to let the client close cleanly
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   535
    [NSThread sleepForTimeInterval:2];
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   536
    // Close the client socket
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   537
    SDLNet_TCP_Close(csd);
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   538
    SDLNet_Quit();
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   539
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   540
    [pool release];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   541
    //Invoking this method should be avoided as it does not give your thread a chance to clean up any resources it allocated during its execution.
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   542
    //[NSThread exit];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   543
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   544
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   545
#pragma mark -
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   546
#pragma mark Setting methods
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   547
// returns an array of c-strings that are read by engine at startup
3893
568bfd083465 allow more flexibility between viewcontrollers, also added stub pages for saved games
koda
parents: 3891
diff changeset
   548
-(const char **)getSettings: (NSString *)recordFile {
3922
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3916
diff changeset
   549
    NSInteger width, height;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   550
    NSString *ipcString = [[NSString alloc] initWithFormat:@"%d", ipcPort];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   551
    NSString *localeString = [[NSString alloc] initWithFormat:@"%@.txt", [[NSLocale currentLocale] objectForKey:NSLocaleLanguageCode]];
3922
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3916
diff changeset
   552
    NSString *rotation;
3941
017b2b31e1c6 integrate nicely with external display
koda
parents: 3935
diff changeset
   553
    if (IS_DUALHEAD()) {
3922
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3916
diff changeset
   554
        CGRect screenBounds = [[[UIScreen screens] objectAtIndex:1] bounds];
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3916
diff changeset
   555
        width = (int) screenBounds.size.width;
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3916
diff changeset
   556
        height = (int) screenBounds.size.height;
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3916
diff changeset
   557
        rotation = @"0";
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3916
diff changeset
   558
    } else {
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3916
diff changeset
   559
        CGRect screenBounds = [[UIScreen mainScreen] bounds];
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3916
diff changeset
   560
        width = (int) screenBounds.size.height;
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3916
diff changeset
   561
        height = (int) screenBounds.size.width;
3948
24daa33a3114 some rethinking of initial menu presentation and initial orientation (also merging images should be threadsafe now)
koda
parents: 3941
diff changeset
   562
        UIDeviceOrientation orientation = (UIDeviceOrientation) [[self.gameConfig objectForKey:@"orientation"] intValue];
24daa33a3114 some rethinking of initial menu presentation and initial orientation (also merging images should be threadsafe now)
koda
parents: 3941
diff changeset
   563
        if (orientation == UIDeviceOrientationLandscapeLeft)
24daa33a3114 some rethinking of initial menu presentation and initial orientation (also merging images should be threadsafe now)
koda
parents: 3941
diff changeset
   564
            rotation = @"-90";
24daa33a3114 some rethinking of initial menu presentation and initial orientation (also merging images should be threadsafe now)
koda
parents: 3941
diff changeset
   565
        else
24daa33a3114 some rethinking of initial menu presentation and initial orientation (also merging images should be threadsafe now)
koda
parents: 3941
diff changeset
   566
            rotation = @"90";
3922
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3916
diff changeset
   567
    }
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3916
diff changeset
   568
        
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3916
diff changeset
   569
    NSString *horizontalSize = [[NSString alloc] initWithFormat:@"%d", width];
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3916
diff changeset
   570
    NSString *verticalSize = [[NSString alloc] initWithFormat:@"%d", height];
3613
cfd3c6536a09 make runtime quality check for iDevices
koda
parents: 3598
diff changeset
   571
    const char **gameArgs = (const char**) malloc(sizeof(char *) * 10);
3634
93d260c96635 cWeaponTooltips -> rqTooltipsOff
koda
parents: 3626
diff changeset
   572
    NSInteger tmpQuality;
4540
9b614e420de5 add two preferences for enabling/disabling blurry land and multitasking
koda
parents: 4512
diff changeset
   573
    BOOL enhanced = [[self.systemSettings objectForKey:@"enhanced"] boolValue];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   574
3670
4c673e57f0d7 use llvm to compile, don't preview map on wimpier devices, merge vsync, fix iphone launch image
koda
parents: 3660
diff changeset
   575
    NSString *modelId = modelType();
4540
9b614e420de5 add two preferences for enabling/disabling blurry land and multitasking
koda
parents: 4512
diff changeset
   576
    if ([modelId hasPrefix:@"iPhone1"] || [modelId hasPrefix:@"iPod1,1"] || [modelId hasPrefix:@"iPod2,1"])     // = iPhone and iPhone 3G or iPod Touch or iPod Touch 2G
9b614e420de5 add two preferences for enabling/disabling blurry land and multitasking
koda
parents: 4512
diff changeset
   577
        tmpQuality = 0x00000001 | 0x00000002 | 0x00000008 | 0x00000040;                 // rqLowRes | rqBlurryLand | rqSimpleRope | rqKillFlakes
9b614e420de5 add two preferences for enabling/disabling blurry land and multitasking
koda
parents: 4512
diff changeset
   578
    else if ([modelId hasPrefix:@"iPhone2"] || [modelId hasPrefix:@"iPod3"])                                    // = iPhone 3GS or iPod Touch 3G
9b614e420de5 add two preferences for enabling/disabling blurry land and multitasking
koda
parents: 4512
diff changeset
   579
        tmpQuality = 0x00000002 | 0x00000040;                                           // rqBlurryLand | rqKillFlakes
9b614e420de5 add two preferences for enabling/disabling blurry land and multitasking
koda
parents: 4512
diff changeset
   580
    else if ([modelId hasPrefix:@"iPad1"] || enhanced == NO)                                                    // = iPad 1G or not enhanced mode
9b614e420de5 add two preferences for enabling/disabling blurry land and multitasking
koda
parents: 4512
diff changeset
   581
        tmpQuality = 0x00000002;                                                        // rqBlurryLand
9b614e420de5 add two preferences for enabling/disabling blurry land and multitasking
koda
parents: 4512
diff changeset
   582
    else                                                                                                        // = everything else
9b614e420de5 add two preferences for enabling/disabling blurry land and multitasking
koda
parents: 4512
diff changeset
   583
        tmpQuality = 0;                                                                 // full quality
9b614e420de5 add two preferences for enabling/disabling blurry land and multitasking
koda
parents: 4512
diff changeset
   584
9b614e420de5 add two preferences for enabling/disabling blurry land and multitasking
koda
parents: 4512
diff changeset
   585
    if (IS_IPAD() == NO)                                                                                        // = disable tooltips on phone
3634
93d260c96635 cWeaponTooltips -> rqTooltipsOff
koda
parents: 3626
diff changeset
   586
        tmpQuality = tmpQuality | 0x00000400;
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   587
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   588
    // prevents using an empty nickname
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   589
    NSString *username;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   590
    NSString *originalUsername = [self.systemSettings objectForKey:@"username"];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   591
    if ([originalUsername length] == 0)
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   592
        username = [[NSString alloc] initWithFormat:@"MobileUser-%@",ipcString];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   593
    else
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   594
        username = [[NSString alloc] initWithString:originalUsername];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   595
3779
3351a017d4ad tap to dismiss 'get ready', add a toggle to enable/disable it
koda
parents: 3752
diff changeset
   596
    gameArgs[ 0] = [ipcString UTF8String];                                                       //ipcPort
3922
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3916
diff changeset
   597
    gameArgs[ 1] = [horizontalSize UTF8String];                                                  //cScreenWidth
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3916
diff changeset
   598
    gameArgs[ 2] = [verticalSize UTF8String];                                                    //cScreenHeight
3779
3351a017d4ad tap to dismiss 'get ready', add a toggle to enable/disable it
koda
parents: 3752
diff changeset
   599
    gameArgs[ 3] = [[[NSNumber numberWithInteger:tmpQuality] stringValue] UTF8String];           //quality
3825
fd6c20cd90e3 typos, reduced sound size and last minute fixes
koda
parents: 3803
diff changeset
   600
    gameArgs[ 4] = "en.txt";//[localeString UTF8String];                                                    //cLocaleFName
3779
3351a017d4ad tap to dismiss 'get ready', add a toggle to enable/disable it
koda
parents: 3752
diff changeset
   601
    gameArgs[ 5] = [username UTF8String];                                                        //UserNick
3351a017d4ad tap to dismiss 'get ready', add a toggle to enable/disable it
koda
parents: 3752
diff changeset
   602
    gameArgs[ 6] = [[[self.systemSettings objectForKey:@"sound"] stringValue] UTF8String];       //isSoundEnabled
3351a017d4ad tap to dismiss 'get ready', add a toggle to enable/disable it
koda
parents: 3752
diff changeset
   603
    gameArgs[ 7] = [[[self.systemSettings objectForKey:@"music"] stringValue] UTF8String];       //isMusicEnabled
3351a017d4ad tap to dismiss 'get ready', add a toggle to enable/disable it
koda
parents: 3752
diff changeset
   604
    gameArgs[ 8] = [[[self.systemSettings objectForKey:@"alternate"] stringValue] UTF8String];   //cAltDamage
3922
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3916
diff changeset
   605
    gameArgs[ 9] = [rotation UTF8String];                                                        //rotateQt
3893
568bfd083465 allow more flexibility between viewcontrollers, also added stub pages for saved games
koda
parents: 3891
diff changeset
   606
    gameArgs[10] = [recordFile UTF8String];                                                      //recordFileName
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   607
3922
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3916
diff changeset
   608
    [verticalSize release];
44804043b691 iPad Video Out support (+less warnings +code update for latest SDL)
koda
parents: 3916
diff changeset
   609
    [horizontalSize release];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   610
    [localeString release];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   611
    [ipcString release];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   612
    [username release];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   613
    return gameArgs;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   614
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   615
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   616
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   617
@end