Your kittens return empty-pawed

kittens-game

Usually I see "Zebras hate you for no reason" if trading with zebras fails, but sometimes I see "Your kittens return empty-pawed".

What is the difference?


Saw it again:

Year 490, Summer: Your kittens return empty-pawed
Year 490, Summer: You have sent 2 trade caravans

I was not full on either iron or titanium.

Best Answer

Looking at the code of the game, it seems that you will only receive the "[Race] hate you for no reason" message for single trade missions, while you will receive the "Your kittens return empty-pawed" message if you send multiple trade missions at once and they all fail, e.g. from hostile relations, or failed trade chances from Dragons or Leviathans.


On a more technical level...

Four functions are of particular significance here: trade, tradeMultiple, tradeInternal, and printYieldOutput. trade is called for single trade missions, tradeMultiple is called for multiple trade missions. Both functions call tradeInternal to determine the results of each individual trade mission.

tradeInternal will normally print out the hostile/friendly messages, but it can be passed a boolean value to specify that these messages should be suppressed, which tradeMultiple does. tradeInternal will return a null value if you get the "[Race] hate you" result, otherwise it will return the details of what you got. Even if the trade fails for reasons other than hostile relations, tradeInternal will still return an empty set.

trade will pass the results from tradeInternal directly into printYieldOutput, while tradeMultiple will gather the results into a set before passing them. Herein lies the determining factor for whether the "Your kittens return empty-pawed" message will be shown. If printYieldOutput receives a null value, it will effectively do nothing. However, if it receives an empty set, it will instead print the message in question.


Source: Kittens Game BitBucket repository, lines 418 to 588 as of posting