lots of untested stuff for the ifrontend
authorkoda
Tue, 13 Apr 2010 14:39:05 +0000
changeset 3339 d558bc5a73c5
parent 3338 dee9beba85cc
child 3340 96dd168b080b
lots of untested stuff for the ifrontend
cocoaTouch/GravesViewController.h
cocoaTouch/GravesViewController.m
cocoaTouch/HogHatViewController.h
cocoaTouch/HogHatViewController.m
cocoaTouch/LevelViewController.h
cocoaTouch/LevelViewController.m
cocoaTouch/SingleTeamViewController.m
cocoaTouch/VoicesViewController.h
cocoaTouch/VoicesViewController.m
cocoaTouch/otherSrc/CommodityFunctions.h
cocoaTouch/otherSrc/CommodityFunctions.m
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cocoaTouch/GravesViewController.h	Tue Apr 13 14:39:05 2010 +0000
@@ -0,0 +1,25 @@
+//
+//  HogHatViewController.h
+//  HedgewarsMobile
+//
+//  Created by Vittorio on 02/04/10.
+//  Copyright 2010 __MyCompanyName__. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+
+@interface GravesViewController : UITableViewController {
+    NSDictionary *teamDictionary;
+    
+    NSArray *graveArray;
+    NSArray *graveSprites;
+    NSIndexPath *lastIndexPath;
+}
+
+@property (nonatomic,retain) NSDictionary *teamDictionary;
+@property (nonatomic,retain) NSArray *graveArray;
+@property (nonatomic,retain) NSArray *graveSprites;
+@property (nonatomic,retain) NSIndexPath *lastIndexPath;
+
+@end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cocoaTouch/GravesViewController.m	Tue Apr 13 14:39:05 2010 +0000
@@ -0,0 +1,190 @@
+//
+//  HogHatViewController.m
+//  HedgewarsMobile
+//
+//  Created by Vittorio on 02/04/10.
+//  Copyright 2010 __MyCompanyName__. All rights reserved.
+//
+
+#import "HogHatViewController.h"
+#import "CommodityFunctions.h"
+
+
+@implementation GravesViewController
+@synthesize teamDictionary, graveArray, graveSprites, lastIndexPath;
+
+
+-(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
+	return rotationManager(interfaceOrientation);
+}
+
+
+#pragma mark -
+#pragma mark View lifecycle
+- (void)viewDidLoad {
+    [super viewDidLoad];
+
+    // load all the voices names and store them into voiceArray
+    NSArray *array = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:GRAVES_DIRECTORY() error:NULL];
+    self.graveArray = array;
+    [array release];
+
+    NSMutableArray *sprites = [[NSMutableArray alloc] initWithCapacity:[graveArray count];
+    for (NSString *graveName in graveArray) {
+	NSString *gravePath = [[NSString alloc] initWithFormat@"%@/%@",GRAVES_DIRECTORY(),graveName];
+	UIImage *image = [[UIImage alloc] initWithContentsOfFile:gravePath];
+	[gravePath release];
+	[sprites addObject:image];
+	[image release];
+    }
+    self.graveSprites = sprites;
+    [sprites release];
+}
+
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    
+    // this moves the tableview to the top
+    [self.tableView setContentOffset:CGPointMake(0,0) animated:NO];
+}
+
+/*
+- (void)viewDidAppear:(BOOL)animated {
+    [super viewDidAppear:animated];
+}
+*/
+/*
+- (void)viewWillDisappear:(BOOL)animated {
+    [super viewWillDisappear:animated];
+}
+*/
+/*
+- (void)viewDidDisappear:(BOOL)animated {
+    [super viewDidDisappear:animated];
+}
+*/
+
+
+#pragma mark -
+#pragma mark Table view data source
+-(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
+    return 1;
+}
+
+-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return [self.graveArray count];
+}
+
+// Customize the appearance of table view cells.
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    
+    static NSString *CellIdentifier = @"Cell";
+    
+    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
+    if (cell == nil) {
+        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
+    }
+    
+    NSString *grave = [[graveArray objectAtIndex:[indexPath row]] stringByDeletingPathExtension];
+    cell.textLabel.text = grave;
+    
+    if ([grave isEqualToString:[hog objectForKey:@"grave"]]) {
+        cell.accessoryType = UITableViewCellAccessoryCheckmark;
+        self.lastIndexPath = indexPath;
+    } else {
+        cell.accessoryType = UITableViewCellAccessoryNone;
+    }
+    
+    cell.imageView.image = [spriteArray objectAtIndex:[indexPath row]]:
+    return cell;
+}
+
+
+/*
+// Override to support conditional editing of the table view.
+- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
+    // Return NO if you do not want the specified item to be editable.
+    return YES;
+}
+*/
+
+
+/*
+// Override to support editing the table view.
+- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
+    
+    if (editingStyle == UITableViewCellEditingStyleDelete) {
+        // Delete the row from the data source
+        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:YES];
+    }   
+    else if (editingStyle == UITableViewCellEditingStyleInsert) {
+        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
+    }   
+}
+*/
+
+
+/*
+// Override to support rearranging the table view.
+- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
+}
+*/
+
+
+/*
+// Override to support conditional rearranging of the table view.
+- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
+    // Return NO if you do not want the item to be re-orderable.
+    return YES;
+}
+*/
+
+
+#pragma mark -
+#pragma mark Table view delegate
+- (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    int newRow = [indexPath row];
+    int oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1;
+    
+    if (newRow != oldRow) {
+	[teamDictionary setObject:[graveArray objectAtIndex:newRow] forKey:@"grave"];
+        
+        // tell our boss to write this new stuff on disk
+        [[NSNotificationCenter defaultCenter] postNotificationName:@"setWriteNeedTeams" object:nil];
+        [self.tableView reloadData];
+        
+        self.lastIndexPath = indexPath;
+        [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];
+     
+    [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
+    [self.navigationController popViewControllerAnimated:YES];
+}
+
+
+#pragma mark -
+#pragma mark Memory management
+- (void)didReceiveMemoryWarning {
+    // Releases the view if it doesn't have a superview.
+    [super didReceiveMemoryWarning];
+    // Relinquish ownership any cached data, images, etc that aren't in use.
+}
+
+- (void)viewDidUnload {
+    [super viewDidUnload];
+    self.lastIndexPath = nil;
+    self.teamDictionary = nil;
+    self.graveArray = nil;
+    self.spriteArray = nil;
+}
+
+- (void)dealloc {
+    [spriteArray release];
+    [graveArray release];
+    [teamDictionary release];
+    [lastIndexPath release];
+    [super dealloc];
+}
+
+
+@end
+
--- a/cocoaTouch/HogHatViewController.h	Mon Apr 12 21:51:09 2010 +0000
+++ b/cocoaTouch/HogHatViewController.h	Tue Apr 13 14:39:05 2010 +0000
@@ -18,7 +18,7 @@
     NSIndexPath *lastIndexPath;
 }
 
-@property (nonatomic,retain) NSDictionary * teamDictionary;
+@property (nonatomic,retain) NSDictionary *teamDictionary;
 @property (nonatomic) NSInteger selectedHog;
 @property (nonatomic,retain) NSArray *hatArray;
 @property (nonatomic,retain) NSArray *hatSprites;
--- a/cocoaTouch/HogHatViewController.m	Mon Apr 12 21:51:09 2010 +0000
+++ b/cocoaTouch/HogHatViewController.m	Tue Apr 13 14:39:05 2010 +0000
@@ -28,7 +28,8 @@
     NSString *hatsDirectory = HATS_DIRECTORY();
     NSArray *array = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:hatsDirectory error:NULL];
     self.hatArray = array;
-    
+    [array release];
+
     // load all the hat images from the previous array but save only the first sprite and store it in hatSprites
     NSMutableArray *spriteArray = [[NSMutableArray alloc] initWithCapacity:[hatArray count]];
     for (int i=0; i < [hatArray count]; i++) {
@@ -161,6 +162,7 @@
     
     if (newRow != oldRow) {
         // if the two selected rows differ update data on the hog dictionary and reload table content
+	// TODO: maybe this section could be cleaned up
         NSDictionary *oldHog = [[teamDictionary objectForKey:@"hedgehogs"] objectAtIndex:selectedHog];
         
         NSMutableDictionary *newHog = [[NSMutableDictionary alloc] initWithDictionary: oldHog];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cocoaTouch/LevelViewController.h	Tue Apr 13 14:39:05 2010 +0000
@@ -0,0 +1,25 @@
+//
+//  HogHatViewController.h
+//  HedgewarsMobile
+//
+//  Created by Vittorio on 02/04/10.
+//  Copyright 2010 __MyCompanyName__. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+
+@interface LevelViewController : UITableViewController {
+    NSDictionary *teamDictionary;
+    
+    NSArray *levelArray;
+    NSArray *levelSprites;
+    NSIndexPath *lastIndexPath;
+}
+
+@property (nonatomic,retain) NSDictionary *teamDictionary;
+@property (nonatomic,retain) NSArray *levelArray;
+@property (nonatomic,retain) NSArray *levelSprites;
+@property (nonatomic,retain) NSIndexPath *lastIndexPath;
+
+@end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cocoaTouch/LevelViewController.m	Tue Apr 13 14:39:05 2010 +0000
@@ -0,0 +1,198 @@
+//
+//  HogHatViewController.m
+//  HedgewarsMobile
+//
+//  Created by Vittorio on 02/04/10.
+//  Copyright 2010 __MyCompanyName__. All rights reserved.
+//
+
+#import "HogHatViewController.h"
+#import "CommodityFunctions.h"
+
+
+@implementation LevelViewController
+@synthesize teamDictionary, levelArray, levelSprites, lastIndexPath;
+
+
+-(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
+	return rotationManager(interfaceOrientation);
+}
+
+
+#pragma mark -
+#pragma mark View lifecycle
+- (void)viewDidLoad {
+    [super viewDidLoad];
+
+    NSArray *array = [[NSArray alloc] initWithObjects:
+                             NSLocalizedString(@"Human",@""),
+                             NSLocalizedString(@"Weaky",@""),
+                             NSLocalizedString(@"Average",@""),
+                             NSLocalizedString(@"Bully",@""),
+                             NSLocalizedString(@"Aggressive",@""),nil]
+    self.levelArray = array;
+    [array release];
+/*
+    NSMutableArray *sprites = [[NSMutableArray alloc] initWithCapacity:[graveArray count];
+    for (NSString *graveName in graveArray) {
+	NSString *gravePath = [[NSString alloc] initWithFormat@"%@/%@",GRAVES_DIRECTORY(),graveName];
+	UIImage *image = [[UIImage alloc] initWithContentsOfFile:gravePath];
+	[gravePath release];
+	[sprites addObject:image];
+	[image release];
+    }
+    self.graveSprites = sprites;
+    [sprites release];
+*/
+}
+
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    
+    // this moves the tableview to the top
+    [self.tableView setContentOffset:CGPointMake(0,0) animated:NO];
+}
+
+/*
+- (void)viewDidAppear:(BOOL)animated {
+    [super viewDidAppear:animated];
+}
+*/
+/*
+- (void)viewWillDisappear:(BOOL)animated {
+    [super viewWillDisappear:animated];
+}
+*/
+/*
+- (void)viewDidDisappear:(BOOL)animated {
+    [super viewDidDisappear:animated];
+}
+*/
+
+
+#pragma mark -
+#pragma mark Table view data source
+-(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
+    return 1;
+}
+
+-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return [self.levelArray count];
+}
+
+// Customize the appearance of table view cells.
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    
+    static NSString *CellIdentifier = @"Cell";
+    
+    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
+    if (cell == nil) {
+        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
+    }
+    
+    cell.textLabel.text = [[levelArray objectAtIndex:[indexPath row]] stringValue];
+    NSDictionary *hog = [[self.teamDictionary objectForKey:@"hedgehogs"] objectAtIndex:0]
+    if ([cell.textLabel.text isEqualToString:[[hog objectForKey:@"level"]] stringValue]) {
+        cell.accessoryType = UITableViewCellAccessoryCheckmark;
+        self.lastIndexPath = indexPath;
+    } else {
+        cell.accessoryType = UITableViewCellAccessoryNone;
+    }
+    
+    cell.imageView.image = [levelSprites objectAtIndex:[indexPath row]]:
+    return cell;
+}
+
+
+/*
+// Override to support conditional editing of the table view.
+- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
+    // Return NO if you do not want the specified item to be editable.
+    return YES;
+}
+*/
+
+
+/*
+// Override to support editing the table view.
+- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
+    
+    if (editingStyle == UITableViewCellEditingStyleDelete) {
+        // Delete the row from the data source
+        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:YES];
+    }   
+    else if (editingStyle == UITableViewCellEditingStyleInsert) {
+        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
+    }   
+}
+*/
+
+
+/*
+// Override to support rearranging the table view.
+- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
+}
+*/
+
+
+/*
+// Override to support conditional rearranging of the table view.
+- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
+    // Return NO if you do not want the item to be re-orderable.
+    return YES;
+}
+*/
+
+
+#pragma mark -
+#pragma mark Table view delegate
+- (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    int newRow = [indexPath row];
+    int oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1;
+    
+    if (newRow != oldRow) {
+	NSMutableArray *hogs = [teamDictionary objectForKey:@"hedgehogs"];
+
+	for (NSDictionary *hog in hogs) {
+		[hog setObject:[NSNumber numberWithInt:newRow] forKey:@"level"];
+	}
+        
+        // tell our boss to write this new stuff on disk
+        [[NSNotificationCenter defaultCenter] postNotificationName:@"setWriteNeedTeams" object:nil];
+        [self.tableView reloadData];
+        
+        self.lastIndexPath = indexPath;
+        [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];
+     
+    [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
+    [self.navigationController popViewControllerAnimated:YES];
+}
+
+
+#pragma mark -
+#pragma mark Memory management
+- (void)didReceiveMemoryWarning {
+    // Releases the view if it doesn't have a superview.
+    [super didReceiveMemoryWarning];
+    // Relinquish ownership any cached data, images, etc that aren't in use.
+}
+
+- (void)viewDidUnload {
+    [super viewDidUnload];
+    self.lastIndexPath = nil;
+    self.teamDictionary = nil;
+    self.levelArray = nil;
+    self.levelSprites = nil;
+}
+
+- (void)dealloc {
+    [levelArray release];
+    [levelSprites release];
+    [teamDictionary release];
+    [lastIndexPath release];
+    [super dealloc];
+}
+
+
+@end
+
--- a/cocoaTouch/SingleTeamViewController.m	Mon Apr 12 21:51:09 2010 +0000
+++ b/cocoaTouch/SingleTeamViewController.m	Tue Apr 13 14:39:05 2010 +0000
@@ -101,7 +101,7 @@
     [super viewDidLoad];
    
     // labels for the entries
-    NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:
+    NSArray *array = [[NSArray alloc] initWithObjects:
                              NSLocalizedString(@"Grave",@""),
                              NSLocalizedString(@"Voice",@""),
                              NSLocalizedString(@"Fort",@""),
@@ -168,7 +168,7 @@
         UIImage *hatSprite = [[UIImage alloc] initWithCGImage:cgImgage];
         CGImageRelease(cgImgage);
         
-        [array addObject:mergeTwoImages(normalHogSprite, hatSprite)];
+        [array addObject:mergeHogHatSprites(normalHogSprite, hatSprite)];
         [hatSprite release];
     }
     [normalHogSprite release];
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cocoaTouch/VoicesViewController.h	Tue Apr 13 14:39:05 2010 +0000
@@ -0,0 +1,27 @@
+//
+//  HogHatViewController.h
+//  HedgewarsMobile
+//
+//  Created by Vittorio on 02/04/10.
+//  Copyright 2010 __MyCompanyName__. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import "SDL_mixer.h"
+
+
+@interface VoicesViewController : UITableViewController {
+    NSDictionary *teamDictionary;
+    
+    NSArray *voiceArray;
+    NSIndexPath *lastIndexPath;
+
+    Mix_Music *musicBeingPlayed;
+}
+
+@property (nonatomic,retain) NSDictionary *teamDictionary;
+@property (nonatomic,retain) NSArray *voiceArray;
+@property (nonatomic,retain) NSIndexPath *lastIndexPath;
+@property (nonatomic,retain) Mix_Music *musicBeingPlayed;
+
+@end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cocoaTouch/VoicesViewController.m	Tue Apr 13 14:39:05 2010 +0000
@@ -0,0 +1,207 @@
+//
+//  HogHatViewController.m
+//  HedgewarsMobile
+//
+//  Created by Vittorio on 02/04/10.
+//  Copyright 2010 __MyCompanyName__. All rights reserved.
+//
+
+#import "HogHatViewController.h"
+#import "CommodityFunctions.h"
+
+
+@implementation VoicesViewController
+@synthesize teamDictionary, voiceArray, lastIndexPath, musicBeingPlayed;
+
+
+-(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
+	return rotationManager(interfaceOrientation);
+}
+
+
+#pragma mark -
+#pragma mark View lifecycle
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    srandom(time(NULL));
+
+    Mix_OpenAudio(44100, AUDIO_S16SYS, 2, 1024);
+    musicBeingPlayed = NULL;
+
+    // load all the voices names and store them into voiceArray
+    NSArray *array = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:VOICES_DIRECTORY() error:NULL];
+    self.voiceArray = array;
+    [array release];
+}
+
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    
+    // this moves the tableview to the top
+    [self.tableView setContentOffset:CGPointMake(0,0) animated:NO];
+}
+
+/*
+- (void)viewDidAppear:(BOOL)animated {
+    [super viewDidAppear:animated];
+}
+*/
+
+- (void)viewWillDisappear:(BOOL)animated {
+    [super viewWillDisappear:animated];
+    if(musicBeingPlayed != NULL) {
+	Mix_HaltMusic();
+	Mix_FreeMusic(musicBeingPlayed);
+	musicBeingPlayed = NULL;
+    }
+}
+
+/*
+- (void)viewDidDisappear:(BOOL)animated {
+    [super viewDidDisappear:animated];
+}
+*/
+
+
+#pragma mark -
+#pragma mark Table view data source
+-(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
+    return 1;
+}
+
+-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return [self.voiceArray count];
+}
+
+// Customize the appearance of table view cells.
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    
+    static NSString *CellIdentifier = @"Cell";
+    
+    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
+    if (cell == nil) {
+        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
+    }
+    
+    NSString *voice = [[voiceArray objectAtIndex:[indexPath row]] stringByDeletingPathExtension];
+    cell.textLabel.text = voice;
+    
+    if ([voice isEqualToString:[teamDictionary objectForKey:@"voicepack"]]) {
+        cell.accessoryType = UITableViewCellAccessoryCheckmark;
+        self.lastIndexPath = indexPath;
+    } else {
+        cell.accessoryType = UITableViewCellAccessoryNone;
+    }
+
+    return cell;
+}
+
+
+/*
+// Override to support conditional editing of the table view.
+- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
+    // Return NO if you do not want the specified item to be editable.
+    return YES;
+}
+*/
+
+
+/*
+// Override to support editing the table view.
+- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
+    
+    if (editingStyle == UITableViewCellEditingStyleDelete) {
+        // Delete the row from the data source
+        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:YES];
+    }   
+    else if (editingStyle == UITableViewCellEditingStyleInsert) {
+        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
+    }   
+}
+*/
+
+
+/*
+// Override to support rearranging the table view.
+- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
+}
+*/
+
+
+/*
+// Override to support conditional rearranging of the table view.
+- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
+    // Return NO if you do not want the item to be re-orderable.
+    return YES;
+}
+*/
+
+
+#pragma mark -
+#pragma mark Table view delegate
+- (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    int newRow = [indexPath row];
+    int oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1;
+    
+    if (newRow != oldRow) {
+	[teamDictionary setObject:[voiceArray objectAtIndex:newRow] forKey:@"voicepack"];
+        
+        // tell our boss to write this new stuff on disk
+        [[NSNotificationCenter defaultCenter] postNotificationName:@"setWriteNeedTeams" object:nil];
+        [self.tableView reloadData];
+        
+        self.lastIndexPath = indexPath;
+        [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];
+    } 
+    [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
+
+    if(musicBeingPlayed != NULL) {
+	Mix_HaltMusic();
+	Mix_FreeMusic(musicBeingPlayed);
+	musicBeingPlayed = NULL;
+    }
+    // the keyword static prevents re-initialization of the variable
+    NSString *voiceDir = [[NSString alloc] initWithFormat:@"%@/%@/",VOICES_DIRECTORY(),[voiceArray objectAtIndex:newRow];
+    NSArray *array = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:voiceDir error:NULL];
+
+    int index = random() % [array count];
+    
+    music = Mix_LoadMUS([[voiceDir stringByAppendingString:[array objectAtIndex:index]] UTF8String]);
+    [array release];
+    [voiceDir release];
+}
+
+
+#pragma mark -
+#pragma mark Memory management
+- (void)didReceiveMemoryWarning {
+    Mix_HaltMusic();
+    Mix_FreeMusic(musicBeingPlayed);
+    musicBeingPlayed = NULL;
+    // Releases the view if it doesn't have a superview.
+    [super didReceiveMemoryWarning];
+    // Relinquish ownership any cached data, images, etc that aren't in use.
+}
+
+- (void)viewDidUnload {
+    [super viewDidUnload];
+
+    Mix_CloseAudio();
+    self.musicBeingPlayed = NULL;
+    self.lastIndexPath = nil;
+    self.teamDictionary = nil;
+    self.voiceArray = nil;
+}
+
+- (void)dealloc {
+    [musicBeingPlayed release];
+    [voiceArray release];
+    [teamDictionary release];
+    [lastIndexPath release];
+    [super dealloc];
+}
+
+
+@end
+
+
--- a/cocoaTouch/otherSrc/CommodityFunctions.h	Mon Apr 12 21:51:09 2010 +0000
+++ b/cocoaTouch/otherSrc/CommodityFunctions.h	Tue Apr 13 14:39:05 2010 +0000
@@ -10,15 +10,21 @@
 
 #define MAX_HOGS 8
 
+
 #define SETTINGS_FILE()         [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) \
                                  objectAtIndex:0] stringByAppendingString:@"/settings.plist"]
+
 #define TEAMS_DIRECTORY()       [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) \
                                  objectAtIndex:0] stringByAppendingString:@"/Teams/"]
+
+#define VOICES_DIRECTORY()	[[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/Data/Sounds/voices/"]
 #define GRAPHICS_DIRECTORY()    [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/Data/Graphics/"]
 #define HATS_DIRECTORY()        [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/Data/Graphics/Hats/"]
-#define FLAGS_DIRECTORY()       [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/Data/Graphics/Flags/"]
+#define FLAGS_DIRECTORY()       [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/Data/Graphics/Flags/"
+#define GRAVES_DIRECTORY()      [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/Data/Graphics/Graves/"]
 #define FORTS_DIRECTORY()       [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/Data/Forts/"]
 
 void createTeamNamed (NSString *nameWithoutExt);
-UIImage *mergeTwoImages (UIImage *firstImage, UIImage *secondImage);
+UIImage *mergeHogHatSprites (UIImage *firstImage, UIImage *secondImage);
 BOOL rotationManager (UIInterfaceOrientation interfaceOrientation);
+
--- a/cocoaTouch/otherSrc/CommodityFunctions.m	Mon Apr 12 21:51:09 2010 +0000
+++ b/cocoaTouch/otherSrc/CommodityFunctions.m	Tue Apr 13 14:39:05 2010 +0000
@@ -23,7 +23,7 @@
     
     for (int i = 0; i < MAX_HOGS; i++) {
         NSString *hogName = [[NSString alloc] initWithFormat:@"hedgehog %d",i];
-        NSDictionary *hog = [[NSDictionary alloc] initWithObjectsAndKeys:@"100",@"health", @"0",@"level",
+	NSDictionary *hog = [[NSDictionary alloc] initWithObjectsAndKeys:@"100",@"health", [NSNumber numberWithInt:0],@"level",
                              hogName,@"hogname", @"NoHat",@"hat", nil];
         [hogName release];
         [hedgehogs addObject:hog];