diff options
| -rw-r--r-- | data/languages/dutch.txt | 149 | ||||
| -rw-r--r-- | src/engine/shared/console.cpp | 3 | ||||
| -rw-r--r-- | src/game/editor/ed_editor.cpp | 236 | ||||
| -rw-r--r-- | src/game/editor/ed_editor.h | 1 | ||||
| -rw-r--r-- | src/game/server/gamecontroller.cpp | 2 | ||||
| -rw-r--r-- | src/game/server/player.cpp | 4 |
6 files changed, 283 insertions, 112 deletions
diff --git a/data/languages/dutch.txt b/data/languages/dutch.txt index 4f0f7185..f5e9a5f6 100644 --- a/data/languages/dutch.txt +++ b/data/languages/dutch.txt @@ -1,4 +1,6 @@ ##### translated strings ##### +%ds left +== %ds over %d of %d servers, %d players == %d van %d Servers, %d spelers @@ -22,19 +24,19 @@ Are you sure that you want to quit? == Weet je zeker dat je wil stoppen? As this is the first time you launch the game, please enter your nick name below. It's recommended that you check the settings to adjust them to your liking before joining a server. -== Omdat dit de eerste keer is dat je het spel opstart, moet je een nicknaam kiezen. Doe dat hieronder. Het is aanbevolen dat je de instelleingen checkt en misschien aanpast naar jou keuze voordat je een server binnen gaat. +== Omdat dit de eerste keer is dat je het spel opstart, moet je een nicknaam kiezen. Doe dat hieronder. Het is aanbevolen om de instellingen te controleren, voordat je een spel start. Blue team == Blauw Blue team wins! -== Blauw heeft gewonnen +== Blauw wint! Body == Lichaam Call vote -== Vraag voor stemmen. +== Stem Chat == Chat @@ -43,11 +45,14 @@ Close == Sluiten Compatible version -== Versie die werkt +== Werkende versie Connect == Verbinden +Connection Problems... +== Verbindingsproblemen... + Connecting to == Verbinden met @@ -55,13 +60,13 @@ Console == Console Controls -== Controle +== Besturing Current -== Actueel +== Huidig Current version: %s -== Versie die u gebruikt: %s +== Huidige versie: %s Custom colors == Eigen kleuren @@ -76,16 +81,16 @@ Disconnected == Verbinding verbroken Display Modes -== Weergeef modes +== Laat modes zien Downloading map == Kaart downloaden Draw! -== Draw! +== Gelijkspel! Dynamic Camera -== Dynamische Camera +== Dynamische camera Emoticon == Emotie @@ -93,6 +98,12 @@ Emoticon Enter == Starten +error loading demo +== Fout bij laden demo + +Error +== Fout + FSAA samples == FSAA voorbeelden @@ -109,10 +120,10 @@ Filter == Filter Fire -== Vuur +== Schiet Force vote -== Forceer stemmen +== Forceer stem Fullscreen == Volledig Scherm @@ -136,7 +147,7 @@ General == Algemeen Graphics -== Grafiek +== Beeld Grenade == Granaat @@ -145,19 +156,19 @@ Hammer == Hamer Has people playing -== Mensen zijn aan het spelen +== Er spelen mensen High Detail -== Hoge Details +== Veel details Hook -== Hook +== Haak Host address == Server adres Hue -== Hue +== Tint Info == Info @@ -187,7 +198,7 @@ Language == Taal Lht. -== Lht. +== Licht Loading == Laden @@ -202,10 +213,10 @@ Maximum ping: == Maximale Ping: Miscellaneous -== Anders +== Diverse Mouse sens. -== Mouse sens. +== Muis gevoeligheid Move left == Naar links @@ -217,7 +228,7 @@ Movement == Bewegen Mute when not active -== Mute, waneer niet actief +== Demp, waneer niet actief Name == Naam @@ -226,13 +237,13 @@ News == Nieuws Next weapon -== Volgende wapen +== Volgend wapen Nickname == Nicknaam No -== Tes +== Nee No password == Geen wachtwoord @@ -244,13 +255,16 @@ No servers match your filter criteria == Geen servers gevonden op zoekopdracht Ok -== OK +== Oké Password == Wachtwoord Password Incorrect -== Wachtwoord Vekeerd +== Wachtwoord verkeerd + +Password incorrect +== Wachtwoord verkeerd Ping == Ping @@ -267,14 +281,17 @@ Player Players == Spelers +Please balance teams! +== Balanceer teams + Prev. weapon -== Vorig Wapen +== Vorig wapen Quality Textures -== Kwalteit Textures +== Structuurkwaliteit Quick search: -== Snel Zoken: +== Snel zoeken: Quit == Stoppen @@ -283,34 +300,34 @@ Red team == Rood Red team wins! -== Rood heeft gewonnen! +== Rood wint! Refresh == Vernieuwen Refreshing master servers -== Vernieuwd hoofdserver - +== Hoofdserver vernieuwen + Remote console == Remote console Reset filter -== Standaardfilter +== Herstel filter Reset to defaults == Standaardinstelling Rifle -== Rifle +== Geweer Round == Ronde Sample rate -== Makkelijke rate +== Voorbeeld rate Sat. -== Sat. +== Verz. Score == Score @@ -325,7 +342,7 @@ Scoreboard == Scorebord Screenshot -== Schermfoto +== Screenshot Server details == Serverdetails @@ -340,16 +357,19 @@ Settings == Instellingen Shotgun -== Schotgun +== Jachtgeweer + +Show chat +== Laat chat zien Show name plates == Laat namen zien Show only supported -== Laat alleen servers zien die werken +== Laat alleen werkende servers zien Skins -== Thema's +== Skins Sound == Geluid @@ -358,16 +378,19 @@ Sound volume == Volume Spectate -== Sta in de wacht +== Toeschouwer Spectators -== Mensen die in de wacht staan +== Toeschouwers Standard gametype -== Standaard-Speltype +== Standaard speltype Standard map -== Standaardkaart +== Standaard kaart + +Sudden Death +== Sudden Death Switch weapon on pickup == Verander wapen bij opakken @@ -382,10 +405,10 @@ Teeworlds %s is out! Download it at www.teeworlds.com! == Teeworld %s is uit! Download het op www.teeworlds.com! Texture Compression -== Text Compression +== Tekst verkleinen The server is running a non-standard tuning on a pure game type. -== The server draait niet een standaard gebruik op een puur game type. +== The server draait geen standaard spel type. Time limit == Tijdlimiet @@ -417,6 +440,9 @@ Vote yes Voting == Stemmen +Warmup +== Opwarmen + Weapon == Wapen @@ -427,38 +453,11 @@ Yes == Ja You must restart the game for all settings to take effect. -== U moet het spel herstarten om het effect van de instellingen toe te passen. - -##### needs translation #### - -Show chat -== Show chat +== U moet het spel herstarten voordat de veranderingen effect hebben. Your skin -== Your skin - -Password incorrect -== Password incorrect - -Please balance teams! -== Please balance teams! - -Connection Problems... -== Connection Problems... - -Warmup -== Warmup - -Sudden Death -== Sudden Death - -%ds left -== %ds left - -error loading demo -== error loading demo +== Jouw skin -Error -== Error +##### needs translation #### ##### old translations #### diff --git a/src/engine/shared/console.cpp b/src/engine/shared/console.cpp index c545b7db..eacf9b78 100644 --- a/src/engine/shared/console.cpp +++ b/src/engine/shared/console.cpp @@ -273,7 +273,8 @@ CConsole::CCommand *CConsole::FindCommand(const char *pName) void CConsole::ExecuteLine(const char *pStr) { - CConsole::ExecuteLineStroked(1, pStr); + CConsole::ExecuteLineStroked(1, pStr); // press it + CConsole::ExecuteLineStroked(0, pStr); // then release it } diff --git a/src/game/editor/ed_editor.cpp b/src/game/editor/ed_editor.cpp index 387ce104..07761441 100644 --- a/src/game/editor/ed_editor.cpp +++ b/src/game/editor/ed_editor.cpp @@ -554,8 +554,23 @@ CQuad *CEditor::GetSelectedQuad() return 0; } -static void CallbackOpenMap(const char *pFileName, void *pUser) { if(((CEditor*)pUser)->Load(pFileName)) str_copy(((CEditor*)pUser)->m_aFileName, pFileName, 512); } -static void CallbackAppendMap(const char *pFileName, void *pUser) { if(((CEditor*)pUser)->Append(pFileName)) ((CEditor*)pUser)->m_aFileName[0] = 0; } +static void CallbackOpenMap(const char *pFileName, void *pUser) +{ + CEditor *pEditor = (CEditor*)pUser; + if(pEditor->Load(pFileName)) + { + str_copy(pEditor->m_aFileName, pFileName, 512); + pEditor->SortImages(); + } +} +static void CallbackAppendMap(const char *pFileName, void *pUser) +{ + CEditor *pEditor = (CEditor*)pUser; + if(pEditor->Append(pFileName)) + pEditor->m_aFileName[0] = 0; + else + pEditor->SortImages(); +} static void CallbackSaveMap(const char *pFileName, void *pUser){ if(((CEditor*)pUser)->Save(pFileName)) str_copy(((CEditor*)pUser)->m_aFileName, pFileName, 512); } void CEditor::DoToolbar(CUIRect ToolBar) @@ -1029,13 +1044,13 @@ void CEditor::DoQuadPoint(CQuad *q, int QuadIndex, int v) s_Operation = OP_CONTEXT_MENU; m_SelectedQuad = QuadIndex; UI()->SetActiveItem(pId); - if(!(m_SelectedPoints&(1<<v))) - { - if(Input()->KeyPressed(KEY_LSHIFT) || Input()->KeyPressed(KEY_RSHIFT)) - m_SelectedPoints |= 1<<v; - else - m_SelectedPoints = 1<<v; - s_Moved = true; + if(!(m_SelectedPoints&(1<<v))) + { + if(Input()->KeyPressed(KEY_LSHIFT) || Input()->KeyPressed(KEY_RSHIFT)) + m_SelectedPoints |= 1<<v; + else + m_SelectedPoints = 1<<v; + s_Moved = true; } } } @@ -1621,32 +1636,88 @@ void CEditor::RenderLayers(CUIRect ToolBox, CUIRect ToolBar, CUIRect View) if(ValidGroup && m_SelectedLayer >= 0 && m_SelectedLayer < m_Map.m_lGroups[m_SelectedGroup]->m_lLayers.size()) ValidLayer = 1; + int Num = (int)(View.h/16.0f); + static int s_ScrollBar = 0; + static float s_ScrollValue = 0; + + int LayerNum = 0; + for(int g = 0; g < m_Map.m_lGroups.size(); g++) + LayerNum += m_Map.m_lGroups[g]->m_lLayers.size() + 1; + + int ScrollNum = LayerNum-Num+10; + + if(LayerNum > Num) // Do we even need a scrollbar? + { + CUIRect Scroll; + LayersBox.VSplitRight(15.0f, &LayersBox, &Scroll); + LayersBox.VSplitRight(3.0f, &LayersBox, 0); // extra spacing + Scroll.HMargin(5.0f, &Scroll); + s_ScrollValue = UiDoScrollbarV(&s_ScrollBar, &Scroll, s_ScrollValue); + + if(ScrollNum > 0) + { + if(Input()->KeyPresses(KEY_MOUSE_WHEEL_UP)) + s_ScrollValue -= 3.0f/ScrollNum; + if(Input()->KeyPresses(KEY_MOUSE_WHEEL_DOWN)) + s_ScrollValue += 3.0f/ScrollNum; + + if(s_ScrollValue < 0) s_ScrollValue = 0; + if(s_ScrollValue > 1) s_ScrollValue = 1; + } + else + ScrollNum = 0; + } + + int LayerStartAt = (int)(ScrollNum*s_ScrollValue); + if(LayerStartAt < 0) + LayerStartAt = 0; + + int LayerStopAt = LayerStartAt+Num; + int LayerCur = 0; + // render layers { for(int g = 0; g < m_Map.m_lGroups.size(); g++) { + if(LayerCur > LayerStopAt) + break; + else if(LayerCur + m_Map.m_lGroups[g]->m_lLayers.size() + 1 < LayerStartAt) + { + LayerCur += m_Map.m_lGroups[g]->m_lLayers.size() + 1; + continue; + } + CUIRect VisibleToggle; - LayersBox.HSplitTop(12.0f, &Slot, &LayersBox); - Slot.VSplitLeft(12, &VisibleToggle, &Slot); - if(DoButton_Ex(&m_Map.m_lGroups[g]->m_Visible, m_Map.m_lGroups[g]->m_Visible?"V":"H", 0, &VisibleToggle, 0, "Toggle group visibility", CUI::CORNER_L)) - m_Map.m_lGroups[g]->m_Visible = !m_Map.m_lGroups[g]->m_Visible; - - str_format(aBuf, sizeof(aBuf),"#%d %s", g, m_Map.m_lGroups[g]->m_pName); - if(int Result = DoButton_Ex(&m_Map.m_lGroups[g], aBuf, g==m_SelectedGroup, &Slot, - BUTTON_CONTEXT, "Select group. Right click for properties.", CUI::CORNER_R)) + if(LayerCur >= LayerStartAt) { - m_SelectedGroup = g; - m_SelectedLayer = 0; + LayersBox.HSplitTop(12.0f, &Slot, &LayersBox); + Slot.VSplitLeft(12, &VisibleToggle, &Slot); + if(DoButton_Ex(&m_Map.m_lGroups[g]->m_Visible, m_Map.m_lGroups[g]->m_Visible?"V":"H", 0, &VisibleToggle, 0, "Toggle group visibility", CUI::CORNER_L)) + m_Map.m_lGroups[g]->m_Visible = !m_Map.m_lGroups[g]->m_Visible; - static int s_GroupPopupId = 0; - if(Result == 2) - UiInvokePopupMenu(&s_GroupPopupId, 0, UI()->MouseX(), UI()->MouseY(), 120, 200, PopupGroup); - } + str_format(aBuf, sizeof(aBuf),"#%d %s", g, m_Map.m_lGroups[g]->m_pName); + if(int Result = DoButton_Ex(&m_Map.m_lGroups[g], aBuf, g==m_SelectedGroup, &Slot, + BUTTON_CONTEXT, "Select group. Right click for properties.", CUI::CORNER_R)) + { + m_SelectedGroup = g; + m_SelectedLayer = 0; - LayersBox.HSplitTop(2.0f, &Slot, &LayersBox); + static int s_GroupPopupId = 0; + if(Result == 2) + UiInvokePopupMenu(&s_GroupPopupId, 0, UI()->MouseX(), UI()->MouseY(), 120, 200, PopupGroup); + } + LayersBox.HSplitTop(2.0f, &Slot, &LayersBox); + } + LayerCur++; for(int i = 0; i < m_Map.m_lGroups[g]->m_lLayers.size(); i++) { + if(LayerCur < LayerStartAt || LayerCur > LayerStopAt) + { + LayerCur++; + continue; + } + //visible LayersBox.HSplitTop(12.0f, &Slot, &LayersBox); Slot.VSplitLeft(12.0f, 0, &Button); @@ -1666,14 +1737,14 @@ void CEditor::RenderLayers(CUIRect ToolBox, CUIRect ToolBar, CUIRect View) UiInvokePopupMenu(&s_LayerPopupId, 0, UI()->MouseX(), UI()->MouseY(), 120, 150, PopupLayer); } - + LayerCur++; LayersBox.HSplitTop(2.0f, &Slot, &LayersBox); } LayersBox.HSplitTop(5.0f, &Slot, &LayersBox); } } - + if(LayerCur <= LayerStopAt) { LayersBox.HSplitTop(12.0f, &Slot, &LayersBox); @@ -1685,7 +1756,7 @@ void CEditor::RenderLayers(CUIRect ToolBox, CUIRect ToolBar, CUIRect View) } } - LayersBox.HSplitTop(5.0f, &Slot, &LayersBox); + //LayersBox.HSplitTop(5.0f, &Slot, &LayersBox); } @@ -1733,6 +1804,7 @@ void CEditor::ReplaceImage(const char *pFileName, void *pUser) *pImg = ImgInfo; ExtractName(pFileName, pImg->m_aName); pImg->m_TexId = pEditor->Graphics()->LoadTextureRaw(ImgInfo.m_Width, ImgInfo.m_Height, ImgInfo.m_Format, ImgInfo.m_pData, CImageInfo::FORMAT_AUTO, 0); + pEditor->SortImages(); } void CEditor::AddImage(const char *pFileName, void *pUser) @@ -1755,6 +1827,7 @@ void CEditor::AddImage(const char *pFileName, void *pUser) } pEditor->m_Map.m_lImages.add(pImg); + pEditor->SortImages(); } @@ -1817,17 +1890,105 @@ int CEditor::PopupImage(CEditor *pEditor, CUIRect View) return 0; } +static int CompareImageName(const void *pObject1, const void *pObject2) +{ + CEditorImage *pImage1 = *(CEditorImage**)pObject1; + CEditorImage *pImage2 = *(CEditorImage**)pObject2; + + return str_comp(pImage1->m_aName, pImage2->m_aName); +} + +static int *gs_pSortedIndex = 0; +static void ModifySortedIndex(int *pIndex) +{ + if(*pIndex > -1) + *pIndex = gs_pSortedIndex[*pIndex]; +} + +void CEditor::SortImages() +{ + bool Sorted = true; + for(int i = 1; i < m_Map.m_lImages.size(); i++) + if( str_comp(m_Map.m_lImages[i]->m_aName, m_Map.m_lImages[i-1]->m_aName) < 0 ) + { + Sorted = false; + break; + } + + if(!Sorted) + { + array<CEditorImage*> lTemp = array<CEditorImage*>(m_Map.m_lImages); + gs_pSortedIndex = new int[lTemp.size()]; + + qsort(m_Map.m_lImages.base_ptr(), m_Map.m_lImages.size(), sizeof(CEditorImage*), CompareImageName); + + for(int OldIndex = 0; OldIndex < lTemp.size(); OldIndex++) + for(int NewIndex = 0; NewIndex < m_Map.m_lImages.size(); NewIndex++) + if(lTemp[OldIndex] == m_Map.m_lImages[NewIndex]) + gs_pSortedIndex[OldIndex] = NewIndex; + + m_Map.ModifyImageIndex(ModifySortedIndex); + + delete [] gs_pSortedIndex; + gs_pSortedIndex = 0; + } +} + void CEditor::RenderImages(CUIRect ToolBox, CUIRect ToolBar, CUIRect View) { + int Num = (int)(View.h/15.0f); + static int s_ScrollBar = 0; + static float s_ScrollValue = 0; + + int ImageNum = m_Map.m_lImages.size(); + int ScrollNum = ImageNum-Num+10; + + if(ImageNum > Num) // Do we even need a scrollbar? + { + CUIRect Scroll; + ToolBox.VSplitRight(15.0f, &ToolBox, &Scroll); + ToolBox.VSplitRight(3.0f, &ToolBox, 0); // extra spacing + Scroll.HMargin(5.0f, &Scroll); + s_ScrollValue = UiDoScrollbarV(&s_ScrollBar, &Scroll, s_ScrollValue); + + if(ScrollNum > 0) + { + if(Input()->KeyPresses(KEY_MOUSE_WHEEL_UP)) + s_ScrollValue -= 3.0f/ScrollNum; + if(Input()->KeyPresses(KEY_MOUSE_WHEEL_DOWN)) + s_ScrollValue += 3.0f/ScrollNum; + + if(s_ScrollValue < 0) s_ScrollValue = 0; + if(s_ScrollValue > 1) s_ScrollValue = 1; + } + else + ScrollNum = 0; + } + + int ImageStartAt = (int)(ScrollNum*s_ScrollValue); + if(ImageStartAt < 0) + ImageStartAt = 0; + + int ImageStopAt = ImageStartAt+Num; + int ImageCur = 0; + for(int e = 0; e < 2; e++) // two passes, first embedded, then external { CUIRect Slot; - ToolBox.HSplitTop(15.0f, &Slot, &ToolBox); - if(e == 0) - UI()->DoLabel(&Slot, "Embedded", 12.0f, 0); - else - UI()->DoLabel(&Slot, "External", 12.0f, 0); + + if(ImageCur > ImageStopAt) + break; + else if(ImageCur >= ImageStartAt) + { + + ToolBox.HSplitTop(15.0f, &Slot, &ToolBox); + if(e == 0) + UI()->DoLabel(&Slot, "Embedded", 12.0f, 0); + else + UI()->DoLabel(&Slot, "External", 12.0f, 0); + } + ImageCur++; for(int i = 0; i < m_Map.m_lImages.size(); i++) { @@ -1837,6 +1998,15 @@ void CEditor::RenderImages(CUIRect ToolBox, CUIRect ToolBar, CUIRect View) continue; } + if(ImageCur > ImageStopAt) + break; + else if(ImageCur < ImageStartAt) + { + ImageCur++; + continue; + } + ImageCur++; + char aBuf[128]; str_copy(aBuf, m_Map.m_lImages[i]->m_aName, sizeof(aBuf)); ToolBox.HSplitTop(12.0f, &Slot, &ToolBox); @@ -2564,7 +2734,7 @@ void CEditor::Render() View.HSplitTop(16.0f, &MenuBar, &View); View.HSplitTop(53.0f, &ToolBar, &View); - View.VSplitLeft(80.0f, &ToolBox, &View); + View.VSplitLeft(100.0f, &ToolBox, &View); View.HSplitBottom(16.0f, &View, &StatusBar); if(m_ShowEnvelopeEditor) diff --git a/src/game/editor/ed_editor.h b/src/game/editor/ed_editor.h index d027c162..a7d742a8 100644 --- a/src/game/editor/ed_editor.h +++ b/src/game/editor/ed_editor.h @@ -608,6 +608,7 @@ public: void RenderFileDialog(); void AddFileDialogEntry(const char *pName, CUIRect *pView); + void SortImages(); }; // make sure to inline this function diff --git a/src/game/server/gamecontroller.cpp b/src/game/server/gamecontroller.cpp index 519a28ae..66d84519 100644 --- a/src/game/server/gamecontroller.cpp +++ b/src/game/server/gamecontroller.cpp @@ -308,7 +308,7 @@ void IGameController::OnPlayerInfoChange(class CPlayer *pP) int IGameController::OnCharacterDeath(class CCharacter *pVictim, class CPlayer *pKiller, int Weapon) { // do scoreing - if(!pKiller) + if(!pKiller || Weapon == WEAPON_GAME) return 0; if(pKiller == pVictim->GetPlayer()) pVictim->GetPlayer()->m_Score--; // suicide diff --git a/src/game/server/player.cpp b/src/game/server/player.cpp index 8e58b7c1..c295b5d5 100644 --- a/src/game/server/player.cpp +++ b/src/game/server/player.cpp @@ -156,9 +156,9 @@ void CPlayer::SetTeam(int Team) GameServer()->SendChat(-1, CGameContext::CHAT_ALL, Buf); KillCharacter(); + m_Team = Team; - m_Score = 0; - m_ScoreStartTick = Server()->Tick(); + //m_ScoreStartTick = Server()->Tick(); // we got to wait 0.5 secs before respawning m_RespawnTick = Server()->Tick()+Server()->TickSpeed()/2; dbg_msg("game", "team_join player='%d:%s' m_Team=%d", m_ClientID, Server()->ClientName(m_ClientID), m_Team); |