Never Assume, Always Make Sure

After the popularity of the earlier articles, we’re happy to share another devlog by Rapha, diving deep into a very obscure bug you never saw in the live game, and why it matters!

We hope you enjoy reading it!

 Background: We had a phantom message appearing on chat in the testing of a specific update:

 > ” turned from player to spectator”

 Who was this unnamed person? Where did this come from?

But to make sense of the problem, first we need to dig deep and start from the basics!

 *This mostly doesn’t talk about a specific computer architecture, unless specified*

*Code examples are written in a Pascal-esque way for easier understanding*

The ideal computer runs instructions in series

CODE

 That’s good and all, but every single program cannot be linear, memory isn’t infinite nor problems can be unwrapped completely at compile time to make it possible. Sometimes you need to go back and redo a calculation. That’s why programs JUMP *ぴょい~ん, JUMP, カンガルーのように!*

 So things like, increasing a number can be done by:

CODE

DATA

 But what if there’s something after that JUMP 0x0000, that needs to be executed afterwards? What if we could jump to somewhere else and know where to go back? That’s when the stack is useful.

 The stack is a structure of data that is normally filled bottom to top (imagine a stack of dishes). Let’s imagine it here, the bottom is, let’s suppose, the last address we can use, in this example 0xFFFF. 

One of it’s important functions is keeping track of where you were before. Using more complex “JUMP” instructions that store the next instruction address to them into the stack, and points where the stack ends using the special register known as “stack pointer” we can know where to go back afterwards. Let’s call it “CALL”. And let’s say it currently points to 0xFFFF in our stack above. 

 As soon as that call executes it would add 0x1008 to our stack, and change the stack pointer register accordingly to 0xFFFB.

That way, once that function ends and executes, let’s call it, a RET[TURN] instruction, it would fetch that value from the stack 0x1008, move execution there and update the stack pointer again, so it goes again to 0xFFFF.

 That’s how computers the keep execution flow!

 But the stack also have another function, it stores on most architectures… local variables!

> Their counterpart would be global variables, that are stored
> inside the executable memory space or in the heap, a memory space that
> you ask the OS for, and if not properly released when not used, ends
> up as that thing people love to call “memory leak”

 Imagine you have a function that’s something like:

     function add_two_numbers(a: Integer, b: Integer):Integer;

    var

      c: Integer;

    begin

      c := a + b;

      Result := c;

    end;

That variable c, for convenience will be stored on the stack, that’s why whenever you call that function, it will have a wrapper code, that I won’t explain, but basically expands that stack pointer up, so you can use the space below it. Something like:

As soon as the function exits, it will simply change that modification to the stack pointer, before getting the address to return to:

Observe how c is still there, because is most implementations of languages, it’s too expensive go around zeroing that memory, so the value just lingers.

Now imagine that you have a similar function, that blindly believes that value is zero, and it’s called right afterwards:

    procedure prints_value(a: Integer);

    var

      b: Integer;

    begin

      b := b + a;

      WriteLn(‘The result is ‘+b);

    end;

You see were this is going right? It’s value will need a place on the stack:

But that memory still contains the result of the previous operation, so when the operation b + a is executed, its not doing 0 + a, but whatever was there + a, this incurs an undefined behavior, we cannot know what is there, so it could be a totally different value, and our function will never properly execute.

 You never want that, unless you are doing something malicious!

The Bug

But why such a long post to explain this concept? Well, during the internal testing of a new build we had a bug.

 A message was printing saying:

 > ” turned from player to spectator”

 without a name.

It only started happening when we change some of our logging code, why???

Well, there’s a function that sends to the player the current information the host knows about the players and spectators it started with;

    procedure sends_stuff_to_client;

    var

      the_data_to_send: SOME_BIG_STRUCTURE;

    begin

     end;

That the_data_to_send variable was allocated at the stack, and was never properly fully initialized. For *ab immemorabili*, time immemorial, the bits we weren’t initializing afterwards were inheriting the memory of whatever was on the stack before. It always *seemed to work*, until we changed how our log messages were formatted for security reasons.

Now a message to be logged that contained both text and numbers, was formatted more or less like this:

    game_log_message(format_message(“This happened with this {} value”, value));

The return of format_message isn’t magically stored away if its big, so the compiler was just adding a new value to the stack, an unnamed one. In a function call that executed before sends_stuff_to_client this made the stack be aligned slightly different, but different enough so when the_data_to_send was allocated, a specific bit of it ended up aligned with data lingering from previous function calls. The data was specifically the SteamID of the host, and it was ending up exactly at the spot on the_data_to_send that contained the SteamID‘s of spectators.

 So that stuff was sent to clients, the clients would interpret it and see *”well, this person, with an ID pertaining to a player, was changed to a Spectator”*, then the code to log that was checking *”what is his name really?”* and found nothing, because there was no name associated with that spectator entry. So we got:

 *” turned from player to spectator”*

 It didn’t affect the game in any way, no state was being changed based on that, but every time that packet was to be sent to the client, it had a specific miss-initialization that caused that message to be displayed.

The coolest thing in this history (but also the most scary one, since it made us run around in circles until the cause was fount out), it only happened on Windows. Only the Microsoft C++ Compiler was generating this specific stack structure and making this happen, our Linux and macOS versions, compiled by GCC and Clang respectively, just didn’t display the bug, because the memory was still uninitialized, but the format didn’t exactly match so that specific SteamID ended up aligned where we were expecting a SteamID.

The fix was easy, and should be there from the start:

     FillChar(the_data_to_send, SizeOf(the_data_to_send), 0);

 This ensured the thing was always zero, nothing was lingering and so the bug never happened again.

Conclusion 

In our case this just caused a message to appear, but it could be a security problem, important data could leak via a similar bug, that’s why an important security feature to be implemented in some compilers is zeroing the stack on function exit, so doesn’t matter what was there, it will turn into zero, so no one will be able to see it by mistake (or on purpose) afterwards.

I know this wasn’t the easiest post to follow around, and that people normally aren’t interested in such specific stuff, but hopefully you liked it!

504403158265497090 Points, or A Day in the Life of a Save File – 100% Orange Juice Devlog

We’re happy to share with you another devlog by 

Rapha, this time about the recently implemented big save rework, why it was necessary and what went into it! Hope you enjoy reading it.

The Perils of Binary
In the realm of video game development, preserving a player’s progress is paramount. This is where game saves come in, capturing the state of a game so it can be resumed later. However, the methods used to store these save games can significantly impact their susceptibility to corruption, be it by external or internal factors.

The problem

100% Orange Juice since time immemorial used binary storage, it used to be the go to for this kind of data when processing power and storage space weren’t plenty available. It’s more efficient to write, to read, and uses less space in disk. But this efficiency comes at a cost, it’s easy to mess up. It’s why we’ve added more and more ways the game backups your saves at various points over time, to make sure players have some backup to return to if their save with years of progress gets corrupted.

Now let’s imagine a theoretical game, 

Poppo Saves The World! Let’s imagine it as a beat-em-up, where you go around fighting enemies, one after the other, until you win and save the world. Lets supposed you have the following section of data that needs to be saved:

– Wins

– Points

– Last stage cleared

Lets supposed you have 10 victories, 393939 points and the last stage cleared as stage 7. Let’s imagine you used 64 bit values for everything. So:

|Data | Explanation|

|–|–|

|0A 00 00 00 00 00 00 00 | 10 in hex padded to 64 bits|

|D3 02 06 00 00 00 00 00 | 393939 in hex padded to 64 bits |

|07 00 00 00 00 00 00 00 | 07 in hex padded to 64 bits |

In the file would be:

    0A 00 00 00 00 00 00 00 D3 02 06 00 00 00 00 00 07 00 00 00 00 00 00 00

But then you introduce abilities to the game, you decide to store it as a single byte, that will keep if you have each of the 8 abilities available unlocked, one in each bit.

|8|7|6|5|4|3|2|1|

|–|–|–|–|–|–|–|–|

|0|0|0|0|0|0|0|0|

Let’s suppose your player unlocked only the first one so it’s a 1, so in binary:

|8|7|6|5|4|3|2|1|

|–|–|–|–|–|–|–|–|

|0|0|0|0|0|0|0|1|

You inadvertently decided to write it between wins and points, so you would have the new binary:

|Data | Explanation|

|–|–|

|0A 00 00 00 00 00 00 00 | 10 in hex padded to 64 bits|

|01 | 01 in hex, it’s a single byte |

|D3 02 06 00 00 00 00 00 | 393939 in hex padded to 64 bits |

|07 00 00 00 00 00 00 00 | 07 in hex padded to 64 bits |

In the file would be:

    0A 00 00 00 00 00 00 00 01 D3 02 06 00 00 00 00 00 07 00 00 00 00 00 00 00

And as logically implied, you would change your reading code to expect that too! But then comes the problem! Your old save doesn’t agree. Let’s see what your game would read from an old save.

    0A 00 00 00 00 00 00 00 D3 02 06 00 00 00 00 00 07 00 00 00 00 00 00 00

It expects 8 bytes for the Wins, so it reads 8 bytes:

    0A 00 00 00 00 00 00 00

That reads to 10! Seems ok! Up until now everything have gone correctly.

But then it tries to read the byte for abilities…

    D3

D3 is byte, your game doesn’t know if it is valid or not, it’s binary, it believes in the binary. Let’s look at it for a bit, in binary:

|8|7|6|5|4|3|2|1|

|–|–|–|–|–|–|–|–|

|1|1|0|1|0|0|1|1|

So not only the first, but the second, fifth, seventh and eighth abilities are unlocked?!? Wow! That’s a problem.

Let’s continue, more 8 bytes:

    02 06 00 00 00 00 00 07

That’s 504403158265497090 points… That’s definitely not what was written originally. By reading that byte that wasn’t there, you misaligned the whole thing, and now your player has more points than literally the universe has seconds of life. And then you continue, last 8 bytes:

    00 00 00 00 00 00 00

But that’s not 8, you only got 7! If you really try to read that, you will get an unexpected behavior. What happens depends on what system, what processor and what contingencies are in place. In some systems you may read a byte from memory that has nothing to do with your save, in others you may read some leftover on the memory bus, in some you will crash… The ideal behavior would be the crashing.

But lets supposed it didn’t. It loaded.

Now you have:

10 victories

5 abilities unlocked

504403158265497090 points

And never cleared a single stage

If this happens to your user, they won’t understand a single bit of what’s happening, will they?

The conclusion
You must be thinking now, “Well, that’s easy, just don’t mess up”. Yeah, but that’s easier said than done, with less than a dozen of information to save, and total control over it you can’t commit this mistake.

But what about having 200000 different bits of data that need to be read and written correctly, by code written over 15 years, written by different people, with different designs in mind, written by functions in different files, some keeping proper spacing between data, with spare data for future use, some not. That was our situation! Years of updates adding numerous incongruities that we didn’t account for, despite fighting against it all day.

Yeah, that’s a design flaw, and that’s why we are fixing it, starting with this step! 100% Orange Juice is a bigger game than one might imagine, and such huge code base being kept alive by less than 10 people is nothing less than a miracle driven by passion and willpower over the years.

The solution
We won’t enter into detail, because our new save system not only is 100% reliable but has a good number of protection layers against people editing it. But firstly, if your save was changed externally, it won’t load.

This is to avoid the game crashing if your storage is faulty and some bit flipped. That’s why the backups are now more important than ever, if your main save corrupted, it won’t load, no one will be able to restore it, its gone forever. The game won’t even try to read it.

But not only that, now generally speaking, each bit of data inside the save games has a proper name to address them.

Let’s bring the example from before:

  • Wins
  • Points
  • Last stage cleared

Now we build a database in memory, naming each value in a proper structure before writing it to the save. So it would be something like this:

    wins: 10, points: 393939, last_stage_cleared: 7

For reading, you simply search for the value name and loads the value attributed to it: wins → 10, points → 393939, and it goes on.

If you add a new value:

    wins: 10, abilities: 1, points: 393939, last_stage_cleared: 7

It doesn’t matter, you aren’t reading in sequence, you have a proper system to encode and decode the values and search them by name. If abilities doesn’t exist on the save, you load the default value and go on.

This basically clears the future from unwanted data changes, but nothing in life is a perfect solution. We still need to load the old save, and if that’s corrupted, the new one will be too, as the old save system trusted above everything else what was written, in the exact order it was.

The game also may after some update write something wrong, that’s a bug, it can happen, it doesn’t mean the save is corrupted stricto sensu, but in lato sensu the data was handled wrongly, so that’s still a bug, that’s still a thing that needs to be reported.

So if after the save conversion on the last big update, you got more dice than the universe has seconds of life, the best we can suggest is contacting us! We will do the best in our power to fix your old corrupted save. But be aware there may be some times that it’s impossible (mainly if you didn’t play for the last 7~10 years, the amount of uncounted problems can be beyond any repair), but even in this horrific situation, talk with us, say what you hold dear about your old save, and we might be able to find a path that will make you happy.

Why we’re starting a Patreon

2023 was in many ways a challenging year for us. Some reasons may be obvious – the post-Covid economy which has been hitting creative industries hard for the past year, as people have less disposable income, others less so, and though I have hinted at some developments in a past livestream, I promised to go into more detail though I find it a heavy subject to write about.

During the early Covid years, we were lucky enough to enjoy a large influx of new players, thanks to both people staying at home more, and us giving away millions of free games in a stay-at-home campaign. We invested the increased sales into hiring more developers so we can put in more work for you – the team currently has 5 developers working on 100% Orange Juice alone, in addition to artists, translators, QA and other support staff.

A specific goal in this recruitment drive was to be able to work on a certain project simultaneously with the ongoing 100% Orange Juice development.

For many years, people have been asking, “when will 100% Orange Juice be ported to Switch? Will it be available on mobile?”

The answer to that question has been that the engine made it rather impossible to port the game to other platforms. But in fact, we’ve been secretly working on a full remake of 100% Orange Juice in a new engine since 2018, with the goal of both modernizing the internal architecture and visuals of the game, and being able to release it on other platforms as well. The project restarted once on the way after staff changes, but the latest version was getting far enough that at the start of 2023 we temporarily assigned most of our developer team on it in the hopes that we could boost it to completion before the lower dev time spent on the live version of 100% Orange Juice becomes an issue (working on a remake of a game that’s also getting constant changes at the same time isn’t the most efficient way to develop something, after all).

It was supposed to be a fun surprise when we can reveal it to everyone (which we were planning to do soon). Then something happened.

You may have noticed I avoided mentioning the name of the engine we were developing the remake in, and some of you might’ve already guessed where this is going from that.

Yes, we were porting 100% Orange Juice to Unity.

From the beginning this came with some caveats, as the development cycle for the Unity engine has always had some issues, but it also had the best terms of use, and was determined to overall make development much easier once the remake is finished.

Then in September 2023, Unity announced their “controversial” new pricing model, which would’ve completely annihilated us as it was originally laid out. Shocked, we instantly froze work on the Unity version while waiting on more news to come out. While Unity eventually walked back the worst details of that decision, all the info that came out as a consequence coupled with the way they rolled out that change out of the blue in the first place had already done the damage. With our port approaching the halfway point to completion, we could either continue working on the Unity port full power for another 2 years, hoping things don’t get worse, or we could cut our losses and kill the project. Given the status of the project and our loss of faith in the engine for the game that’s basically keeping the food on the table, we chose the latter with heavy hearts.

That doesn’t mean we’re giving up on porting the game to other platforms, but we don’t have the resources to start a new full port from the scratch. Instead we’re now looking at steadily replacing the old modules of the live version of 100% Orange Juice to eventually make it compatible with more hardware and other platforms. What it does mean, though, is that all the time and money spent on the Unity version over… 6 years was more or less entirely wasted, apart from the experience gained from it.

Due to the aforementioned dev reallocation, 2023 was a slow year for new content in 100% Orange Juice. At the same time, with the economy at large returning to normal, 2023 saw an overall drop in sales, leaving us with a bigger development team, less sales, and at the same time people understandably complaining about a lack of new content.

Sometimes stars just don’t align the way you want them to.

I want to emphasize that this doesn’t mean we’re going to have layoffs, or that we’re stopping work on our games, or anything like that. This post isn’t about that. While 2023 left us in the red, we’re dealing with it in other ways as best we can. In fact, this Patreon is one of those ways – we’re seeking alternative revenue streams to help support our ongoing development work.

As of late 2023, all of our 100% Orange Juice developers are back working on the live version, and while we had a lot of backlogged content to wrap up (such as the Bounty Hunt rework), you can expect a lot more in 2024 – the 10 year anniversary of 100% Orange Juice on Steam! There are a ton of things we’ve wanted to do but figured out make more sense in the Unity version, which has become almost an internal meme at this point. Now we will be focusing on gradually implementing those in the live version.

If the Patreon doesn’t take off, or ends up being more trouble to maintain than it’s worth, it may end up short lived, but I figured it’s worth a try.

So what will you actually get in return for supporting us on Patreon? Not much, really, and we don’t recommend you do it if your finances are tight. We will be posting random stuff from behind the scenes irregularly relating to whatever we’re working on – some disaster screenshots from things gone wrong in development, ramblings by developers, and possibly teasers for new content. For those curious, I’ve attached a small gameplay video from an earlier Unity build on the page. There might be more stuff like that. The last thing we want is for people feel they need to sign up on Patreon for exclusive in-game content, so that’s not going to happen.

If we get good ideas, we might add more tiers later, but for now there’s just a single $5/month support tier that will give you access to all of our posts.

Thank you for reading this far, and thank you for your support over the years.

– Jakke Elonen
President of Fruitbat Factory

Fruitbat Factory Patreon Page:
https://www.patreon.com/FruitbatFactoryDevelops

Deep Under – by Rejnka

100% Orange Juice – Unconventional Art Contest Entry

Hime drifted peacefully through the air, both her hair and dress waving just slightly in the wind. She may have been looking for someone, but that didn’t mean she was in any particular hurry. She would hurry for her friends, to savor their brief lifetimes as much as she could, but with her love she had forever.

Snow waved in her face, which she did not terribly enjoy. Usually, Hime preferred to spend her time wherever it was warm – migrating with the birds, she kept one home in the northern hemisphere and another in the south. Suguri, however, never seemed to mind the cold, and it wasn’t rare to find her in snowy places like this.

Of course, it’s not like Hime was just looking for Suguri in random places. The old cyborg – not like Hime was much younger – usually let off some weak interference, so it wasn’t hard to figure out her general location. Hime had narrowed things down to one specific island – she believed it was named Hokkaido – and was trying to pinpoint her location.

Hime flew over an old building – one story, though fairly wide, and seemingly designed to be inconspicuous. She was ready to ignore it – there were plenty of old buildings like this, ones Suguri said were from before the war – but that faint static of Suguri’s prescence hummed stronger as she got near. Hime floated slowly to the ground and opened one of the doors, before quickly closing it behind herself.

The building was… shockingly well-maintained, on the inside. The lights built between the tiles of the dropped ceiling were still shining bright, and the beige walls and stark white floors were spotlessly clean. If Sora had seen this building, she’d still think it was in use… but Hime knew well that this style of architecture hadn’t been in use for millenia. Not to mention, she couldn’t see anyone around…

Outside of the hallways, it seemed almost every room was a laboratory of some sort. Everything was neatly packed away in all of them, and most of them had their lights off. Still no signs of life, besides the signal Suguri emitted. Both the labs and the halls had pictures lying around, mostly old paintings of natural scenes that seemed to have been printed out. There was one portrait, though – a kind-looking man with white hair, glasses, and a scar on his cheek, labeled as Dr. Yukito Dylan, founder of Project One. That was what Suguri said the project to restore the planet was called, right? The two must have known each other.

Eventually, in some far-off corner, Hime spotted a set of stairs, leading downwards, behind an unmarked door. It would seem that the building’s residents were intent on hiding there was more than one level. They went quite a ways down, so Hime just floated down the center rather than following the stairs. It seemed Suguri’s signal was strongest around the twenty-first floor down.

Hime opened the door and was greeted by a sight that, if not for the ceiling, would not have belonged indoors. There were ferns, grasses, bugs, and small mammals, all beneath a forest of orange trees that were just beginning to bud.

Near the center, Suguri sat beneath a dead tree, talking to herself. “…Everyone’s so happy. You would have loved to see it…” Her eyes were closed, and she had a smile on her face that showed just a hint of sadness.

Hime fully let herself down onto the ground – something she did not do often – and walked up to Suguri. “Suguri… what is it that you’re doing in a lonely place like this?”

Suguri opened her eyes and shifted slightly. “I could ask you the same thing, Hime.” She didn’t say it like she was upset or surprised.

Hime smiled. “I was looking for you, of course.”

Suguri looked up towards the ceiling. “Shouldn’t you be spending time with your friends? The Shifu Brands, that is. We don’t know how long they’ll last.”

Hime’s eyes widened. “Suguri, is something the matter?” She moved in next to Suguri, sitting beside her.

Suguri sighed. “My dad… even the tree we buried him under has been dead for millenia. Earth coming back to life was a dream that started with him, and… he never got to see it.”

Hime let out a small “ah” as the situation sank in for her.

“This was our home, you know. Even when I was a kid, he let me stay here so we wouldn’t be far apart. This probably sounds stupid, but… this would have been his ten-thousand and seventy-first birthday… and his first since the residents of your ship settled here. I felt like returning here, and spending some time with him.”

Hime looked up, towards the budding orange blossoms. “The two of you were quite close, from the sound of it.”

Suguri started tearing up a bit. “…Until I met you, he was the only person I could really talk to. When I was young, people only knew me through him… and after that, everyone was too busy looking up to me to really see me.”

Hime yanked Suguri towards her and started hugging her tightly. “It truly is painful, isn’t it? For all those millenia, we had no one who could understand us. But… we no longer have to hide everything away, not when we have each other.”

Sugrui began shedding tears as she hugged Hime back. “He would have loved to meet you…”

Hime pet Suguri on the head and smiled. “Would you like to tell me about him?”

“His… his name was Yukito,” Suguri said, “there’s a picture of him on the first floor. He always seemed relaxed, even when he was hard at work… These orange trees were some of the first plants he got to grow without hooking them up to life support. Even if the environment had to be controlled, it meant a lot to him…” She chuckled softly. “When I asked him why he picked orange trees, said he wanted to know what fresh oranges tasted like. That’s the whole reason he picked that species to bring back first…”

“A wise man indeed,” Hime said. “I truly never did understand the appeal of oranges until I had a fresh one. As Saki says, the produce on the ship was ‘no good.'”

Suguri smiled. “That was my dad, alright. He always sounded kind of airheaded when he talked about his ideas, but… he always knew how to pull them off. Even if he never got to see it, I… I fulfilled his dream, didn’t I? Ugh, sorry, you shouldn’t have to listen to this old girl ramble…”

Hime giggled. “Ah, to get back at you, perhaps I must ‘ramble’ about my own parents.”

Suguri pulled herself out of the hug, before rolling back to her old sitting position. “Bring it on, then.”

And so, the two talked about families loved and lost, releasing those feelings buried deep for thousands of years in the span of a night.

The Tale of a Newbie Programmer

Do you know Sora, our newest crew member? Please enjoy this self-introduction. We’re giving the floor to him now!

Hello! You may have not heard about me before, as I quietly slipped into the crew.

I come bearing the mame of my favorite character: Sora as my nickname. I discovered 100% Orange Juice through a friend back in 2016. If I had to quickly give an introduction: I live in France, am 24 years old at the time I’m writing this, and I love heavy metal music. Atreyu’s band is my personal favorite. \m/

My favorite hobbies are pretty much: gaming, creating things, drawing, and hugging my Sora & Suguri plushies.

I joined the Fruitbats on the 10th January 2020. It’s my first professional experience as a programmer, and I was super excited to get started. After setting up the project files and everything, I got assigned my very first task: making the master volume option, which needed both UI modification, and save file changes.

The game engine used, Luna3D, is made in a very specific way which does not use OOP everywhere – I just got out of intense C++ practice before getting hired, so seeing old methods of coding felt a bit threatening at first.

The fun part of working with a brand new environment was first getting my bearings, finding what does what, and putting those two together into a decent code. Thanks to the team, I asked whenever I needed help, and I had my answers quite fast. Something I wasn’t used to though, is that logic and drawing are both handled in two different places, which I was not doing before. That said, a lot of the basic concepts were completely unknown to me as I had no previous experience with them. 7 hours of work were needed before I managed to get a decent result that worked quite well. Later on, I kept on going with other voice options, as well as other tiny changes here and there.

The first big project I had to handle on my own was one of the new Playground mini-games: Poppo Shooting. It went through several prototypes, the one that comes to mind being stationary balloons, and a score based gameplay. It got changed later to moving balloons carrying rewards.

It was also the first time I had to tackle the wonderful network code, and managing the AI behavior. When starting the development, I was unsure of which direction I should go, there wasn’t (from my understanding back then) any hitbox functionality, which was crucial for a balloon & dart based game, which was the base idea. A quick search on google led me to an SDL example, which I could adapt to our code. And miracle of miracles, it worked. Besides that, some of you might remember that the CPU was really bad at this minigame. I came back to it weeks later (I think it was a few days before School Crashers event ended) and improved the AI by a lot, giving them priorities, a (way) better aim, and decision management.

Afterwards came some QoL features, such as saving the lobby name & password between game sessions, and changing those in the lobby directly if you were the host. The previous experience I gathered made that way easier for me to implement. It was the first time I had to bother Tony (Rive, our lead programmer) for some AoS2 code snippet, which I took about 30 minutes (and a lot of re-explanations) to understand. If you read that Tony, please forgive me!

The next “big” feature I made was the integration of the Rich Presence feature of Steam & Discord, as well as fixing steam invites so they would make you join your friend’s lobby directly. It took a lot of effort to debug, but in the end everything worked quite well. The funny part was working with an old framework (discord-rpc) which has no more support at all. I remember having some issue about the game invitations, but trying to email discord would redirect me to a server that gives support to the newer version and not the old, which was not helping me at all. But in the end, I eventually found out the issue myself and corrected it. We had to implement a way to retrieve Steam avatars and convert it into a usable texture, which took me a lot of research in order to know how to do it, as I had little to none knowledge about how DirectX works. With the help of hexun, we managed to get the avatars working together, which were added later in the lobby screen.

Later on, the project I have probably spent the most hours on (a full month and a half!) was handling, along with trackftv (yet another of our programmers), the Bounty Hunters event. While Track was creating the quest & bounty side of the game mode, I was creating the shops as well as thinking of items. It was a lot of suffering fun to debug all of this. (And even if some horrible desyncs got through when it was put live, we managed to fix it quite rapidly.) The one thing I remember the most is all the panel layering issues we had – Basically, the panels had way too many things on them at once, which completely messed up the layers (For example, BH shops going over Arthur’s shops, like competition was a crime!)

Thankfully, Track managed to fix all of it… I think. I’m sure we’ll have to look back at it again once we’ll tackle the remastered version of Bounty Hunt!

You can notice here that we originally planned items to be locked behind your current Norma level.

Lately, you saw me pulling out the official modding support. It was something I really was looking forward to, knowing that I came myself from the modding scene in other games. The whole system took about 20 hours of work. It’s of course not yet finished. A lot more is coming for it, including the much requested Steam Workshop support. I don’t have any big details to share about the system overall, just that it was a second take at it after failing the first time a few weeks back. But I’m glad that today so many people enjoy making custom skins for their favorite units.

I could expand that list of projects even more, but some things have yet to remain private for now. I’m super happy to be a part of this wonderful team, and I can’t wait to see how far we’ll be going together!

Editor’s note: everyone be nice to Sora!

Pelúcias Frutíferas da Orange Juice – Segunda Leva!

Sobre

A espera acabou – a segunda leva das super populares pelúcias de personagens da 100% Orange Juice Estão aqui! Baseadas nas personagens de jogos da desenvolvedora Orange Juice, nós estamos empolgados em anunciar seis novos modelos de pelúcia!

Após o sucesso massivo da primeira campanha de pelúcias, onde conseguimos arrecadar 817% da meta inicial somente no Kickstarter, nós estivemos trabalhando nos bastidores para responder aos fãs que desejam mais opções de personagens. Após diversas enquetes, discussões internas, trabalho de prototipagem e design, nós estamos felizes em apresentar 6 novas pelúcias com os protótipos encerrados!

Nós usamos o que aprendemos na primeira campanha, e estamos buscando fazer dessa ainda mais fluente e bacana!

Foto em grupo de todas as novas pelúcias

Para cobrir os custos de produção das pelúcias de cada uma das personagens, a meta inicial da campanha será focada na produção das duas primeiras personagens: Marc de Flying Red Barrel, e Aru da série Xmas Shooting, ambas personagens principais de seu próprio jeito!

Se metas adicionais forem atingidas, Tomomo (Sweet Eater), Alte, Saki e Ceoreparque serão adicionadas para a campanha!

Ao fim da campanha, backers poderão escolher entre qualquer uma das novas personagens destravadas, e entre as 6 personagens da primeira campanha de pelúcias: Marie Poppo, Suguri, Sora, Star Breaker, QP e Hime.

Dessa vez nós prototipamos todas as pelúcias antes de começar a campanha, então destravar novas pelúcias a partir das metas não irá atrasar o tempo estimado de entrega.

Apenas o seu apoio no Kickstarter nos permitirá produzir essas pelúcias a este preço acessível!

Sobre as Pelúcias

Assim como antes, as novas pelúcias foram criadas pelo artista de personagens original, Hono da Orange Juice, para serem usadas nesta campanha. Nós também fizemos uma parceria com a empresa dos Estados Unidos Symbiote Studios, que também produziu os primeiros 6 modelos de pelúcias, para a produção das pelúcias.

O trabalho da Mamãe Noel nunca acaba

As pelúcias terão aproximadamente 25 centímetros de altura. Elas foram designadas para poderem sentar usando seu próprio apoio. Além disso, todas as pelúcias possuem pequenos ímãs escondidos em suas mãos que irão permitir que elas segurem diversos acessórios (incluindo aqueles que virão com as pelúcias). 

Na pesquisa pós-campanha de nossa primeira leva de pelúcias, 57% dos backers falaram que eles estão “super felizes” com a aparência e qualidade das pelúcias, e 99% dos backers responderam entre “super feliz”, “muito feliz” ou “as pelúcias são OK”, com apenas 1% “pior do que esperado” e 0% “muito infeliz.”

Você pode encontrar fotos dos protótipos das pelúcias na Galeria. Por favor leve em conta de que esses protótipos não são o produto final, podendo haver diferenças no produto final. As recompensas serão produzidas usando esses exemplares como protótipos, mas usando processos diferentes – por exemplo, o cabelo do exemplar possui alguns problemas possíveis de se notar devido a sua produção manual, a fábrica final será feita com uma máquina profissional de costura para mantê-lo suave.

Meta de Financiamento

 

A meta de campanha do Kickstarter de $13,000 irá cobrir os custos iniciais de produção do número mínimo de pelúcias da Marc e Aru. As pelúcias serão produzidas baseadas puramente nos pedidos de Kickstarter, e na possibilidade de sobrarem algumas em estoque serão vendidas por nossa loja online depois pelo preço estimado de $45-49 dependendo dos custos de produção de cada personagem.

Devia ter lembrado de reabastecer o Barril Vermelho antes daquele voo…

Nós estamos fazendo 4 personagens adicionais – Tomomo (Sweet Eater), Alte, Saki e Ceoreparque  – disponíveis como metas adicionais em preços que irão nos permitir cobrir os custos iniciais de produção! Todas as recompensas permitem que você escolha qualquer combinação de pelúcias que você desejar, incluindo qualquer uma das 6 pelúcias da primeira campanha, então se as metas adicionais forem cumpridas, as novas personagens também estarão disponíveis para sua seleção após a campanha. Mais detalhes sobre as metas adicionais na seção abaixo!

Metas Adicionais

 

Sobre as Metas Adicionais das cartas de unidade e hiper, nós não gostamos muito da qualidade final na última vez em termos da qualidade do papel e das sleeves, então se estas forem destravadas, nós iremos produzir “cartas de jogo” mais grossas, e elas serão enviadas em sleeves de um plástico mais duro para impedir-las de dobrar. 

Você pode mudar livremente entre qualquer personagem destravado ao fim da campanha, sem precisar mudar entre tiers.

Saki é fofa, fooofa! Não é mesmo?!

Quanto mais financiamento for recebido, mais personagens terão sua próxima pelúcia super-ultra-fofa!

Add-ons

 

Mais uma pelúcia!

Se você deseja receber uma pelúcia adicional (ou duas) na sua tier, simplesmente adicione o seguinte valor:

$36 – 1 pelúcia (+ $14 de frete) adicione $50 a mais no valor total

$70 – 2 pelúcias (+ $20 de frete) adicione $90 a mais no valor total

Lista completa de pelúcias confirmadas para produção:

Marc

Aru

A group photo of all wave 1 plushies

Uma foto em grupo de todas as pelúcias da primeira leva

Pelúcias de Hime, Star Breaker, QP, Marie Poppo, Sora, Suguri também estão disponíveis da primeira leva.

 

Pergaminhos de Parede!

Existem 3 diferentes pergaminhos de parede feitos de um tecido de alta qualidade disponíveis do jogo 100% Orange Juice no tamanho B2:

Halloween (arte por Kagawa Yusaku)

Jogos de Verão (arte por ayamy)

Capangas do Mestre (arte por Rosuuri)

Você pode adicionar qualquer combinação dos três pergaminhos de parede para sua compra adicionando os seguintes valores:

$35 – 1 Pergaminho de Parede (+ $15 de frete) adicione $50 a mais no valor total

$70 – 2 Pergaminhos de Parede (+ $20 de frete) adicione $90 a mais no valor total

$95 – 3 Pergaminhos de Parede (+ $25 de frete) adicione $120 a mais no valor total

Todos os pergaminhos de parede são feitos no Japão. Leve em conta também que é possível ajudar a campanha comprando apenas pergaminhos de parede com a tier de $1 e então adicionando o custo do Add-On de Pergaminho de Parede.

Nós iremos confirmar todos os conteúdos dos add-ons na enquete após o término da campanha.

Repartição do Financiamento

O custo de produção inicial para a quantidade mínima de pelúcias será de $8.000. Como o frete está incluso na quantia coletada no Kickstarter, a nossa meta é aumentada de acordo. A quantidade exata que podemos colocar na produção depende de quais tiers vocês escolherem (nós recomendamos em especial o pacote de pelúcias duplas para o frete mais barato!).

O valor estimado que nos permite produzir esses bens é o mesmo de antes:

Programação

Baseado na campanha anterior, nós esperamos que a produção das pelúcias demore até 3 meses depois do fim da campanha, e que a entrega total demore um total de 4-5 meses.

Alte curtindo um pouco de paz e tranquilidade

Leve em conta que nós já prototipamos todas as 6 pelúcias que poderão ser produzidas, então se modelos adicionais forem destravados, não irá causar demoras significativas dessa vez, e eles poderão ser todos entregues ao mesmo tempo.

Nós estamos trabalhando em conjunto com a Interweave Productions, LLC. na base de operações dos EUA na campanha.

Frete e Entrega

O custo do frete será de $15 por unidade em qualquer canto do mundo, com um pacote duplo contendo duas pelúcias custando $20 para enviar. Para a tier de uma pelúcia, nós cobrimos o valor do frete em $1 para trazer o preço para $50 redondos.

Tomomo está a espera para chegar no topo das tabelas de popularidade!

O frete também inclui os custos de entrega – nossa campanha de Kickstarter foi calculada para receber a exata quantia mínima para cobrir tudo desde produção até frete e entrega, sem nenhum lucro de nossa parte.

Infelizmente, devido a leis de importação e tributação, NÓS NÃO PODEMOS ENVIAR PARA: Cazaquistão, Afeganistão, além de zonas de guerra ativas.

PayPal

Assim que a campanha for financiada com sucesso, nós também iremos adicionar a opção de pagar via PayPal.

Se o financiamento for concluído, Repa irá fazer algumas mágicas!

Varejo

Se você é um revendedor que gostaria de vender uma quantidade grande de nossas pelúcias, por favor nos mande uma mensagem sobre grandes encomendas e redistribuição.

Riscos e desafios

Esta campanha é baseado na primeira campanha de pelúcias, que foi um grande sucesso, então estamos focando em manter o design igualmente simples. Nós já negociamos a produção das pelúcias e recebemos amostras delas para confirmar a qualidade. A esta altura, nós já completamos com sucesso 3 campanhas diferentes de Kickstarter, então temos um bom entendimento do processo e dos riscos, e embora tenhamos apenas um número pequeno de empregados, temos confiança em nossa habilidade em entregar um produto que nossos backers possam ficar felizes com.

Os riscos mais prováveis que não sejam Atos Divinos  são atrasos não previstos na produção e entrega.

 

귤즙 가득 오렌지 주스 봉제인형 – 2탄!

귤즙 가득 오렌지 주스 봉제인형 – 2탄!
오랫동안 기다려온 캐릭터 봉제인형 2탄이 드디어 왔습니다! 최고로 귀여운 오렌지 주스 봉제인형을 가져왔어요! 10월 8일 개시!

소개
기다림은 끝났습니다 -인기 만점100% 오렌지 주스 캐릭터 봉제인형 2탄이 왔습니다! 개발자 귤즙의 게임에 등장하는 캐릭터들에 기반해 만든 새 봉제인형 모델 여섯을 소개하겠습니다!

킥스타터에서만 목표치 817%를 모은 첫 봉제인형 캠페인의 대성공 이후로, 저희는 더 많은 캐릭터 선택지에 대한 요청에 대답하기 위해 물밑에서 작업을 해왔습니다. 많은 투표, 내부 토론, 디자인, 견본품 작업에 이어, 이제 새로 완성된 새 봉제인형 모델 6종을 보여드리게 되어 기쁩니다!

첫 캠페인에서 배운 것을 잘 활용해 이번 캠페인은 더 부드럽고, 늘씬하고, 멋지게 하려고 합니다!

새 봉제인형들의 단체사진

각 캐릭터 봉제인형들의 생산 비용을 충당하기 위해 캠페인의 첫 목표로는 처음 2명, 하늘을 나는 와인통의 주인공 마르와 크리스마스 슈팅 시리즈의 주인공 아루가 생산될 예정입니다!

추가 펀딩 목표를 달성하면 토모모(스위트 이터), 알테, 사키, 케오레파르퀘가 캠페인에 추가됩니다!

캠페인 종료 시 후원자들은 새로 개방된 캐릭터와 첫 캠페인의 여섯 캐릭터들, 마리 폿포, 스구리, 소라, 스타 브레이커, 큐피, 히메를 고를 수 있습니다.

이번에는 모든 봉제인형들의 견본을 만들어두었으니 연장 목표로 새 인형들이 개방되어도 배송 일정이 지연되지 않을 것입니다.

여러분의 킥스타터 후원만이 이 봉제인형들을 적절한 가격점으로 생산할 수 있게 해줄 수 있습니다!

봉제인형에 대해

이전과 같이 새 봉제인형 디자인은 이번 캠페인을 위해 귤즙의 원본 캐릭터 아티스트 호노가 담당했습니다. 우리는 기존 봉제인형 모델 생산도 담당한 미국에 기반한Symbiote Studios와 협업중입니다.

산타의 일은 끝나지 않아요

봉제인형은 약 25센티미터 높이로 나올 것입니다. 별도의 지지대 없이 똑바로 앉도록 설계되었습니다. 또한 모든 봉제인형들은 손에 작은 자석이 들어가 (봉제인형과 함께 오는 것들을 포함해) 여러가지 장식을 잡을 수 있습니다.

1탄의 사후 설문조사에서 봉제인형들의 모양과 품질에 대해 후원자들의 57%가 “엄청 기쁘다”고 응답했습니다. 전체 후원자들의 99%가 “엄청 기쁘다”, “많이 기쁘다”, “괜찮다”고 응답했으며 “기대에 미치지 않는다”는 단 1%, “전혀 기쁘지 않다”는 0%였습니다.

봉제인형들의 견본은 갤러리에서 확인하실 수 있습니다. 시제품은 최종 생산품이 아니며 최종 생산품은 생김새에 차이가 있을 수 있습니다. 보상은 시제품을 본따 생산될 것이지만 다른 공정을 거칠 것입니다 – 예를 들어 견본 머리는 수제로 만듦에서 비롯된 흠이 있지만 실제 생산 시에는 기계 공정을 통해 깔끔하게 자르고 다듬어질 것입니다.

펀딩 목표

킥스타터 캠페인 목표 13000달러는 마르와 아루 인형의 최소 수량의 생산비용을 충당할 것입니다. 인형들은 킥스타터 주문에 따라 생산될 것이며 잔여 수량이 저희의 온라인 스토어에 각 캐릭터의 생산비용에 따라 개당 예상가 45-49달러에 올라올 수 있습니다.

미리 레드 배럴의 연료를 채워놓았어야 했는데…

또 추가 캐릭터 4명 – 토모모 (스위트 이터), 알테, 사키 – 역시 초기 생산 비용을 충당하는 연장 목표에서 개방됩니다! 모든 보상에서 원하는 봉제인형 조합을 첫 캠페인의 봉제인형을 포함해 고를 수 있으니 연장 목표가 달성되면 새 캐릭터도 선택폭에 추가됩니다.


유닛과 하이퍼 카드 연장 목표에 대해 말씀드리자면, 지난 번에는 카드의 종이와 슬리브의 품질이 불만족스러웠습니다.그래서 이번에는 더 두꺼운 “게임 카드”로 만들고, 휘지 않도록 경질 플라스틱 “탑 로더” 슬리브로 포장할 것입니다.

캠페인 종료 시에 티어를 변경하지 않아도 개방된 캐릭터를 아무나 선택할 수 있습니다.

사키 귀엽죠, 귀엽죠오오오! 그쵸?!

펀딩 금액이 많이 모일수록 더 많은 캐릭터들의 짱짱 귀여운 봉제인형이 생깁니다!

추가품

인형 하나 더!

여러분의 후원 티어에서 인형을 하나(나 둘) 더 추가하고 싶으면 후원금에 다음과 같이 추가하세요:

봉제인형 1개 – 36달러 (+ 배송비 14달러) 후원금에 총 50달러를 추가
봉제인형 2개 – 70달러 (+ 배송비 20달러) 후원금에 총 90달러를 추가

생산이 확정된 봉제인형 목록

Marc

마르

 

아루

 

A group photo of all wave 1 plushies

1탄 봉제인형들의 단체사진

1탄의 히메, 스타 브레이커, 큐피, 마리 폿포, 소라, 스구리 봉제인형도 있습니다.

족자봉!

B2 사이즈 고품질 직물제 100% 오렌지 주스 족자봉 3종도 있습니다:

할로윈 (카가와 유사쿠 작)

여름날의 놀이 (ayamy 작)

주인의 부하들 (Rosuuri 작)

주문에 다음과 같이 추가분을 더하면 족자봉 3종 중에서 원하는 것을 선택해 주문할 수 있습니다.
족자봉 1개 – 35달러 (+ 배송비 15달러) 후원금에 총 50달러를 추가
족자봉 2개 – 70달러 (+ 배송비 20달러) 후원금에 총 90달러를 추가
족자봉 3개 – 95달러 (+ 배송비 25달러) 후원금에 총 120달러를 추가
족자봉은 모두 일본에서 생산됩니다. 또 1달러 티어를 선택하고 추가금액을 더해서 족자봉을 주문해도 캠페인을 도울 수 있습니다.

캠페인 종료 이후 설문에서 추가 품목들을 확인할 것입니다.

펀딩 결산

봉제인형의 초기 최소수량 생산비는 약 8000달러가 될 것입니다. 배송비도 포함된 가격이 킥스타터에 모일 것이므로 이에 따라 목표 금액도 올랐습니다. 실제 생산에 투자될 정확한 금액은 여러분 모두가 후원하는 티어(개당 배송비가 가장 싼 더블 봉제인형 팩을 특별 추천합니다)에 따라 변동됩니다.

물건을 생산하는 데 필요한 예측 수치는 이전과 같습니다:

봉제인형 생산: 62%
킥스타터 수수료: 8%
배송: 30%

일정

지난번에 기반해서, 봉제인형 생산은 캠페인 종료시로부터 약 3개월, 배송까지 총 4-5개월이 걸릴 것으로 예상됩니다.

평화와 고요를 즐기는 알테

봉제인형 6종 모두 미리 시제품을 생산해두었으므로 더 많은 모델이 개방돼도 이번에는 눈에 띄는 지연이 없을 것이며 모두 함께 배송될 수 있을 것입니다.

배송과 인건비

배송비는 전세계 대상으로 개당 15달러로, 봉제인형 2개가 든 더블 팩은 20달러로 배송될 것입니다. 봉제인형 1개 티어는 깔끔하게 50달러에 맞추기 위해 1달러를 저희가 부담합니다.

토모모가 인기 순위에서 선두로 치고 올라가길 기다리고 있어요!

배송비에는 인건비가 포함되어 있습니다 – 저희의 킥스타터 캠페인은 생산비부터 배송비와 인건비까지 모두 충당할 정확한 최소점에 맞춰 저희에게 가는 이득이 없도록 계산되었습니다.

유감스럽지만 수입법과 통관법상 카자흐스탄, 아프가니스탄, 분쟁 및 전쟁 지역에는 배송이 불가능합니다.

PayPal

킥스타터에서 후원 요청을 할 수 없지만 캠페인을 후원하고 싶다면 여기에서 PayPal을 통해 가능합니다.

주의: PayPal을 통해 후원을 할 때는 나중에 변경이 불가능하니 더욱 주의를 요구합니다. 연장 목표에 개방되는 추가 캐릭터도 있으므로 적절히 계획하세요!

캠페인 종료 이후에 별도 이메일 설문을 통해 PayPal 주문을 확인할 것입니다.

펀딩이 충분히 모이면 레파가 마법을 써볼 거예요!

리테일러

봉제인형을 대량으로 판매하고 싶으신 리테일러 분은 저희에게 대량 주문과 재분배에 대해 연락을 해주세요.

리스크와 과제

이 캠페인은 크게 성공한 첫 봉제인형 캠페인을 본보기로 진행중이며 디자인을 이전과 같이 단순하게 가는 것을 목표로 했습니다. 봉제인형 생산자와 협의를 하고 품질을 확인하기 위해 견본을 받았습니다. 현 시점에서 저희는 킥스타터 캠페인 3개를 성공적으로 마쳐 과정과 리스크에 대해 잘 이해했으며 직원 수가 적어도 후원자 분들이 만족할 상품을 전할 능력이 됨을 자신합니다.

가장 가능성이 높은 리스크로는 예정에 없던 생산 또는 배송 지연이 있습니다.

킥스타터 상 고지 의무에 대해 알아보기

후원 티어

1달러 이상 후원
넘버원 인형 팬
새 봉제인형의 귀여움을 상상하고 싶으시다고요? 이 티어에 등록해서 저희 프로젝트의 업데이트를 확인하세요.

36달러 이상 후원
엄청 귀여운 봉제인형 하나
원하는 봉제인형을 1탄 봉제인형을 포함해 하나 선택해서 받습니다.
구성:
– 원하는 봉제인형

70달러 이상 후원
엄청 귀여운 봉제인형 둘
원하는 봉제인형을 1탄 봉제인형을 포함해 둘 선택해서 배송비가 절감된 더블 팩으로 받습니다!
구성:
– 2x 원하는 봉제인형

138달러 이상 후원
엄청 귀여운 봉제인형 넷
원하는 봉제인형을 1탄 봉제인형을 포함해 넷 선택해서 받습니다!
구성:
– 4x 원하는 봉제인형

205달러 이상 후원
어어어어엄청 귀여운 봉제인형 여섯
원하는 봉제인형을 1탄 봉제인형을 포함해 여섯 선택해서 받습니다!
구성:
-6x 원하는 봉제인형

400달러 이상 후원
봉제인형 마스터
궁극의 봉제인형 마스터들을 위한 이 팩은 1탄 봉제인형을 포함해 원하는 봉제인형 열두 개를 보내드립니다!
구성:
-12x 원하는 봉제인형

3000달러 이상 후원
토모모 공간
말 그대로 봉제인형 속에서 헤엄치고 싶으세요? 이 티어에서는 원하는 봉제인형을 1탄 봉제인형을 포함해 백 개 선택해서 받습니다!
구성:
-100x 원하는 봉제인형

果汁滿滿 Orange Juice 毛絨公仔 Kickstarter 項目第二批

本頁面是 Kickstarter 頁面的簡體中文翻譯。在這個是無法進行眾籌支持的。

(此後的眾籌更新將不會在此翻譯頁面跟進,敬請見諒。)


支持

Plushie Fan #1
支持 US$ 1 以上
看看本項目的更新

One Super Cute Plushie
支持 US$ 36 以上
獲得 1 個你想要的毛絨公仔
(也可選擇第一批中的毛絨公仔)

Two Super Cute Plushies
支持 US$ 70 以上
獲得 2 個你想要的毛絨公仔並額外省下一點運費
(也可選擇第一批中的毛絨公仔)

Four Super Cute Plushies
支持 US$ 138 以上
獲得 4 個你想要的毛絨公仔套裝
(也可選擇第一批中的毛絨公仔)

Six Suuuuper Cute Plushies!
支持 US$ 205 以上
獲得 6 個你想要的毛絨公仔套裝
(也可選擇第一批中的毛絨公仔)

Plushie Master
支持 US$ 400 以上
何不嘗試一下被 12 個你想要的毛絨公仔包圍起來?
(也可選擇第一批中的毛絨公仔)

Tomomo Hell
支持 US$ 3,000 以上
來 100 個你想要的毛絨公仔如何?
(也可選擇第一批中的毛絨公仔)


目標

$13,000 – 瑪兒亞琉的毛絨公仔化

延伸目標

$17,000 – Hyper 卡
紙質的 Hyper 卡會作為免費特典隨毛絨公仔贈送。

$21,000 – 阿露特的毛絨公仔化

$25,000 – 角色卡
紙質的角色卡會作為免費特典隨毛絨公仔贈送。

$29,000 – 兔萌萌(甜點品嚐者)的毛絨公仔化

$37,000 – 紗季的毛絨公仔化

$45,000 – 柯歐蕾帕露可的毛絨公仔化


關於這個項目

漫長的等待已經結束了——之前大受歡迎的 100% 鮮橙汁角色毛絨公仔的第二批已經來臨了!我們很高興能夠公佈六種全新的毛絨公仔!

在第一次毛絨公仔眾籌取得了巨大的成功,僅在 Kickstarter 上就獲得了目標金額八倍的眾籌金額後,為了迴應想要更多可選的角色種類的呼聲,我們一直在默默努力著。經過了大量投票、內部討論、設計與原型製作,我們很高興能夠為你帶來六個已經完成原型的全新角色毛絨公仔。

通過前一次眾籌的經驗,我們使這次眾籌變得更加順暢、簡潔和清爽。

全6種毛絨公仔合影

最初的眾籌目標是《飛天紅酒桶》的主角瑪兒和《聖誕追擊》系列的主角亞琉,眾籌費用將作為毛絨公仔的生產費用。

達成額外眾籌目標後,兔萌萌(甜點品嚐者)阿露特紗季柯歐蕾帕露可也將被加入眾籌!

在眾籌結束時,支持者不僅可以選擇所有新解鎖的角色,還可以選擇上次眾籌的 6 名角色:瑪麗啵噗須玖莉優空星球破壞者QP姬夢

與上次不同,這次已經預先完成了所有毛絨公仔的原型製作,所有延伸目標解鎖的類型不再會延遲發貨時間。

感謝所有 Kickstarter 支持者使我們有機會製作出這些毛絨公仔!


關於毛絨公仔

與上次一樣,新的毛絨公仔還是由橙汁的原角色畫師 Hono 設計的。製作方面也依然是由美國的 Symbiote Studios 來進行的。

聖誕小姐的工作永不停歇

毛絨公仔的高度約為 25 釐米,被設計為可以在沒有支撐的情況下以坐姿直立。此外所有公仔手中都隱藏的小型磁鐵,使她們可以持握包括隨公仔附送的配件在內的各種配件。

在上一批毛絨公仔眾籌結束後的投票調查中,57% 的支持者對於公仔的外觀與質量表示“非常滿意”,總共有 99% 的支持者選擇了“非常滿意”、“很滿意”和“還可以”,僅 1% 選擇了“低於預期”,0% 選擇了“非常不滿意”。

需要注意的是,這些原型並非最終產品,實際產品可能有所不同。實際產品將會依照樣品生產,但流程不同。舉例來說,樣品的頭髮存在一些手工製作導致的問題,但在實際生產中會使用專業模切機來保證質量。

目標金額

Kickstarter 眾籌目標的 $13,000 為瑪兒亞琉毛絨公仔的最低生產數量成本。公仔會按照 Kickstarter 訂單進行生產,剩餘庫存將會在我們的在線商店進行銷售,預計會按照角色生產成本不同定價為 $45~49。

我該在起飛前給赤紅酒桶加油的……

同時我們將兔萌萌(甜點品嚐者)阿露特紗季柯歐蕾帕露可作為延伸目標,將其放在作為初期生產費用的價格點。所有包含毛絨公仔的支持檔位都可以任意選擇不同公仔組合,其中包括了所有第一批的六種毛絨公仔,如果達成了延伸目標,在眾籌結束後這些角色也將會加入選擇範圍內。


延伸目標

關於角色卡Hyper 卡的延伸目標,我們對上一次的紙質與卡套感到略微的不滿意,所以如果這次的對應目標被解鎖了,我們會將其生產為較厚的“遊戲卡牌”,幷包裝在硬塑料的上插式卡套中以防止摺疊。

在眾籌結束後,你可以隨意選擇任何已解鎖的角色,而無需改變支持的檔位。

紗季很可愛,超可愛!對吧!

隨著支持金額的提升,會有更多的角色被毛絨公仔化!


追加

再來一個!

如果在支持檔位外還想要額外的一個或兩個毛絨公仔,可以直接將以下部分追加到你的訂單中:

$50:一個毛絨公仔($36)+ 運費($14)

$90:兩個毛絨公仔($70)+ 運費($20)

會被生產的毛絨公仔列表:

瑪兒

亞琉

第一批毛絨公仔合影

還有第一批的姬夢、星球破壞者、QP、瑪麗啵噗、優空和須玖莉。

掛畫!

有三種 B2 尺寸的 100% 鮮橙汁布制掛畫可供選擇:

萬聖節(畫師:香川悠作)

夏日遊戲(畫師:あやみ)

魔王的僕從們(畫師:Rosuuri)

你可以將以下部分追加到訂單中,並可以隨意選擇並組合三種掛畫:

$50:一張掛畫($35)+ 運費($15)

$90:兩張掛畫($70)+ 運費($20)

$120:三張掛畫($95)+ 運費($25)

所有掛畫均為日本生產。需要特別注意的是,你也可以通過在支持 $1 檔位後追加掛畫來單獨購買掛畫並支持眾籌。

我們將在眾籌結束後通過問卷確認所有追加內容選擇。

眾籌金額詳細用途

毛絨公仔的最低生產數量成本約為 $8,000。由於運費包括在眾籌金額內,我們相應地提高了目標金額。實際可生產的數量將會取決於眾籌金額(推薦購買毛絨公仔雙重包以獲得更便宜的運費!)。

實際可用於生產的金額估算與上一次相同:

毛絨公仔生產:62%
Kickstarter 手續費:8%
運費:30%

日程安排

依照上一次的時間,我們預計毛絨公仔的生產會在眾籌結束後花費最多三個月的時間,而直到完全交付總共需要四至五個月。

享受著寧靜的阿露特

由於這一次我們已經預先製作了可能會被生產的六種毛絨公仔的原型,所以如果解鎖了額外的種類,並不會因此產生明顯的延誤,並且可以一同發貨。

這次眾籌由美國的 Interweave Productions LLC 合作進行。

運費與手續費

全球任意地區的運費為每件 $15,包含兩個毛絨公仔的雙重包的運費為 $20。對於單個公仔的檔位,我們承擔了 $1 運費使價格降至 $50 整。

伺機登上人氣榜榜首的兔萌萌!

運費同時包含手續費,眾籌以最低限度承擔生產費、運費與手續費為目的,我們並不會從中獲得利潤。

遺憾的是,由於進口法律和海關的影響,我們無法將其發送至:哈薩克斯坦,阿富汗與戰爭地區

PayPal

如果你無法在 Kickstarter 上進行支付,又希望支持眾籌的話,你也可以使用 PayPal 進行支持

注意:由於之後無法在 PayPal 修改檔位,所以在選擇時請格外小心。請記住,延伸目標包含了可能會被解鎖的其他角色,請提前進行規劃。

在眾籌結束後我們會通過電子郵件確認 PayPal 訂單的內容。

如果達到了眾籌目標,蕾帕會展現一些魔法!

零售商

如果你是有意向進行大量銷售的零售商,請聯繫我們批發與分發的相關事宜。

風險與挑戰

本次眾籌是基於非常成功的前一次毛絨公仔眾籌而進行的,我們儘量使其保持了前一次的簡潔。我們已經完成了毛絨公仔的生產協商,並通過樣品其質量。在此之前,我們已完成過三次不同的 Kickstarter 眾籌,我們對流程與風險已經有了很好的瞭解,儘管我們只有很少的員工,但我們對能夠交付出使支持者滿意的產品充滿信心。

除自然災害外,最可能出現的風險是生產與運輸途中發生的意外延誤。

瞭解 Kickstarter 的問責制度

果汁满满 Orange Juice 毛绒公仔 Kickstarter 项目第二批

本页面是 Kickstarter 页面的简体中文翻译。在这个是无法进行众筹支持的。

(此后的众筹更新将不会在此翻译页面跟进,敬请见谅。)


支持

Plushie Fan #1
支持 US$ 1 以上
看看本项目的更新

One Super Cute Plushie
支持 US$ 36 以上
获得 1 个你想要的毛绒公仔
(也可选择第一批中的毛绒公仔)

Two Super Cute Plushies
支持 US$ 70 以上
获得 2 个你想要的毛绒公仔并额外省下一点运费
(也可选择第一批中的毛绒公仔)

Four Super Cute Plushies
支持 US$ 138 以上
获得 4 个你想要的毛绒公仔套装
(也可选择第一批中的毛绒公仔)

Six Suuuuper Cute Plushies!
支持 US$ 205 以上
获得 6 个你想要的毛绒公仔套装
(也可选择第一批中的毛绒公仔)

Plushie Master
支持 US$ 400 以上
何不尝试一下被 12 个你想要的毛绒公仔包围起来?
(也可选择第一批中的毛绒公仔)

Tomomo Hell
支持 US$ 3,000 以上
来 100 个你想要的毛绒公仔如何?
(也可选择第一批中的毛绒公仔)


目标

$13,000 – 玛儿亚琉的毛绒公仔化

延伸目标

$17,000 – Hyper 卡
纸质的 Hyper 卡会作为免费特典随毛绒公仔赠送。

$21,000 – 阿露特的毛绒公仔化

$25,000 – 角色卡
纸质的角色卡会作为免费特典随毛绒公仔赠送。

$29,000 – 兔萌萌(甜点品尝者)的毛绒公仔化

$37,000 – 纱季的毛绒公仔化

$45,000 – 柯欧蕾帕露可的毛绒公仔化


关于这个项目

漫长的等待已经结束了——之前大受欢迎的 100% 鲜橙汁角色毛绒公仔的第二批已经来临了!我们很高兴能够公布六种全新的毛绒公仔!

在第一次毛绒公仔众筹取得了巨大的成功,仅在 Kickstarter 上就获得了目标金额八倍的众筹金额后,为了回应想要更多可选的角色种类的呼声,我们一直在默默努力着。经过了大量投票、内部讨论、设计与原型制作,我们很高兴能够为你带来六个已经完成原型的全新角色毛绒公仔。

通过前一次众筹的经验,我们使这次众筹变得更加顺畅、简洁和清爽。

全6种毛绒公仔合影

最初的众筹目标是《飞天红酒桶》的主角玛儿和《圣诞追击》系列的主角亚琉,众筹费用将作为毛绒公仔的生产费用。

达成额外众筹目标后,兔萌萌(甜点品尝者)阿露特纱季柯欧蕾帕露可也将被加入众筹!

在众筹结束时,支持者不仅可以选择所有新解锁的角色,还可以选择上次众筹的 6 名角色:玛丽啵噗须玖莉优空星球破坏者QP姬梦

与上次不同,这次已经预先完成了所有毛绒公仔的原型制作,所有延伸目标解锁的类型不再会延迟发货时间。

感谢所有 Kickstarter 支持者使我们有机会制作出这些毛绒公仔!


关于毛绒公仔

与上次一样,新的毛绒公仔还是由橙汁的原角色画师 Hono 设计的。制作方面也依然是由美国的 Symbiote Studios 来进行的。

圣诞小姐的工作永不停歇

毛绒公仔的高度约为 25 厘米,被设计为可以在没有支撑的情况下以坐姿直立。此外所有公仔手中都隐藏的小型磁铁,使她们可以持握包括随公仔附送的配件在内的各种配件。

在上一批毛绒公仔众筹结束后的投票调查中,57% 的支持者对于公仔的外观与质量表示“非常满意”,总共有 99% 的支持者选择了“非常满意”、“很满意”和“还可以”,仅 1% 选择了“低于预期”,0% 选择了“非常不满意”。

需要注意的是,这些原型并非最终产品,实际产品可能有所不同。实际产品将会依照样品生产,但流程不同。举例来说,样品的头发存在一些手工制作导致的问题,但在实际生产中会使用专业模切机来保证质量。

目标金额

Kickstarter 众筹目标的 $13,000 为玛儿亚琉毛绒公仔的最低生产数量成本。公仔会按照 Kickstarter 订单进行生产,剩余库存将会在我们的在线商店进行销售,预计会按照角色生产成本不同定价为 $45~49。

我该在起飞前给赤红酒桶加油的……

同时我们将兔萌萌(甜点品尝者)阿露特纱季柯欧蕾帕露可作为延伸目标,将其放在作为初期生产费用的价格点。所有包含毛绒公仔的支持档位都可以任意选择不同公仔组合,其中包括了所有第一批的六种毛绒公仔,如果达成了延伸目标,在众筹结束后这些角色也将会加入选择范围内。


延伸目标

关于角色卡Hyper 卡的延伸目标,我们对上一次的纸质与卡套感到略微的不满意,所以如果这次的对应目标被解锁了,我们会将其生产为较厚的“游戏卡牌”,并包装在硬塑料的上插式卡套中以防止折叠。

在众筹结束后,你可以随意选择任何已解锁的角色,而无需改变支持的档位。

纱季很可爱,超可爱!对吧!

随着支持金额的提升,会有更多的角色被毛绒公仔化!


追加

再来一个!

如果在支持档位外还想要额外的一个或两个毛绒公仔,可以直接将以下部分追加到你的订单中:

$50:一个毛绒公仔($36)+ 运费($14)

$90:两个毛绒公仔($70)+ 运费($20)

会被生产的毛绒公仔列表:

玛儿

亚琉

第一批毛绒公仔合影

还有第一批的姬梦、星球破坏者、QP、玛丽啵噗、优空和须玖莉。

挂画!

有三种 B2 尺寸的 100% 鲜橙汁布制挂画可供选择:

万圣节(画师:香川悠作)

夏日游戏(画师:あやみ)

魔王的仆从们(画师:Rosuuri)

你可以将以下部分追加到订单中,并可以随意选择并组合三种挂画:

$50:一张挂画($35)+ 运费($15)

$90:两张挂画($70)+ 运费($20)

$120:三张挂画($95)+ 运费($25)

所有挂画均为日本生产。需要特别注意的是,你也可以通过在支持 $1 档位后追加挂画来单独购买挂画并支持众筹。

我们将在众筹结束后通过问卷确认所有追加内容选择。

众筹金额详细用途

毛绒公仔的最低生产数量成本约为 $8,000。由于运费包括在众筹金额内,我们相应地提高了目标金额。实际可生产的数量将会取决于众筹金额(推荐购买毛绒公仔双重包以获得更便宜的运费!)。

实际可用于生产的金额估算与上一次相同:

毛绒公仔生产:62%
Kickstarter 手续费:8%
运费:30%

日程安排

依照上一次的时间,我们预计毛绒公仔的生产会在众筹结束后花费最多三个月的时间,而直到完全交付总共需要四至五个月。

享受着宁静的阿露特

由于这一次我们已经预先制作了可能会被生产的六种毛绒公仔的原型,所以如果解锁了额外的种类,并不会因此产生明显的延误,并且可以一同发货。

这次众筹由美国的 Interweave Productions LLC 合作进行。

运费与手续费

全球任意地区的运费为每件 $15,包含两个毛绒公仔的双重包的运费为 $20。对于单个公仔的档位,我们承担了 $1 运费使价格降至 $50 整。

伺机登上人气榜榜首的兔萌萌!

运费同时包含手续费,众筹以最低限度承担生产费、运费与手续费为目的,我们并不会从中获得利润。

遗憾的是,由于进口法律和海关的影响,我们无法将其发送至:哈萨克斯坦,阿富汗与战争地区

PayPal

如果你无法在 Kickstarter 上进行支付,又希望支持众筹的话,你也可以使用 PayPal 进行支持

注意:由于之后无法在 PayPal 修改档位,所以在选择时请格外小心。请记住,延伸目标包含了可能会被解锁的其他角色,请提前进行规划。

在众筹结束后我们会通过电子邮件确认 PayPal 订单的内容。

如果达到了众筹目标,蕾帕会展现一些魔法!

零售商

如果你是有意向进行大量销售的零售商,请联系我们批发与分发的相关事宜。

风险与挑战

本次众筹是基于非常成功的前一次毛绒公仔众筹而进行的,我们尽量使其保持了前一次的简洁。我们已经完成了毛绒公仔的生产协商,并通过样品其质量。在此之前,我们已完成过三次不同的 Kickstarter 众筹,我们对流程与风险已经有了很好的了解,尽管我们只有很少的员工,但我们对能够交付出使支持者满意的产品充满信心。

除自然灾害外,最可能出现的风险是生产与运输途中发生的意外延误。

了解 Kickstarter 的问责制度