diff options
19 files changed, 62 insertions, 32 deletions
diff --git a/.github/workflows/build_macos.yml b/.github/workflows/build_macos.yml index 951cc40..1cfd12c 100644 --- a/.github/workflows/build_macos.yml +++ b/.github/workflows/build_macos.yml @@ -51,7 +51,7 @@ jobs: - name: Upload Artifacts uses: actions/upload-artifact@v4 with: - name: OpenStarbound-Dev-macOS-Intel + name: OpenStarbound-macOS-Intel path: dist/* build-arm: @@ -93,5 +93,5 @@ jobs: - name: Upload Artifacts uses: actions/upload-artifact@v4 with: - name: OpenStarbound-Dev-macOS-Silicon + name: OpenStarbound-macOS-Silicon path: dist/*
\ No newline at end of file diff --git a/.github/workflows/build_windows.yml b/.github/workflows/build_windows.yml index cf50594..d3ee36b 100644 --- a/.github/workflows/build_windows.yml +++ b/.github/workflows/build_windows.yml @@ -85,5 +85,5 @@ jobs: - name: Upload Installer uses: actions/upload-artifact@v4 with: - name: Installer + name: OpenStarbound-Windows-Installer path: installer/* diff --git a/assets/opensb/opensb/coconut.png b/assets/opensb/opensb/coconut.png Binary files differnew file mode 100644 index 0000000..3a5192b --- /dev/null +++ b/assets/opensb/opensb/coconut.png diff --git a/assets/opensb/rendering/error.png b/assets/opensb/rendering/sprites/error.png Binary files differindex b5bd3e7..b5bd3e7 100644 --- a/assets/opensb/rendering/error.png +++ b/assets/opensb/rendering/sprites/error.png diff --git a/assets/opensb/rendering/error_left.png b/assets/opensb/rendering/sprites/error_left.png Binary files differindex 2f4ec6f..2f4ec6f 100644 --- a/assets/opensb/rendering/error_left.png +++ b/assets/opensb/rendering/sprites/error_left.png diff --git a/assets/opensb/rendering/error_right.png b/assets/opensb/rendering/sprites/error_right.png Binary files differindex 1fadd17..1fadd17 100644 --- a/assets/opensb/rendering/error_right.png +++ b/assets/opensb/rendering/sprites/error_right.png diff --git a/scripts/ci/linux/assemble.sh b/scripts/ci/linux/assemble.sh index cdd6cb2..241175d 100755 --- a/scripts/ci/linux/assemble.sh +++ b/scripts/ci/linux/assemble.sh @@ -21,6 +21,7 @@ cp \ lib/linux/libsteam_api.so \ scripts/ci/linux/sbinit.config \ scripts/ci/linux/run-client.sh \ + scripts/steam_appid.txt \ client_distribution/linux/ mkdir server_distribution @@ -38,6 +39,7 @@ cp \ dist/btree_repacker \ scripts/ci/linux/run-server.sh \ scripts/ci/linux/sbinit.config \ + scripts/steam_appid.txt \ server_distribution/linux/ tar -cvf dist.tar dist diff --git a/scripts/ci/macos/assemble.sh b/scripts/ci/macos/assemble.sh index e60b2c0..2e8164d 100755 --- a/scripts/ci/macos/assemble.sh +++ b/scripts/ci/macos/assemble.sh @@ -24,4 +24,5 @@ cp \ dist/planet_mapgen \ scripts/ci/macos/sbinit.config \ scripts/ci/macos/run-server.sh \ + scripts/steam_appid.txt \ client_distribution/osx/
\ No newline at end of file diff --git a/scripts/ci/windows/assemble.bat b/scripts/ci/windows/assemble.bat index 68532c0..e7f4dc3 100644 --- a/scripts/ci/windows/assemble.bat +++ b/scripts/ci/windows/assemble.bat @@ -8,6 +8,7 @@ mkdir %client%\mods mkdir %client%\logs mkdir %client%\assets mkdir %client%\win +echo 211820 > %client%\win\steam_appid.txt set server=server_distribution if exist %server% rmdir %server% /S /Q diff --git a/source/frontend/StarMainInterface.cpp b/source/frontend/StarMainInterface.cpp index f9e8d57..153ce07 100644 --- a/source/frontend/StarMainInterface.cpp +++ b/source/frontend/StarMainInterface.cpp @@ -760,23 +760,30 @@ void MainInterface::update(float dt) { m_chatBubbleManager->setCamera(m_worldPainter->camera()); if (auto worldClient = m_client->worldClient()) { auto chatActions = worldClient->pullPendingChatActions(); - auto portraitActions = chatActions.filtered([](ChatAction action) { return action.is<PortraitChatAction>(); }); - - for (auto action : portraitActions) { - PortraitChatAction portraitAction = action.get<PortraitChatAction>(); - - String name; - if (auto npc = as<Npc>(worldClient->entity(portraitAction.entity))) - name = npc->name(); - - ChatReceivedMessage message = { - { MessageContext::World }, - ServerConnectionId, - Text::stripEscapeCodes(name), - Text::stripEscapeCodes(portraitAction.text), - Text::stripEscapeCodes(portraitAction.portrait.replace("<frame>", "0")) - }; - m_chat->addMessages({message}, false); + + for (auto& action : chatActions) { + if (action.is<PortraitChatAction>()) { + PortraitChatAction& portraitAction = action.get<PortraitChatAction>(); + + String name; + if (auto npc = as<Npc>(worldClient->entity(portraitAction.entity))) + name = npc->name(); + + ChatReceivedMessage message = { + {MessageContext::World}, + ServerConnectionId, + Text::stripEscapeCodes(name), + Text::stripEscapeCodes(portraitAction.text), + Text::stripEscapeCodes(portraitAction.portrait.replace("<frame>", "0"))}; + m_chat->addMessages({message}, false); + } else if (action.is<SayChatAction>()) { + SayChatAction& sayAction = action.get<SayChatAction>(); + + if (sayAction.config) { + if (auto message = sayAction.config.opt("message")) + m_chat->addMessages({ChatReceivedMessage(*message)}, sayAction.config.getBool("showPane", false)); + } + } } m_chatBubbleManager->addChatActions(chatActions); diff --git a/source/game/StarChatTypes.cpp b/source/game/StarChatTypes.cpp index a717be3..79dfc4f 100644 --- a/source/game/StarChatTypes.cpp +++ b/source/game/StarChatTypes.cpp @@ -55,7 +55,7 @@ ChatReceivedMessage::ChatReceivedMessage(Json const& json) : ChatReceivedMessage fromConnection = json.getUInt("fromConnection", 0); fromNick = json.getString("fromNick", ""); portrait = json.getString("portrait", ""); - text = json.getString("text"); + text = json.getString("text", ""); } Json ChatReceivedMessage::toJson() const { diff --git a/source/game/StarObject.cpp b/source/game/StarObject.cpp index fe1f3f3..3172c97 100644 --- a/source/game/StarObject.cpp +++ b/source/game/StarObject.cpp @@ -110,6 +110,8 @@ Object::Object(ObjectConfigConstPtr config, Json const& parameters) { m_netGroup.setNeedsLoadCallback(bind(&Object::getNetStates, this, _1)); m_netGroup.setNeedsStoreCallback(bind(&Object::setNetStates, this)); + + m_clientEntityMode = ClientEntityModeNames.getLeft(configValue("clientEntityMode", "ClientSlaveOnly").toString()); } Json Object::diskStore() const { @@ -127,6 +129,10 @@ EntityType Object::entityType() const { return EntityType::Object; } +ClientEntityMode Object::clientEntityMode() const { + return m_clientEntityMode; +} + void Object::init(World* world, EntityId entityId, EntityMode mode) { Entity::init(world, entityId, mode); // Only try and find a new orientation if we do not already have one, @@ -182,7 +188,8 @@ void Object::init(World* world, EntityId entityId, EntityMode mode) { setKeepAlive(configValue("keepAlive", false).toBool()); - m_scriptComponent.setScripts(m_config->scripts); + auto scripts = jsonToStringList(configValue("scripts", JsonArray()).toArray()); + m_scriptComponent.setScripts(scripts.transformed(bind(AssetPath::relativeTo, m_config->path, _1))); m_scriptComponent.setUpdateDelta(configValue("scriptDelta", 5).toInt()); m_scriptComponent.addCallbacks("object", makeObjectCallbacks()); diff --git a/source/game/StarObject.hpp b/source/game/StarObject.hpp index 6483a27..a797842 100644 --- a/source/game/StarObject.hpp +++ b/source/game/StarObject.hpp @@ -40,6 +40,7 @@ public: ByteArray netStore(); virtual EntityType entityType() const override; + virtual ClientEntityMode clientEntityMode() const override; virtual void init(World* world, EntityId entityId, EntityMode mode) override; virtual void uninit() override; @@ -267,6 +268,8 @@ private: NetElementHashMap<String, Json> m_scriptedAnimationParameters; NetElementData<List<DamageSource>> m_damageSources; + + ClientEntityMode m_clientEntityMode; }; } diff --git a/source/game/StarPlayer.cpp b/source/game/StarPlayer.cpp index 8b15254..94ed991 100644 --- a/source/game/StarPlayer.cpp +++ b/source/game/StarPlayer.cpp @@ -976,15 +976,21 @@ void Player::update(float dt, uint64_t) { }); } - for (auto tool : {m_tools->primaryHandItem(), m_tools->altHandItem()}) { + for (auto& tool : {m_tools->primaryHandItem(), m_tools->altHandItem()}) { if (auto inspectionTool = as<InspectionTool>(tool)) { - for (auto ir : inspectionTool->pullInspectionResults()) { + for (auto& ir : inspectionTool->pullInspectionResults()) { if (ir.objectName) { m_questManager->receiveMessage("objectScanned", true, {*ir.objectName, *ir.entityId}); m_log->addScannedObject(*ir.objectName); } - addChatMessage(ir.message); + addChatMessage(ir.message, JsonObject{ + {"message", JsonObject{ + {"context", JsonObject{{"mode", "RadioMessage"}}}, + {"fromConnection", world()->connection()}, + {"text", ir.message} + }} + }); } } } @@ -2178,12 +2184,12 @@ void Player::queueItemPickupMessage(ItemPtr const& item) { m_queuedItemPickups.append(item); } -void Player::addChatMessage(String const& message) { +void Player::addChatMessage(String const& message, Json const& config) { starAssert(!isSlave()); m_chatMessage = message; m_chatMessageUpdated = true; m_chatMessageChanged = true; - m_pendingChatActions.append(SayChatAction{entityId(), message, mouthPosition()}); + m_pendingChatActions.append(SayChatAction{entityId(), message, mouthPosition(), config}); } void Player::addEmote(HumanoidEmote const& emote, Maybe<float> emoteCooldown) { diff --git a/source/game/StarPlayer.hpp b/source/game/StarPlayer.hpp index fb32005..d6750a5 100644 --- a/source/game/StarPlayer.hpp +++ b/source/game/StarPlayer.hpp @@ -381,7 +381,7 @@ public: void queueUIMessage(String const& message) override; void queueItemPickupMessage(ItemPtr const& item); - void addChatMessage(String const& message); + void addChatMessage(String const& message, Json const& config = {}); void addEmote(HumanoidEmote const& emote, Maybe<float> emoteCooldown = {}); pair<HumanoidEmote, float> currentEmote() const; diff --git a/source/game/StarSystemWorldClient.cpp b/source/game/StarSystemWorldClient.cpp index eb25124..e390860 100644 --- a/source/game/StarSystemWorldClient.cpp +++ b/source/game/StarSystemWorldClient.cpp @@ -75,7 +75,8 @@ void SystemWorldClient::update(float dt) { m_clientShips.clear(); m_ship = {}; m_location = Vec3I(); - } + } else if (auto celestialSlave = as<CelestialSlaveDatabase>(m_celestialDatabase)) + celestialSlave->signalSystem(currentSystem()); // keeps the celestial chunk for our current system alive } List<SystemObjectPtr> SystemWorldClient::objects() const { diff --git a/source/game/StarUniverseServer.cpp b/source/game/StarUniverseServer.cpp index 7927aae..7317e52 100644 --- a/source/game/StarUniverseServer.cpp +++ b/source/game/StarUniverseServer.cpp @@ -735,7 +735,7 @@ void UniverseServer::kickErroredPlayers() { for (auto const& worldId : m_worlds.keys()) { if (auto world = getWorld(worldId)) { for (auto clientId : world->erroredClients()) - m_pendingDisconnections.add(clientId, "Incoming client packet has caused exception"); + m_pendingDisconnections[clientId] = "Incoming client packet has caused exception"; } } } @@ -1714,8 +1714,9 @@ void UniverseServer::acceptConnection(UniverseConnection connection, Maybe<HostA Vec3I location = clientContext->shipCoordinate().location(); if (location != Vec3I()) { - auto clientSystem = createSystemWorld(clientContext->shipCoordinate().location()); + auto clientSystem = createSystemWorld(location); clientSystem->addClient(clientId, clientContext->playerUuid(), clientContext->shipUpgrades().shipSpeed, clientContext->shipLocation()); + addCelestialRequests(clientId, {makeLeft(location.vec2()), makeRight(location)}); clientContext->setSystemWorld(clientSystem); } diff --git a/source/game/StarWorldClient.cpp b/source/game/StarWorldClient.cpp index ef5daa2..aa6f293 100644 --- a/source/game/StarWorldClient.cpp +++ b/source/game/StarWorldClient.cpp @@ -496,7 +496,7 @@ void WorldClient::render(WorldRenderData& renderData, unsigned bufferTiles) { else { // this is THEIR problem!! Logger::error("WorldClient: Exception caught in {}::render ({}): {}", EntityTypeNames.getRight(entity->entityType()), entity->entityId(), e.what()); auto toolUser = as<ToolUserEntity>(entity); - String image = toolUser ? strf("/rendering/error_{}.png", DirectionNames.getRight(toolUser->facingDirection())) : "/rendering/error.png"; + String image = toolUser ? strf("/rendering/sprites/error_{}.png", DirectionNames.getRight(toolUser->facingDirection())) : "/rendering/sprites/error.png"; Color color = Color::rgbf(0.8f + (float)sin(m_currentTime * Constants::pi * 2.0) * 0.2f, 0.0f, 0.0f); auto drawable = Drawable::makeImage(image, 1.0f / TilePixels, true, entity->position(), color); drawable.fullbright = true; diff --git a/source/test/small_vector_test.cpp b/source/test/small_vector_test.cpp index 387c6a9..c739236 100644 --- a/source/test/small_vector_test.cpp +++ b/source/test/small_vector_test.cpp @@ -1,4 +1,5 @@ #include "StarSmallVector.hpp" +#include "StarFormat.hpp" #include "gtest/gtest.h" |