Ergebnis 1 bis 20 von 505

Thema: +++ DynRPG - Das RM2k3-Plugin-SDK +++

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Zitat Zitat von Quetschi Beitrag anzeigen
    Kennt sich jemand mit Code:locks aus und weiß, ob und wie es möglich ist neben der aktuellsten Version noch eine ältere Version vom GCC Compiler zu verwenden?
    Sollte ja von Projekt zu Projekt einstellbar sein, welche verwendet wird.
    Das einfachste wäre wahrscheinlich der alte version vom MinGW neben der aktuelle zu kopieren, und dann bei settings -> compiler -> toolchain executable und dann der Compiler's installation directory zu der pfad der alten MinGW ändern. Wenn du nur vor hast es für DynRPG benutzen, könntest du auch einfach der MinGW folder ganz ersetzen, und du brauchst nichts anderes zu machen.

  2. #2
    Was mir neulich aufgefallen ist: Seit der neusten Version vom DynRPG werden manchmal (sogar recht selten) Sounds im Spiel nicht vollständig abgespielt. Vor allem längere Sounds sind betroffen.

  3. #3
    OK, das ist strange; das Problem ist nur: Ich kann da nix dagegen tun wenn ich nicht mal ein Testprojekt habe wo das *reproduzierbar* passiert. Ich hab nämlich spontan nicht die geringste Idee wie das verursacht werden könnte...

  4. #4
    Zitat Zitat von Kyuu Beitrag anzeigen
    Coming soon...
    I suck...

    Code:
    function onInit()
        font = graphics.newFont("Picture/font1.png")
        windowSkin = graphics.newWindowSkin("Picture/windowskin2.png")
        windowSkin.topLeftColor     = graphics.packColor(0, 90, 180)
        windowSkin.topRightColor    = graphics.packColor(0,  0, 100)
        windowSkin.bottomLeftColor  = graphics.packColor(0,  0, 150)
        windowSkin.bottomRightColor = graphics.packColor(0,  0,  50)
    end
    
    function onEventDrawn(event, isHero)
        local text = event.name
        local x, y = event:getScreenPosition()
        local text_width = font:getStringWidth(text)
        game.screen.drawWindow(windowSkin, x - text_width / 2, y - 40, text_width, font.maxCharHeight, 150)
        game.screen.drawText(font, x - text_width / 2, y - 40, text)
        return true
    end
    
    function onBattlerDrawn(battler, isMonster, id)
        local x, y = battler:getScreenPosition()
        x = x - 20
        y = y - 60
        
        -- draw background
        game.screen.drawRectangle(true, x - 5, y - 5, 80, 40, graphics.packColor(0, 0, 0, 150))
        
        -- draw battler name
        game.screen.drawText(font, x, y, battler.name)
        
        y = y + font.maxCharHeight
        
        -- draw hp text
        game.screen.drawText(font, x, y, "HP: " .. battler.hp .. "/" .. battler.maxHp)
        
        y = y + font.maxCharHeight
        
        -- draw hp bar
        local hp_bar_len = battler.hp / battler.maxHp * 60
        game.screen.drawLine(x + 1, y + 1, x + 1 + 60, y + 1, graphics.packColor(0, 0, 0)) -- shadow
        game.screen.drawLine(x, y , x + hp_bar_len, y, graphics.packColor(0, 128, 0))
        
        return true
    end



    Fun!

  5. #5
    Meine Fresse!

  6. #6

  7. #7
    Ach, nur eine kleine Rückmeldung um zu zeigen, wie cool das wird dass ich vorwärts komme. Nichts Spezifisches.

  8. #8
    Kyuu, ich finds immer noch total cool dass du das in Lua umsetzt. As said, ich dachte es wäre zu langsam. Aber du scheinst das wunderbar hinzukriegen.

  9. #9
    Hey, danke, das spornt mich jetzt noch mehr an, das Ding fertigzubekommen. Ja es läuft erstaunlich schnell (sogar mit Vanilla Lua). Ich bin jetzt übrigens auf LuaJIT umgestiegen, wegen dem zusätzlichen Performanceboost durch JIT-Kompilierung und der FFI-Bibliothek.

    An dieser Stelle Kudos an dich, DynRPG hat wirklich viel Potential. Ich hoffe du machst da irgendwann mal weiter! *dräng*

  10. #10
    Mich würd allerdings interessieren wieso ich auf deinem Screen ein Mädchen bin

  11. #11
    Das muss ein Bug sein.

  12. #12
    Hey Cherry, ein paar Sachen, die mir während der Arbeit an RPGSS auf-/eingefallen sind:

    • Tippfehler bei Character::lockEquipment. Heißt momentan Character::lockEquipemnt.

    • Ich finde, das Makro NOT_MAIN_MODULE sollte MAIN_MODULE heißen und genau umgekehrt funktionieren, d.h. in dem Modul, in welches das Zeug rein muss, sollte man auch das Makro definieren, anstatt in allen Modulen, in die es nicht rein soll, NOT_MAIN_MODULE definieren zu müssen. Momentan ist dieses Makro bei mehreren/vielen Modulen nicht nur ein Mehraufwand, sondern es macht auch Probleme, wenn man DynRPG.h aus Headern heraus einfügen will. Viel eleganter wäre es sowieso, wenn das Zeug, das an dem Makro hängt, in einen eigenen Header wandern würde, etwa PluginMain.h.

    • Ich finde, es sollte dem Plugin-Autor überlassen werden, ob er Case Sensitivity bei Token braucht oder nicht und es gibt durchaus Situationen, in denen man Case Sensitivity brauchen kann. Anstatt jedes Token durch eine ToLower-Funktion zu jagen, ohne die Zustimmung des Plugin-Autors, wäre es eleganter, wenn du, für die, die es benötigen, eine Funktion zur Verfügung stellst, die einen Stringvergleich ohne Case Sensitivity durchführt, etwa:

      Code:
      if (RPG::CaseInsensitiveStringCompare(token, "foo") == 0) {
          // do something
      }
    • Ich sehe die automatische Auswertung von Token wie V<ID> als problematisch, weil du ungültige Indizes erlaubst und in dem Fall eine "0" übergibst. Ich finde, wenn ein Skript nicht existierende Indizes referenziert, ist das ein Fehler, der korrigiert werden sollte und nicht heimlich ignoriert. Am Besten wäre es, wenn du die Auswertung der Token dem Plugin-Autor überlässt und eine Hilfsklasse bereitstellst, die Token auswerten kann, etwa wie mein TokenParser.

    • Kann es sein, dass die Auswertung des Tokens N<ID> (für Actor Name) nicht funktioniert? Ich glaube, als ich's getestet habe, bekam ich damit immer einen leeren String.

    • Ich musste auf die harte Tour lernen, dass der Stack nicht 16-Byte aligned ist, wenn der DynLoader den Plugin-Code aufruft. Bei SSE2 Intrinsics werden Stackvariablen mit 16-Byte Alignment verwendet und dummerweise nimmt GCC an, dass der Stack 16-Byte aligned ist -> Segfault sobald auf eine solche Variable zugegriffen wird. Ich konnte das Problem mit dem Compilerflag -mstackrealign umgehen, nur generiert GCC damit für alle Funktionen einen längeren Prolog und Epilog, nicht nur für die, die das Alignment voraussetzen: nicht optimal. Eine andere Lösung wäre es, Funktionen, die ein bestimmtes Alignment voraussetzen mit dem Attribut force_align_arg_pointer zu versehen, aber ich werde das Gefühl nicht los, dass das bereits im DynLoader geschehen sollte und nicht erst im Plugin-Code. Selbst wenn ein Plugin nicht explizit eine Befehlssatzerweiterung wie SSE2 nutzt, moderner Code sollte 16-Byte aligned sein, nicht zuletzt weil heutige Compiler eigenständig SIMD-Optimierungen am Code vornehmen können, die oft 16-Byte Alignment benötigen.

    • Führt der Maker eine

      Code:
      while (CurrentTime() < time_until_next_frame) {
          // NO-OP
      }
      -Schleife aus? Wenn ja, wäre es möglich daraus

      Code:
      while (CurrentTime() < time_until_next_frame) {
          Thread.Sleep(10 /* milliseconds */ );
      }
      zu machen? Das hat mich schon immer beim Maker gestört, dass da unnötigerweise Rechenzeit belegt wird. Bei Laptops ist das sogar ein großes Problem, weil dadurch der Akku schnell entladen wird.

    • Pack' endlich getLowerLayerTileId, getUpperLayerTileId und getTerrainId in DynRPG rein, die in deiner BUG2.txt gammeln. :)

    Geändert von Kyuu (06.05.2014 um 20:21 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •