about summary refs log tree commit diff stats
Commit message (Collapse)AuthorAgeFilesLines
* Atbash lasts until you solve a puzzleStar Rauchenberger2023-06-172-18/+26
|
* Atbash trapStar Rauchenberger2023-06-163-2/+51
|
* HOT CRUSTS change should always happen v0.7.0Star Rauchenberger2023-06-061-10/+10
|
* Bump versionStar Rauchenberger2023-06-061-1/+1
|
* Update README.mdStar Rauchenberger2023-06-041-2/+3
|
* Reduce double/triple puzzles in Knight/NightStar Rauchenberger2023-06-041-0/+5
|
* Wondrous FIRE should be midred in panel shuffleStar Rauchenberger2023-06-032-1/+4
|
* Reveal snipes in panel shuffleStar Rauchenberger2023-06-022-6/+25
|
* HOT CRUSTS special treatmentStar Rauchenberger2023-06-021-0/+11
|
* Fixed art gallery starting room bug v0.6.0Star Rauchenberger2023-05-271-6/+10
| | | | | | | | The issue: there was a transient issue (more prevalent for certain users) where a painting from the art gallery would appear in the starting room (at the world origin). The cause: Unlike every other item, the art gallery painting items are not idempotent, so if one is re-processed it behaves differently than the original time it was processed; specifically, it would fail to find the painting it needs to replace, so the current painting would be moved to the origin. This issue was flaky because it would only occur if the AP item resync that's requested at connection time was not received by the client until after the map finished loading. The solution: Receipt indices are now saved as items are processed, and received items with an index that has already been processed are not re-processed.
* Bump versionStar Rauchenberger2023-05-271-1/+1
|
* Painting names are loaded from the game nowStar Rauchenberger2023-05-272-193/+28
| | | | This makes us update-resistant because we automatically get access to new paintings, and also it prevents issues where the names in the mod do not line up with the game's names, which have caused crashes in at least one MW.
* Suppress "AP_Paintings not found" error when no painting shuffleStar Rauchenberger2023-05-271-1/+1
|
* Queue Iceland Traps for later in map loadStar Rauchenberger2023-05-222-0/+24
| | | | This way they don't get overridden by the environment being set naturally.
* Announce when you get your win conditionStar Rauchenberger2023-05-211-0/+3
|
* Report achievements to AP using data storage (for tracker)Star Rauchenberger2023-05-215-1/+58
|
* Fix blank death link reason messageStar Rauchenberger2023-05-191-1/+1
|
* Bump version v0.5.0Star Rauchenberger2023-05-181-1/+1
|
* Progressive FearlessStar Rauchenberger2023-05-172-0/+12
|
* Bump version v0.4.2Star Rauchenberger2023-05-111-1/+1
|
* Disable panel uncompletionStar Rauchenberger2023-05-112-0/+6
|
* Bump version v0.4.1Star Rauchenberger2023-05-111-1/+1
|
* Use base game messages nodeStar Rauchenberger2023-05-113-72/+4
| | | | Now that it's been integrated into the game itself.
* Added paintings from updateStar Rauchenberger2023-05-111-0/+101
|
* Expiring messages now fade outStar Rauchenberger2023-05-061-1/+3
|
* Create LICENSEStar Rauchenberger2023-05-051-0/+21
|
* Added wss supportStar Rauchenberger2023-05-051-7/+23
|
* Bump version v0.4.0Star Rauchenberger2023-05-051-1/+1
|
* THE MASTER requirement can now be set by the playerStar Rauchenberger2023-05-052-0/+16
|
* Create "The Wanderer"Star Rauchenberger2023-05-052-1/+60
|
* Bump version v0.3.1Star Rauchenberger2023-04-291-1/+1
|
* Increased max in buffer sizeStar Rauchenberger2023-04-292-11/+6
| | | | Horray! We don't have to hardcode games not to download.
* Provide status updates on the connection processStar Rauchenberger2023-04-292-0/+18
|
* Don't download datapackages for big gamesStar Rauchenberger2023-04-291-2/+11
| | | | Godot's websocket packet size limit can't be changed in 3.5, which is annoying.
* Bump version v0.3.0Star Rauchenberger2023-04-281-1/+1
|
* Iceland Trap now lasts 60 secondsStar Rauchenberger2023-04-281-1/+1
|
* Progressive Art Gallery and Hallway RoomStar Rauchenberger2023-04-284-15/+84
| | | | Also, Art Gallery is now changed a little in doors mode. The backroom is always available so that you have access to the previous floors at all times. The paintings in the backroom do not appear until you have the floor unlocked. ORDER is also blocked off until you get the fifth floor.
* Increased settings screen field font sizeStar Rauchenberger2023-04-281-0/+9
|
* Fixed README typoStar Rauchenberger2023-04-281-1/+1
|
* Item names are colored by type in messagesStar Rauchenberger2023-04-282-40/+70
| | | | The messages node is now a vertical box container with individual RichTextLabels for each line.
* Bump version v0.2.3Star Rauchenberger2023-04-261-1/+1
|
* Fixed handshake failure from too-large data packagesStar Rauchenberger2023-04-262-6/+13
| | | | The needed datapackages are requested one-by-one, now.
* Bump version v0.2.2Star Rauchenberger2023-04-241-1/+1
|
* Create .gitignoreStar Rauchenberger2023-04-241-0/+1
|
* Renamed cache directoryStar Rauchenberger2023-04-241-2/+2
| | | | When it was just "archipelago", the names showed up in the file load list if you clicked load game, which gave people the impression that they were actual save files.
* Fix THE END locationStar Rauchenberger2023-04-231-1/+6
| | | | The THE END location did not function properly before. Because THE END is not in Panels (it's in Decorations), node lookup did not work right before and the THE END location ended up using the panel from the previous location, which was ENTER (fifth floor orange). This fixes that lookup so that the location works correctly.
* Updated README to say not wall sniping FOURTH is in logicStar Rauchenberger2023-04-231-2/+2
|
* Bump version v0.2.1Star Rauchenberger2023-04-221-1/+1
|
* Fixed effects timer not disappearingStar Rauchenberger2023-04-221-0/+1
|
* Bump version v0.2.0Star Rauchenberger2023-04-221-1/+1
|
an>tableView = [(UITableView*)self.view retain]; UIView* parentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]; [tableView setFrame:CGRectMake(0, 44, 320, 480-44-44)]; [parentView addSubview:navigationBar]; [parentView addSubview:tableView]; [parentView addSubview:toolbar]; self.view = parentView; [parentView release]; } return self; } #pragma mark - #pragma mark View lifecycle /* - (void)viewDidLoad { [super viewDidLoad]; // Uncomment the following line to display an Edit button in the navigation bar for this view controller. // self.navigationItem.rightBarButtonItem = self.editButtonItem; } */ /* - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; } */ /* - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; } */ /* - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; } */ /* - (void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated]; } */ /* // Override to allow orientations other than the default portrait orientation. - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Return YES for supported orientations. return YES; } */ #pragma mark - #pragma mark Table view data source - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { // Return the number of sections. return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { // Return the number of rows in the section. if (showGlobal) { return [globalHighscores count]; } else { return [localHighscores count]; } } // Customize the appearance of table view cells. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSString* cellIdentifier; Highscore* highscore; // Configure the cell... if (showGlobal) { cellIdentifier = [NSString stringWithFormat:@"Global-%d %d", modeControl.selectedSegmentIndex, [indexPath row]]; highscore = [globalHighscores objectAtIndex:[indexPath row]]; } else { cellIdentifier = [NSString stringWithFormat:@"Local-%d %d", modeControl.selectedSegmentIndex, [indexPath row]]; highscore = [localHighscores objectAtIndex:[indexPath row]]; } UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier] autorelease]; } cell.textLabel.text = highscore.name; if (highscore.date != nil) { NSDate* todayDate = [NSDate date]; double ti = [highscore.date timeIntervalSinceDate:todayDate]; ti = ti * -1; if (ti < 1) { cell.detailTextLabel.text = @"What is this I don't even"; } else if (ti < 60) { cell.detailTextLabel.text = @"Less than a minute ago"; } else if (ti < 3600) { int diff = round(ti / 60); cell.detailTextLabel.text = [NSString stringWithFormat:@"%d minutes ago", diff]; } else if (ti < 86400) { int diff = round(ti / 60 / 60); cell.detailTextLabel.text = [NSString stringWithFormat:@"%d hours ago", diff]; } else { NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setTimeStyle:NSDateFormatterNoStyle]; [dateFormatter setDateStyle:NSDateFormatterLongStyle]; cell.detailTextLabel.text = [dateFormatter stringFromDate:highscore.date]; [dateFormatter release]; } } UILabel* scoreLabel = [[UILabel alloc] init]; scoreLabel.text = [NSString stringWithFormat:@"%d", highscore.score]; CGSize labelSize = [scoreLabel.text sizeWithFont:scoreLabel.font constrainedToSize:CGSizeMake(160, 44) lineBreakMode:UILineBreakModeClip]; scoreLabel.frame = CGRectMake(320-10-labelSize.width, 22-labelSize.height/2, labelSize.width, labelSize.height); [cell addSubview:scoreLabel]; [scoreLabel release]; cell.selectionStyle = UITableViewCellSelectionStyleNone; 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:UITableViewRowAnimationFade]; } 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 *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { // Navigation logic may go here. Create and push another view controller. /* <#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil]; // ... // Pass the selected object to the new view controller. [self.navigationController pushViewController:detailViewController animated:YES]; [detailViewController release]; */ } #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 { // Relinquish ownership of anything that can be recreated in viewDidLoad or on demand. // For example: self.myOutlet = nil; } - (void)dealloc { [super dealloc]; } - (void)back { Cart_CollectAppDelegate* appDelegate = ((Cart_CollectAppDelegate*) [[UIApplication sharedApplication] delegate]); RootViewController* viewController = [appDelegate viewController]; [[appDelegate window] setRootViewController:nil]; [[appDelegate window] addSubview:viewController.view]; } - (void)switchLists:(id)sender { if ([(UISegmentedControl*)sender selectedSegmentIndex] == 0) { if (loadingGlobal) { [loadingView removeFromSuperview]; [self.view addSubview:tableView]; } showGlobal = NO; [tableView reloadData]; } else { if (globalHighscores == nil) { loadingGlobal = YES; loadingView = [[UIView alloc] initWithFrame:CGRectMake(0, 44, 320, 480-44-44)]; activity = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(150, 228-44, 20, 20)]; activity.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray; statusText = [[UILabel alloc] initWithFrame:CGRectMake(0, 256-44, 320, 21)]; statusText.text = @"Downloading highscores..."; statusText.textAlignment = UITextAlignmentCenter; [loadingView addSubview:activity]; [loadingView addSubview:statusText]; [loadingView setBackgroundColor:[UIColor whiteColor]]; [activity startAnimating]; [tableView removeFromSuperview]; [self.view addSubview:loadingView]; CLScoreServerRequest* request = [[CLScoreServerRequest alloc] initWithGameName:@"Cart Collect" delegate:self]; tQueryFlags flags = kQueryFlagIgnore; if (modeControl.selectedSegmentIndex == 0) { [request requestScores:kQueryAllTime limit:15 offset:0 flags:flags category:@"Classic"]; } else { [request requestScores:kQueryAllTime limit:15 offset:0 flags:flags category:@"Jump"]; } [request release]; } else { showGlobal = YES; [tableView reloadData]; } } } - (void)switchGameMode:(id)sender { if ([(UISegmentedControl*)sender selectedSegmentIndex] == 0) { localHighscores = [Highscore localHighscoreListForGameMode:@"Collect"]; } else { localHighscores = [Highscore localHighscoreListForGameMode:@"Jump"]; } globalHighscores = nil; [self switchLists:areaControl]; } - (void)scoreRequestOk:(id)sender { NSArray* highscores = [sender parseScores]; NSMutableArray* highscoreTemp = [[NSMutableArray alloc] init]; for (NSDictionary* data in highscores) { NSString* name = [data objectForKey:@"cc_playername"]; int score = [[data objectForKey:@"cc_score"] intValue]; NSDate* date = [NSDate dateWithTimeIntervalSince1970:[[data objectForKey:@"cc_when"] intValue]]; Highscore* highscore = [[Highscore alloc] initWithName:name score:score date:date]; [highscoreTemp addObject:highscore]; [highscore release]; } globalHighscores = [highscoreTemp copy]; [highscoreTemp release]; loadingGlobal = NO; [loadingView removeFromSuperview]; [self.view addSubview:tableView]; showGlobal = YES; [tableView reloadData]; } - (void)scoreRequestFail:(id)sender { [activity stopAnimating]; [statusText setText:@"Unable to download highscores."]; } @end