Part 3 - Features May Vary
6 month(s), 28 day(s), 10 hour(s), 2 minute(s), 12 second(s) to deadline
As the weeks went by and the shock of the encounter with the Tropius wore off, Keita found himself once again hard at work in front of a hastily purchased replacement monitor. With time, even the visibly mismatching monitor had melted into the normal order of things as the first quarter of the project gave way to the second and the team was on the cusp of finishing a playable build.
In the midst of the flurry of change over the past two months, there was yet another change to the programmer's routine. Against his better judgment, Keita had taken up the Director on his ultimatum, if not in the way his superior expected: he had sourced a Pokéball to keep the Tropius in and even, after a more sleep-deprived night, dubbed her 'Paren' in much the same fashion as he'd named Bracket. The Pokéball was a green-topped capsule with yellow rings, a design originating from a project by the local Devon Corporation that was fine-tuned for the needs of younger Pokémon.
To Keita's relief, his initial worries of how well Paren would adjust to life under a trainer's care had been premature, as it quickly became evident that she'd taken an unexpected shine to her trainer's environs. This particular day was but another point that reinforced his sentiments, as Paren drew near to the young man's workstation in the middle of a balmy Hoenn day.
"Eh? You're not going to go out to stretch your wings? I left the door open for you and everything."
Much to Keita's surprise, Paren seemed more entranced with the strange box and button-covered strip her new trainer was interacting with. The Tropius had already deduced in the past that he manipulated it somehow every time he sat in front of it, and seemed curious about what the greenish-haired man found so interesting about the screen and the multicolored glyphs that popped up in different boxes on it. Keita tilted his head back at the Grass-type for a moment, not fully sure as to why the Tropius had taken a shine to his handiwork now of all times…
"Oh, this? This is just some code that I'm trying to debug. Nothing special, really."
Perhaps the novelty of the human world had yet to wear off for Paren, perhaps she wanted to get to know her trainer better, or perhaps the Tropius had been motivated by the small rivalry she had developed with Bracket for their trainer's attention since her stay began. Whatever the cause, Paren's interest in Keita's work certainly made programming much less solitary for the young man, especially on days such as this one where Satoshi was busy with his peers from the art and sound teams down the hall.
Keita was quietly grateful for Paren's companionship, especially now when he was busy reviewing some new snippets he'd written up. In his field, programmers occasionally would sanity-check their work by explaining it aloud to an inanimate object like a rubber Psyduck, or in other cases to their Pokémon. And unlike Bracket's usual fickleness, Paren had always proven to be a fairly reliable muse, and even gotten Bracket to suddenly take an interest in sitting in on his work, leaving Keita to pull up a file he was working on for the viewing pleasure of his audience of two.
"Not sure how you got interested in this, Paren," Keita murmured. "Let alone how you managed to get Bracket interested in sitting still watching me code... but let me take things from the top."
#define SELECT_MON 0
#define WAIT_OTHER_SELECTION 1
#define CONFIRM_SELECTION 2
#define WAIT_OTHER_CONFIRM 3
#define SEND_MON 4
#define RECEIVE_MON 5
Keita began to scroll through line after line of code with subtle taps on his keyboard as Paren and Bracket followed along with their eyes. While the pair surely could not understand the characters on the screen, Paren seemed enthused with the differing colors that the text editor rendered different statements as, and Bracket was keen to project an outward sense of excitement to match her in front of his trainer.
while (_trading) {
switch ( trade_state_mode )
{
case SELECT_MON: update_selectmon(trade_state); break;
case WAIT_OTHER_SELECTION: trade_idle(); break;
case CONFIRM_SELECTION: trade_conf(); break;
case WAIT_OTHER_CONFIRM: trade_idle(); break;
case SEND_MON: send_data(trade_state); break;
case RECEIVE_MON: update_data(trade_state); break;
}
}
The programmer explained the shifting lines to his charges, scanning the code with his eyes to ensure that his explanation matched up with the actual functionality of the lines of code on the screen.
"And this is a state machine for trading. That part there checks if the player wants to trade, and then waits on another player," he explained. "Normally the event that triggers the different cases here would be sent from a second console through a Link Cable, but we're allowed to cheat a bit for now. Anyhow, my problem is that something is going wrong with the last-"
As Keita continued his explanation, he was interrupted by the sound of the room door opening from outside. The Director walked into the room and made his way over to Keita's workstation, giving him a skeptical frown along with his Wynaut after seeing the programmer and his two Pokémon crowded at the desk. He momentarily scanned his subordinate and his charges before speaking up with a quiet clearing of his throat.
"Hard at work, I see."
"Oh! Er… yes, of course. I was just reviewing the changes that I made to the state machine for trading," Keita explained while hastily turning to face his blond-haired superior. Bracket and Paren seemed to be taken aback themselves, as the pair traded sheepish looks with the Director's disapproving Wynaut.
The Director for his part was a bit more cordial towards the young man than his blue companion, too cordial perhaps. It became apparent in short order that there was more than it appeared behind the Director's amiable demeanor, as he had approached the programmer with an ulterior motive.
"Trading, eh…? In that case, perhaps you'd like to take a bit of a break from your current task," the Director suggested. "I actually just got a heads-up from some of the other programmers that they're presently having some issues with the monster data structure."
"Oh…?"
"If you could pitch in and help with their problem, I'm sure that they'd deeply appreciate it."
The programmer paused and thought for a bit. It seemed peculiar for such an abrupt change of work, but the Director wouldn't have approached him directly about this matter without a good reason.
"I suppose that I could help for a bit," Keita finally replied. "I mean, I think the problem that I'm encountering right now shouldn't be too hard to fix later…"
6 month(s), 28 day(s), 9 hour(s), 49 minute(s), 9 second(s) to deadline
A little over ten minutes later, Keita and his Pokémon walked the last few steps up to the doorway to the conference room where their project's initial debriefing took place. Bracket and Paren traded puzzled looks with each other for a moment as Keita stepped forward and pushed the door open.
"Hello, I heard that you guys needed some help with the-"
...only to find the room packed from one end to the next with monitors and whiteboards, along with roughly a third of the programmers on the development team, far more than Keita had expected.
"-monster data structure?" he asked. Keita stepped forward and entered the room with his Pokémon, the lot looking about their surroundings with freshly-evoked unease and suspicion that something was dreadfully amiss.
An older bespectacled man with an accompanying Porygon beckoned the younger programmer to come in and lend his aid towards what was quickly becoming evident to be some manner of serious quagmire.
"Pull up a chair, kid," the Porygon trainer insisted. "It's not like we've been making any progress lately."
"Eh? Why not?"
"Take a look at this."
typedef uint8_t Uint24_t[3];
typedef struct Party_mon {
uint8_t mon_index;
uint8_t h_item_index;
uint8_t move1_index;
uint8_t move2_index;
uint8_t move3_index;
uint8_t move4_index;
uint16_t ot_id;
Uint24_t exp;
uint16_t hp_ev;
uint16_t atk_ev;
uint16_t def_ev;
uint16_t spd_ev;
uint16_t spe_ev;
uint16_t indiv_val;
uint8_t move1_pp;
uint8_t move2_pp;
uint8_t move3_pp;
uint8_t move4_pp;
uint8_t frnd_val;
uint8_t cprs;
uint16_t catch_dat;
uint8_t mon_lv;
uint8_t status_cond;
uint8_t swap;
uint16_t cur_hp;
uint16_t max_hp;
uint16_t atk;
uint16_t def;
uint16_t spd;
uint16_t spa;
uint16_t spd;
};
The Corphish, Tropius, and their trainer all traded blank looks as the man explained the meaning of the long block of characters on a boxy screen not unlike the one at Keita's workstation.
"That is what the data structure for Capsule Monsters from the last set of games looks like. We have this blasted thing kicking around still to support trading up from the last games."
"Yes? What's so strange about that?" Keita asked. "Wouldn't we logically be using a data structure not too different from this one for compatibility reasons?"
Some other programmers nearby interjected from their computers after hearing the question.
"Tch, you wish. We're supposed to throw in a bunch of hidden personality values onto this. Change the way that maximum stats for a monster are seeded, and give them abilities to make them different in battle on top of it all."
"And don't forget that set of stats for that side mode based off of Contest circuits the Director thought of. For guys who want every player's monster to be one-of-a-kind, they sure aren't helping with giving us 48 bytes to work with!", a man offered between exasperated rubs of his brow.
Ah… Keita had heard that the concept behind Capsule Monsters had been based around its creators' experiences training Pokémon when younger. So then it sounded like one of the goals of the new games was to make them more accurate mimicries of the Pokémon training that inspired it.
Even so, the young programmer still couldn't understand why this would be such a big bottleneck.
"But aren't you making the new data structure larger to accommodate all of this?" Keita asked. "I thought that's what you did for the last set of games."
"We've been trying," the elder programmer snapped. "Expanding the structure isn't the problem."
"It's getting everything down to 48 bytes for trading a monster over to the previous games, and then putting all of those extra bytes back when you trade it back up."
Keita fell silent, as Bracket and Paren traded worried looks with each other and the color drained from their trainer's face. Somehow, even they seemed to pick up the programmer's terrible realization of just why everyone was stuck here.
"I think I can see how that'd be a problem."
5 month(s), 29 day(s), 14 hour(s), 32 minute(s), 58 second(s) to deadline
Two development cycles later, the problem of what to do with the new games' data structure remained unsolved. The team had made attempts to dance around the issue and continue working on other parts of the project, such as ironing out bugs with the trading data states, but there was only so far that they could kick the can down the road before the bottleneck started to stymie their progress entirely.
The air was tense that day, a full month later of futile battling with the monster data structure. The lack of a breakthrough weighed heavily on everyone in the room, not least the Director, who was visibly racking his mind to try and present difficult words to the gathering.
"It has come to our attention that there are some… critical bottlenecks for being able to handle data transfer between the last set of Capsule Monsters games and our present project."
Voices quickly rose up from around the room in protest, their speakers exasperated with the lack of progress in attempting to coax these new features from the base of a legacy data structure that had never been built with them in mind.
"Look, it's been four weeks with no progress," a programmer at the front objected. "We've tried everything. We've tried making caches for the extra data on trading, we've tried injecting data into the unused byte at the 33rd offset to try and rebuild all the extra bytes."
"To be blunt, nothing's working," a voice from the back interjected. "We haven't even gotten one-way trading from the old games to work consistently thanks to that data corruption bug."
Low grumbles filtered about the room along with sharp scowls at the speaker's passing mention of the 'data corruption bug,' which had merely added insult to injury for the team's struggles. In spite of that, the Director remained undeterred and continued on speaking.
"Yes, I understand that. But the office is adamant that these new features be implemented," the Director sternly replied, to a chorus of frustrated groans from the audience. It was then that he presented a possibility that even the audience had not considered.
"Even if it means having to make a few sacrifices."
Keita instantly heard murmurs filter about the room, and began to wonder if his roommate was implying that they should make an entirely new data structure even though that meant...
"Wait, you're not seriously considering gutting backwards compatibility, are you?" the programmer at the front asked.
The Director reluctantly nodded. "Between this and the problems that the rest of your team have been encountering with the clock system, I believe that we will need to make some difficult decisions to make our deadline."
Keita noticed Bracket and Paren had begun to trade concerned glances. Apparently they had seen the visibly sinking expression on his face, and of those of the others in the audience.
"But half the material we've been given to work with assumes tight continuity and connectivity with the last game!" one of the scenario designers cried out.
"I'm aware of that," the Director replied. "And I'm saying that it appears that we're going to have to take a bit of a more uncharted approach to fill those gaps."
Another round of groans went around the room. This was a massive shift in the direction for the game, and the timetable that had been initially given to the team was already half-gone! Satoshi from the hotel suite raised his voice in protest, spelling out just what the Director's suggestions would entail.
"Director, how on earth are we supposed to come up with stopgaps for half a campaign and setting on top of throwing a game together?!" the graphics artist exclaimed.
Keita looked back blankly at the Director. Yes, surely making a setting and new story from scratch in less than six months was an obvious non-starter. After all, where on earth would they get all of that material from?
It was then that his attention was drawn to Paren reflexively batting one of her wings. Like Bracket, the Tropius also grew fidgety when kept deprived of distractions for too long, of which there weren't terribly many lying around in the dimly lit conference room.
Yes, it was as clear a sign as any that she needed some outside air, out in the tropical Hoenn weather. Out in that big region which was supposed to be a haunt for tourists.
Keita paused and blinked for a moment, as a spark of inspiration suddenly crossed the programmer's mind.
"Wait a minute… I think I actually know how we can do that," he interjected.
It was more than a little daft, but at this stage, what did the team have to lose? So it was that the young man stood up from his seat, raised his voice, and made the fateful suggestion that would make or break the project over the course of the remaining six months:
"What if we took some notes from our surroundings? And then used that for the game's setting and campaign?"
