Jump to content

Villspor

Alpha Team Vanguard
  • Posts

    118
  • Joined

  • Last visited

Reputation Activity

  1. Like
    Villspor reacted to DontPanic in Kleines problem   
    Eine Territory Unit kann man am Markt kaufen gibt es momentan ab 40000 Quanta, einfach die Taste J drücken und links oben den gewünschten Artikel eingeben, wobei ich raten würde das Spiel auf Englisch zu stellen die Deutsche Übersetzung ist doch manchmal recht verwirrend. Viel Erfolg und der DU Discord ist auch ein guter Platz um Fragen zu stellen, die Community ist sehr hilfsbereit.
  2. Like
    Villspor reacted to huschhusch in Fragen an NQ zur RELEASE   
    Da in wenigen Monaten die RELEASE des Spiels ansteht, habe ich ein paar Fragen an NQ (wir alle wissen die Antworten können etwas länger dauern).
     
    Hallo Jean-Christophe Baillie,
     
    1. Fragenkomplex: BETA-Server nach der RELEASE
    1.1 wird es nach der RELEASE, BETA-Server neben der normalen DU-Version geben?
    Wenn Ja
    1.2.1    Ist der BETA-Server für alle offen, oder sind die aktuellen BETA-Key einsetzbar, oder braucht man neue Keys?
    1.2.2    Muss man für die Zeit im BETA-Server zahlen?
    1.2.3    Ist das Livetime-Subscript auch für den BETA-Server gültig?
    1.2.4   Welcher Stand des Spiels wird auf den BETA-Server übertragen?
    1.2.5    Kann man BETA-Server Erfolge in die normale DU-Version ganz oder teilweise übernehmen?
    1.2.6    Gibt es für den BETA-Server einen eigenen Avatar?
    1.2.7    Wird man mit seinem Account parallel spielen können, erster Rechner normales Spiel, zweiter Rechner BETA-Server?
    Wenn nein
    1.3.1    Wird bei Fehlfunktionen neuer Inhalte Gotteshand angelegt, oder gar ein Spieler gebannt weil er zu große Vorteile daraus gezogen hat?
     
    2. Fragenkomplex: Übergang aktuelle BETA zur RELEASE
    2.1. Avatare
        Im Kickstarter Update #15 wird gesagt, man kann bis zu 3 Avatare mit einem Account spielen.
    2.1.1 Haben die noch 2 freien Avatare (momentan nur ein Avatar pro Account) die selben Skillpunkte wie der erste Avatar?
        Oder haben alle Accounts zur RELEASE keine Skillpunkte?
        Oder kann man die Avatare aus einem anderen Account als 2. und 3. Avatar übernehmen?
    2.1.2 Erhöhen sich die Skillpunkt für alle drei Avatar gleichzeitig?
    2.2. Items und Quantas
        Aussage NQ: Es gibt keinen WIP.
    2.2.1 Bleiben die Inhalte im persönlichen Inventar und in den Behältern (auch Markt) erhalten?
        Bleibt das Quanta-Vermögen beim Avatar?
        Kann ich die Quanta auf meine Avatare frei verteilen?
        Bleiben die Schemata in den Magic-Blueprints der Fabriken erhalten und aktiv?
    2.3. Organisationen und Freundesliste
        Momentan haben manche Spieler mehr als 4 Organisationen und/oder Organisationszugehörigkeiten.
    2.3.1. Müssen diese Spieler die Anzahl reduzieren?
    2.3.2 Wenn Ja; wie?
    2.3.3 Wenn Nein; Welche Bedingungen müssen erfüllt sein?
    2.3.4 Wird man in der Freundschaftsliste die Organisationszugehörigkeit erkennen können.
    2.3.5 Werden ausstehende Freundschaftsanfragen gelöscht oder auf die neuen Avatare übertragen?
     
    3. Fragenkomplex: Belohnungen, Auszeichnungen und Entwickler
        Nach Aussage von NQ werden die physischen Belohnungen bis zur RELEASE ausgeliefert sein, daher Fragen zum Spiel.
    3.1. Benennungen
    3.1.1 Wird die Liste der Backer und Auszeichnungen sowie der Entwickler im Ladebildschirm zur RELEASE fertig sein?
    3.1.2 Wird es Bestenlisten geben?
    3.2 Pets;  wie lange nach der RELEASE?
    3.3 Feuerwerke; wann?
    3.4 spezielle Resurrection-Nodes; wann?
    3.5 spezielles Inventar; wann?
    3.6 individuelle Kleidung; wann?
    3.7 Hovercraft Blueprint speziell für Kickstarter (Versprechen vom Update #24); Ich hoffe auf etwas Außergewöhnliches. Ja?
    3.8 Was wird mit dem Logo auf dem Outfit (Custom Avatar Portrait)?
     
    4. Offene Spieleinhalte aus der Kickstarterbeschreibung
        Bis auf AvA, Alien life und dem Gesicht des Avatar (Stretch Goal 650.000€) sind alle Spieleinhalte schon jetzt verfügbar.
    4.1 Daher die Frage was wird davon, wann kommen? Oder ersetzen die dazugekommenen Spieleinhalte (Ivents) diese?
     
    5. Offene Spieleinhalte Trello
    5.1 Wird es lila Plastic-Voxel geben (ohne Muster)?
     
    Mit freundlichen Grüßen Die Waldfee
     
  3. Like
    Villspor reacted to NQ-Naerais in Willkommen an unseren neuen deutschen Community Manager!   
    Es ist mir eine große Freude, das neueste Mitglied des Community-Teams, NQ-Nudbrokk, vorstellen zu dürfen!
     
    NQ-Nudbrokk ist noch dabei sich einzugewöhnen, deshalb bitte ich euch, vorerst sanft mit ihm umzugehen! Teilt unten eure Begrüßungen!
     
    Willkommen an Bord, NQ-Nudbrook!
     
  4. Like
    Villspor reacted to NQ-Nudbrokk in Abschied von NQ-Nudbrokk   
    Hallo Noveaner!
     
    Meine Reise mit euch neigt sich leider ihrem Ende zu und ich werde ab dem 16.12.2020 nicht mehr für euch zur Verfügung stehen. Bis ein Nachfolger gefunden ist, könnt ihr euch für eure Anfragen gerne an die deutschen Moderatoren wenden.
     
    Die Zeit mit euch und dem Spiel hat mir viel Spaß gemacht. Ich werde in meiner Freizeit noch viel Zeit in DU verbringen, meine professionelle Reise führt mich aber in andere Universen. Ich bin mir sicher, dass das Community-Team von Novaquark einen super Ersatz für euch finden wird!
     
    Ich wünsche euch allen noch eine schöne Weihnachtszeit, einen guten Rutsch und immer genug Auftrieb!
  5. Like
    Villspor reacted to MasterOfAll in Space Map with Warp Cell Calculator   
    I updated the math and fixed calculation issue, I will add rounding next..
     
     
    function Atlas() return { [0] = { [1]={ GM=6930729684, bodyId=1, center={x=17465536.000,y=22665536.000,z=-34464.000}, name='Madis', planetarySystemId=0, radius=44300 }, [2]={ GM=157470826617, bodyId=2, center={x=-8.000,y=-8.000,z=-126303.000}, name='Alioth', planetarySystemId=0, radius=126068 }, [3]={ GM=11776905000, bodyId=3, center={x=29165536.000,y=10865536.000,z=65536.000}, name='Thades', planetarySystemId=0, radius=49000 }, [4]={ GM=14893847582, bodyId=4, center={x=-13234464.000,y=55765536.000,z=465536.000}, name='Talemai', planetarySystemId=0, radius=57450 }, [5]={ GM=16951680000, bodyId=5, center={x=-43534464.000,y=22565536.000,z=-48934464.000}, name='Feli', planetarySystemId=0, radius=60000 }, [6]={ GM=10502547741, bodyId=6, center={x=52765536.000,y=27165538.000,z=52065535.000}, name='Sicari', planetarySystemId=0, radius=51100 }, [7]={ GM=13033380591, bodyId=7, center={x=58665538.000,y=29665535.000,z=58165535.000}, name='Sinnen', planetarySystemId=0, radius=54950 }, [8]={ GM=18477723600, bodyId=8, center={x=80865538.000,y=54665536.000,z=-934463.940}, name='Teoma', planetarySystemId=0, radius=62000 }, [9]={ GM=18606274330, bodyId=9, center={x=-94134462.000,y=12765534.000,z=-3634464.000}, name='Jago', planetarySystemId=0, radius=61590 }, [10]={ GM=78480000, bodyId=10, center={x=17448118.224,y=22966846.286,z=143078.820}, name='Madis Moon 1', planetarySystemId=0, radius=10000 }, [11]={ GM=237402000, bodyId=11, center={x=17194626.000,y=22243633.880,z=-214962.810}, name='Madis Moon 2', planetarySystemId=0, radius=11000 }, [12]={ GM=265046609, bodyId=12, center={x=17520614.000,y=22184730.000,z=-309989.990}, name='Madis Moon 3', planetarySystemId=0, radius=15005 }, [21]={ GM=2118960000, bodyId=21, center={x=457933.000,y=-1509011.000,z=115524.000}, name='Alioth Moon 1', planetarySystemId=0, radius=30000 }, [22]={ GM=2165833514, bodyId=22, center={x=-1692694.000,y=729681.000,z=-411464.000}, name='Alioth Moon 4', planetarySystemId=0, radius=30330 }, [26]={ GM=68234043600, bodyId=26, center={x=-1404835.000,y=562655.000,z=-285074.000}, name='Sanctuary', planetarySystemId=0, radius=83400 }, [30]={ GM=211564034, bodyId=30, center={x=29214402.000,y=10907080.695,z=433858.200}, name='Thades Moon 1', planetarySystemId=0, radius=14002 }, [31]={ GM=264870000, bodyId=31, center={x=29404193.000,y=10432768.000,z=19554.131}, name='Thades Moon 2', planetarySystemId=0, radius=15000 }, [40]={ GM=141264000, bodyId=40, center={x=-13503090.000,y=55594325.000,z=769838.640}, name='Talemai Moon 2', planetarySystemId=0, radius=12000 }, [41]={ GM=106830900, bodyId=41, center={x=-12800515.000,y=55700259.000,z=325207.840}, name='Talemai Moon 3', planetarySystemId=0, radius=11000 }, [42]={ GM=264870000, bodyId=42, center={x=-13058408.000,y=55781856.000,z=740177.760}, name='Talemai Moon 1', planetarySystemId=0, radius=15000 }, [50]={ GM=499917600, bodyId=50, center={x=-43902841.780,y=22261034.700,z=-48862386.000}, name='Feli Moon 1', planetarySystemId=0, radius=14000 }, [70]={ GM=396912600, bodyId=70, center={x=58969616.000,y=29797945.000,z=57969449.000}, name='Sinnen Moon 1', planetarySystemId=0, radius=17000 }, [100]={ GM=13975172474, bodyId=100, center={x=98865536.000,y=-13534464.000,z=-934461.990}, name='Lacobus', planetarySystemId=0, radius=55650 }, [101]={ GM=264870000, bodyId=101, center={x=98905288.170,y=-13950921.100,z=-647589.530}, name='Lacobus Moon 3', planetarySystemId=0, radius=15000 }, [102]={ GM=444981600, bodyId=102, center={x=99180968.000,y=-13783862.000,z=-926156.400}, name='Lacobus Moon 1', planetarySystemId=0, radius=18000 }, [103]={ GM=211503600, bodyId=103, center={x=99250052.000,y=-13629215.000,z=-1059341.400}, name='Lacobus Moon 2', planetarySystemId=0, radius=14000 }, [110]={ GM=9204742375, bodyId=110, center={x=14165536.000,y=-85634465.000,z=-934464.300}, name='Symeon', planetarySystemId=0, radius=49050 }, [120]={ GM=7135606629, bodyId=120, center={x=2865536.700,y=-99034464.000,z=-934462.020}, name='Ion', planetarySystemId=0, radius=44950 }, [121]={ GM=106830900, bodyId=121, center={x=2472916.800,y=-99133747.000,z=-1133582.800}, name='Ion Moon 1', planetarySystemId=0, radius=11000 }, [122]={ GM=176580000, bodyId=122, center={x=2995424.500,y=-99275010.000,z=-1378480.700}, name='Ion Moon 2', planetarySystemId=0, radius=15000 } } } end function PlanetRef() --[[ Provide coordinate transforms and access to kinematic related parameters Author: JayleBreak Usage (unit.start): PlanetaryReference = require('planetref') galaxyReference = PlanetaryReference(referenceTableSource) helios = galaxyReference[0] -- PlanetaryReference.PlanetarySystem instance alioth = helios[2] -- PlanetaryReference.BodyParameters instance Methods: PlanetaryReference:getPlanetarySystem - based on planetary system ID. PlanetaryReference.isMapPosition - 'true' if an instance of 'MapPosition' PlanetaryReference.createBodyParameters - for entry into reference table PlanetaryReference.BodyParameters - a class containing a body's information. PlanetaryReference.MapPosition - a class for map coordinates PlanetaryReference.PlanetarySystem - a container for planetary system info. PlanetarySystem:castIntersections - from a position in a given direction. PlanetarySystem:closestBody - to the specified coordinates. PlanetarySystem:convertToBodyIdAndWorldCoordinates - from map coordinates. PlanetarySystem:getBodyParameters - from reference table. PlanetarySystem:getPlanetarySystemId - for the instance. BodyParameters:convertToWorldCoordinates - from map coordinates BodyParameters:convertToMapPosition - from world coordinates BodyParameters:getAltitude - of world coordinates BodyParameters:getDistance - from center to world coordinates BodyParameters:getGravity - at a given position in world coordinates. Description An instance of the 'PlanetaryReference' "class" can contain transform and kinematic reference information for all planetary systems in DualUniverse. Each planetary system is identified by a numeric identifier. Currently, the only planetary system, Helios, has the identifier: zero. This "class" supports the indexing ('[]') operation which is equivalent to the use of the 'getPlanetarySystem' method. It also supports the 'pairs()' method for iterating over planetary systems. An instance of the 'PlanetarySystem' "class" contains all reference information for a specific system. It supports the indexing ('[]') and 'pairs()' functions which allows iteration over each "body" in the system where the key is the numeric body ID. It also supports the 'tostring()' method. An instance of the 'BodyParameters' "class" contains all reference information for a single celestial "body" (a moon or planet). It supports the 'tostring()' method, and contains the data members: planetarySystemId - numeric planetary system ID bodyId - numeric body ID radius - radius of the body in meters (zero altitude) center - world coordinates of the body's center position GM - the gravitation parameter (g = GM/radius^2) Note that the user is allowed to add custom fields (e.g. body name), but should insure that complex table values have the '__tostring' metamethod implemented. Transform and Kinematics: "World" coordinates is a cartesian coordinate system with an origin at an arbitrary fixed point in a planetary system and with distances measured in meters. The coordinates are expressible either as a simple table of 3 values or an instance of the 'vec3' class. In either case, the planetary system identity is implicit. "Map" coordinates is a geographic coordinate system with an origin at the center of an identified (by a numeric value) celestial body which is a member of an identified (also a numeric value) planetary system. Note that the convention that latitude, longitude, and altitude values will be the position's x, y, and z world coordinates in the special case of body ID 0. The kinematic parameters in the reference data permit calculations of the gravitational attraction of the celestial body on other objects. Reference Data: This is an example of reference data with a single entry assigned to planetary system ID 0, and body ID 2 ('Alioth'): referenceTable = { [0] = { [2] = { planetarySystemId = 0, bodyId = 2, radius = 126068, center = vec3({x=-8, y=-8, z=-126303}), GM = 1.572199+11 } -- as in F=-GMm/r^2 } } ref=PlanetaryReference(referenceTable) Collecting Reference Data: A combination of information from the "Map" screen in the DU user interface, and values reported by the DU Lua API can be the source of the reference table's data (planetarySystemId, bodyId, and surfaceArea is from the user interface): referenceTable = {} referenceTable[planetarySystemId][bodyId] = PlanetaryReference.createBodyParameters(planetarySystemId, bodyId, surfaceArea, core.getConstructWorldPos(), core.getWorldVertical(), core.getAltitude(), core.g()) Adapting Data Sources: Other sources of data can be adapted or converted. An example of adapting a table, defined in the file: 'planets.lua', containing information on a single planetary system and using celestial body name as the key follows (note that a 'name' field is added to the BodyParameters instance transparently after construction, and the '__pairs' meta function is required to support the 'closestBody' and '__tostring' methods): ref=PlanetaryReference( {[0] = setmetatable(require('planets'), { __index = function(bodies, bodyId) for _,v in pairs(bodies) do if v and v.bodyId == bodyId then return v end end return nil end, __pairs = function(bodies) return function(t, k) local nk, nv = next(t, k) if nv then local GM = nv.gravity * nv.radius^2 local bp = BodyParameters(0, nv.id, nv.radius, nv.pos, GM) bp.name = nk return nk, bp end return nk, nv end, bodies, nil end }) }) Converting Data Sources: An instance of 'PlanetaryReference' that has been adapted to a data source can be used to convert that source to simple table. For example, using the adapted instance shown above: load('convertedData=' .. tostring(ref))() newRef=PlanetaryReference(convertedData) Also See: kepler.lua ]]-- --[[ START OF LOCAL IMPLEMENTATION DETAILS ]]-- -- Type checks local function isNumber(n) return type(n) == 'number' end local function isSNumber(n) return type(tonumber(n)) == 'number' end local function isTable(t) return type(t) == 'table' end local function isString(s) return type(s) == 'string' end local function isVector(v) return isTable(v) and isNumber(v.x and v.y and v.z) end local function isMapPosition(m) return isTable(m) and isNumber(m.latitude and m.longitude and m.altitude and m.bodyId and m.systemId) end -- Constants local deg2rad = math.pi/180 local rad2deg = 180/math.pi local epsilon = 1e-10 local num = ' *([+-]?%d+%.?%d*e?[+-]?%d*)' local posPattern = '::pos{' .. num .. ',' .. num .. ',' .. num .. ',' .. num .. ',' .. num .. '}' -- Utilities local utils = require('cpml.utils') local vec3 = require('cpml.vec3') local clamp = utils.clamp local function float_eq(a,b) if a == 0 then return math.abs(b) < 1e-09 end if b == 0 then return math.abs(a) < 1e-09 end return math.abs(a - b) < math.max(math.abs(a),math.abs(b))*epsilon end local function formatNumber(n) local result = string.gsub( string.reverse(string.format('%.4f',n)), '^0*%.?','') return result == '' and '0' or string.reverse(result) end local function formatValue(obj) if isVector(obj) then return string.format('{x=%.3f,y=%.3f,z=%.3f}', obj.x, obj.y, obj.z) end if isTable(obj) and not getmetatable(obj) then local list = {} local nxt = next(obj) if type(nxt) == 'nil' or nxt == 1 then -- assume this is an array list = obj else for k,v in pairs(obj) do local value = formatValue(v) if type(k) == 'number' then table.insert(list, string.format('[%s]=%s', k, value)) else table.insert(list, string.format('%s=%s', k, value)) end end end return string.format('{%s}', table.concat(list, ',')) end if isString(obj) then return string.format("'%s'", obj:gsub("'",[[\']])) end return tostring(obj) end -- CLASSES -- BodyParameters: Attributes of planetary bodies (planets and moons) local BodyParameters = {} BodyParameters.__index = BodyParameters BodyParameters.__tostring = function(obj, indent) local sep = indent or '' local keys = {} for k in pairs(obj) do table.insert(keys, k) end table.sort(keys) local list = {} for _, k in ipairs(keys) do local value = formatValue(obj[k]) if type(k) == 'number' then table.insert(list, string.format('[%s]=%s', k, value)) else table.insert(list, string.format('%s=%s', k, value)) end end if indent then return string.format('%s%s', indent, table.concat(list, ',\n' .. indent)) end return string.format('{%s}', table.concat(list, ',')) end BodyParameters.__eq = function(lhs, rhs) return lhs.planetarySystemId == rhs.planetarySystemId and lhs.bodyId == rhs.bodyId and float_eq(lhs.radius, rhs.radius) and float_eq(lhs.center.x, rhs.center.x) and float_eq(lhs.center.y, rhs.center.y) and float_eq(lhs.center.z, rhs.center.z) and float_eq(lhs.GM, rhs.GM) end local function mkBodyParameters(systemId, bodyId, radius, worldCoordinates, GM) -- 'worldCoordinates' can be either table or vec3 assert(isSNumber(systemId), 'Argument 1 (planetarySystemId) must be a number:' .. type(systemId)) assert(isSNumber(bodyId), 'Argument 2 (bodyId) must be a number:' .. type(bodyId)) assert(isSNumber(radius), 'Argument 3 (radius) must be a number:' .. type(radius)) assert(isTable(worldCoordinates), 'Argument 4 (worldCoordinates) must be a array or vec3.' .. type(worldCoordinates)) assert(isSNumber(GM), 'Argument 5 (GM) must be a number:' .. type(GM)) return setmetatable({planetarySystemId = tonumber(systemId), bodyId = tonumber(bodyId), radius = tonumber(radius), center = vec3(worldCoordinates), GM = tonumber(GM) }, BodyParameters) end -- MapPosition: Geographical coordinates of a point on a planetary body. local MapPosition = {} MapPosition.__index = MapPosition MapPosition.__tostring = function(p) return string.format('::pos{%d,%d,%s,%s,%s}', p.systemId, p.bodyId, formatNumber(p.latitude*rad2deg), formatNumber(p.longitude*rad2deg), formatNumber(p.altitude)) end MapPosition.__eq = function(lhs, rhs) return lhs.bodyId == rhs.bodyId and lhs.systemId == rhs.systemId and float_eq(lhs.latitude, rhs.latitude) and float_eq(lhs.altitude, rhs.altitude) and (float_eq(lhs.longitude, rhs.longitude) or float_eq(lhs.latitude, math.pi/2) or float_eq(lhs.latitude, -math.pi/2)) end -- latitude and longitude are in degrees while altitude is in meters local function mkMapPosition(overload, bodyId, latitude, longitude, altitude) local systemId = overload -- Id or '::pos{...}' string if isString(overload) and not longitude and not altitude and not bodyId and not latitude then systemId, bodyId, latitude, longitude, altitude = string.match(overload, posPattern) assert(systemId, 'Argument 1 (position string) is malformed.') else assert(isSNumber(systemId), 'Argument 1 (systemId) must be a number:' .. type(systemId)) assert(isSNumber(bodyId), 'Argument 2 (bodyId) must be a number:' .. type(bodyId)) assert(isSNumber(latitude), 'Argument 3 (latitude) must be in degrees:' .. type(latitude)) assert(isSNumber(longitude), 'Argument 4 (longitude) must be in degrees:' .. type(longitude)) assert(isSNumber(altitude), 'Argument 5 (altitude) must be in meters:' .. type(altitude)) end systemId = tonumber(systemId) bodyId = tonumber(bodyId) latitude = tonumber(latitude) longitude = tonumber(longitude) altitude = tonumber(altitude) if bodyId == 0 then -- this is a hack to represent points in space return setmetatable({latitude = latitude, longitude = longitude, altitude = altitude, bodyId = bodyId, systemId = systemId}, MapPosition) end return setmetatable({latitude = deg2rad*clamp(latitude, -90, 90), longitude = deg2rad*(longitude % 360), altitude = altitude, bodyId = bodyId, systemId = systemId}, MapPosition) end -- PlanetarySystem - map body IDs to BodyParameters local PlanetarySystem = {} PlanetarySystem.__index = PlanetarySystem PlanetarySystem.__tostring = function (obj, indent) local sep = indent and (indent .. ' ' ) local bdylist = {} local keys = {} for k in pairs(obj) do table.insert(keys, k) end table.sort(keys) for _, bi in ipairs(keys) do bdy = obj[bi] local bdys = BodyParameters.__tostring(bdy, sep) if indent then table.insert(bdylist, string.format('[%s]={\n%s\n%s}', bi, bdys, indent)) else table.insert(bdylist, string.format(' [%s]=%s', bi, bdys)) end end if indent then return string.format('\n%s%s%s', indent, table.concat(bdylist, ',\n' .. indent), indent) end return string.format('{\n%s\n}', table.concat(bdylist, ',\n')) end local function mkPlanetarySystem(referenceTable) local atlas = {} local pid for _, v in pairs(referenceTable) do local id = v.planetarySystemId if type(id) ~= 'number' then error('Invalid planetary system ID: ' .. tostring(id)) elseif pid and id ~= pid then error('Mismatch planetary system IDs: ' .. id .. ' and ' .. pid) end local bid = v.bodyId if type(bid) ~= 'number' then error('Invalid body ID: ' .. tostring(bid)) elseif atlas[bid] then error('Duplicate body ID: ' .. tostring(bid)) end setmetatable(v.center, getmetatable(vec3.unit_x)) atlas[bid] = setmetatable(v, BodyParameters) pid = id end return setmetatable(atlas, PlanetarySystem) end -- PlanetaryReference - map planetary system ID to PlanetarySystem PlanetaryReference = {} local function mkPlanetaryReference(referenceTable) return setmetatable({ galaxyAtlas = referenceTable or {} }, PlanetaryReference) end PlanetaryReference.__index = function(t,i) if type(i) == 'number' then local system = t.galaxyAtlas[i] return mkPlanetarySystem(system) end return rawget(PlanetaryReference, i) end PlanetaryReference.__pairs = function(obj) return function(t, k) local nk, nv = next(t, k) return nk, nv and mkPlanetarySystem(nv) end, obj.galaxyAtlas, nil end PlanetaryReference.__tostring = function (obj) local pslist = {} for _,ps in pairs(obj or {}) do local psi = ps:getPlanetarySystemId() local pss = PlanetarySystem.__tostring(ps, ' ') table.insert(pslist, string.format(' [%s]={%s\n }', psi, pss)) end return string.format('{\n%s\n}\n', table.concat(pslist,',\n')) end --[[ START OF PUBLIC INTERFACE ]]-- -- PlanetaryReference CLASS METHODS: -- -- BodyParameters - create an instance of BodyParameters class -- planetarySystemId [in]: the body's planetary system ID. -- bodyId [in]: the body's ID. -- radius [in]: the radius in meters of the planetary body. -- bodyCenter [in]: the world coordinates of the center (vec3 or table). -- GM [in]: the body's standard gravitational parameter. -- return: an instance of BodyParameters class. -- PlanetaryReference.BodyParameters = mkBodyParameters -- -- MapPosition - create an instance of the MapPosition class -- overload [in]: either a planetary system ID or a position string ('::pos...') -- bodyId [in]: (ignored if overload is a position string) the body's ID. -- latitude [in]: (ignored if overload is a position string) the latitude. -- longitude [in]:(ignored if overload is a position string) the longitude. -- altitude [in]: (ignored if overload is a position string) the altitude. -- return: the class instance -- PlanetaryReference.MapPosition = mkMapPosition -- -- PlanetarySystem - create an instance of PlanetarySystem class -- referenceData [in]: a table (indexed by bodyId) of body reference info. -- return: the class instance -- PlanetaryReference.PlanetarySystem = mkPlanetarySystem -- -- createBodyParameters - create an instance of BodyParameters class -- planetarySystemId [in]: the body's planetary system ID. -- bodyId [in]: the body's ID. -- surfaceArea [in]: the body's surface area in square meters. -- aPosition [in]: world coordinates of a position near the body. -- verticalAtPosition [in]: a vector pointing towards the body center. -- altitudeAtPosition [in]: the altitude in meters at the position. -- gravityAtPosition [in]: the magnitude of the gravitational acceleration. -- return: an instance of BodyParameters class. -- function PlanetaryReference.createBodyParameters(planetarySystemId, bodyId, surfaceArea, aPosition, verticalAtPosition, altitudeAtPosition, gravityAtPosition) assert(isSNumber(planetarySystemId), 'Argument 1 (planetarySystemId) must be a number:' .. type(planetarySystemId)) assert(isSNumber(bodyId), 'Argument 2 (bodyId) must be a number:' .. type(bodyId)) assert(isSNumber(surfaceArea), 'Argument 3 (surfaceArea) must be a number:' .. type(surfaceArea)) assert(isTable(aPosition), 'Argument 4 (aPosition) must be an array or vec3:' .. type(aPosition)) assert(isTable(verticalAtPosition), 'Argument 5 (verticalAtPosition) must be an array or vec3:' .. type(verticalAtPosition)) assert(isSNumber(altitudeAtPosition), 'Argument 6 (altitude) must be in meters:' .. type(altitudeAtPosition)) assert(isSNumber(gravityAtPosition), 'Argument 7 (gravityAtPosition) must be number:' .. type(gravityAtPosition)) local radius = math.sqrt(surfaceArea/4/math.pi) local distance = radius + altitudeAtPosition local center = vec3(aPosition) + distance*vec3(verticalAtPosition) local GM = gravityAtPosition * distance * distance return mkBodyParameters(planetarySystemId, bodyId, radius, center, GM) end -- -- isMapPosition - check for the presence of the 'MapPosition' fields -- valueToTest [in]: the value to be checked -- return: 'true' if all required fields are present in the input value -- PlanetaryReference.isMapPosition = isMapPosition -- PlanetaryReference INSTANCE METHODS: -- -- getPlanetarySystem - get the planetary system using ID or MapPosition as key -- overload [in]: either the planetary system ID or a MapPosition that has it. -- return: instance of 'PlanetarySystem' class or nil on error -- function PlanetaryReference:getPlanetarySystem(overload) --if galaxyAtlas then local planetarySystemId = overload if isMapPosition(overload) then planetarySystemId = overload.systemId end if type(planetarySystemId) == 'number' then local system = self.galaxyAtlas[i] if system then if getmetatable(nv) ~= PlanetarySystem then system = mkPlanetarySystem(system) end return system end end --end --return nil end -- PlanetarySystem INSTANCE METHODS: -- -- castIntersections - Find the closest body that intersects a "ray cast". -- origin [in]: the origin of the "ray cast" in world coordinates -- direction [in]: the direction of the "ray cast" as a 'vec3' instance. -- sizeCalculator [in]: (default: returns 1.05*radius) Returns size given body. -- bodyIds[in]: (default: all IDs in system) check only the given IDs. -- return: The closest body that blocks the cast or 'nil' if none. -- function PlanetarySystem:castIntersections(origin, direction, sizeCalculator, bodyIds) local sizeCalculator = sizeCalculator or function (body) return 1.05*body.radius end local candidates = {} if bodyIds then for _,i in ipairs(bodyIds) do candidates[i] = self[i] end else bodyIds = {} for k,body in pairs(self) do table.insert(bodyIds, k) candidates[k] = body end end local function compare(b1,b2) local v1 = candidates[b1].center - origin local v2 = candidates[b2].center - origin return v1:len() < v2:len() end table.sort(bodyIds, compare) local dir = direction:normalize() for i, id in ipairs(bodyIds) do local body = candidates[id] local c_oV3 = body.center - origin local radius = sizeCalculator(body) local dot = c_oV3:dot(dir) local desc = dot^2 - (c_oV3:len2() - radius^2) if desc >= 0 then local root = math.sqrt(desc) local farSide = dot + root local nearSide = dot - root if nearSide > 0 then return body, farSide, nearSide elseif farSide > 0 then return body, farSide, nil end end end return nil, nil, nil end -- -- closestBody - find the closest body to a given set of world coordinates -- coordinates [in]: the world coordinates of position in space -- return: an instance of the BodyParameters object closest to 'coordinates' -- function PlanetarySystem:closestBody(coordinates) assert(type(coordinates) == 'table', 'Invalid coordinates.') local minDistance2, body local coord = vec3(coordinates) for _,params in pairs(self) do local distance2 = (params.center - coord):len2() if not body or distance2 < minDistance2 then body = params minDistance2 = distance2 end end return body end -- -- convertToBodyIdAndWorldCoordinates - map to body Id and world coordinates -- overload [in]: an instance of MapPosition or a position string ('::pos...) -- return: a vec3 instance containing the world coordinates or 'nil' on error. -- function PlanetarySystem:convertToBodyIdAndWorldCoordinates(overload) local mapPosition = overload if isString(overload) then mapPosition = mkMapPosition(overload) end if mapPosition.bodyId == 0 then return 0, vec3(mapPosition.latitude, mapPosition.longitude, mapPosition.altitude) end local params = self:getBodyParameters(mapPosition) if params then return mapPosition.bodyId, params:convertToWorldCoordinates(mapPosition) end end -- -- getBodyParameters - get or create an instance of BodyParameters class -- overload [in]: either an instance of MapPosition or a body's ID. -- return: a BodyParameters instance or 'nil' if body ID is not found. -- function PlanetarySystem:getBodyParameters(overload) local bodyId = overload if isMapPosition(overload) then bodyId = overload.bodyId end assert(isSNumber(bodyId), 'Argument 1 (bodyId) must be a number:' .. type(bodyId)) return self[bodyId] end -- -- getPlanetarySystemId - get the planetary system ID for this instance -- return: the planetary system ID or nil if no planets are in the system. -- function PlanetarySystem:getPlanetarySystemId() local k, v = next(self) return v and v.planetarySystemId end -- BodyParameters INSTANCE METHODS: -- -- convertToMapPosition - create an instance of MapPosition from coordinates -- worldCoordinates [in]: the world coordinates of the map position. -- return: an instance of MapPosition class -- function BodyParameters:convertToMapPosition(worldCoordinates) assert(isTable(worldCoordinates), 'Argument 1 (worldCoordinates) must be an array or vec3:' .. type(worldCoordinates)) local worldVec = vec3(worldCoordinates) if self.bodyId == 0 then return setmetatable({latitude = worldVec.x, longitude = worldVec.y, altitude = worldVec.z, bodyId = 0, systemId = self.planetarySystemId}, MapPosition) end local coords = worldVec - self.center local distance = coords:len() local altitude = distance - self.radius local latitude = 0 local longitude = 0 if not float_eq(distance, 0) then local phi = math.atan(coords.y, coords.x) longitude = phi >= 0 and phi or (2*math.pi + phi) latitude = math.pi/2 - math.acos(coords.z/distance) end return setmetatable({latitude = latitude, longitude = longitude, altitude = altitude, bodyId = self.bodyId, systemId = self.planetarySystemId}, MapPosition) end -- -- convertToWorldCoordinates - convert a map position to world coordinates -- overload [in]: an instance of MapPosition or a position string ('::pos...') -- function BodyParameters:convertToWorldCoordinates(overload) local mapPosition = isString(overload) and mkMapPosition(overload) or overload if mapPosition.bodyId == 0 then -- support deep space map position return vec3(mapPosition.latitude, mapPosition.longitude, mapPosition.altitude) end assert(isMapPosition(mapPosition), 'Argument 1 (mapPosition) is not an instance of "MapPosition".') assert(mapPosition.systemId == self.planetarySystemId, 'Argument 1 (mapPosition) has a different planetary system ID.') assert(mapPosition.bodyId == self.bodyId, 'Argument 1 (mapPosition) has a different planetary body ID.') local xproj = math.cos(mapPosition.latitude) return self.center + (self.radius + mapPosition.altitude) * vec3(xproj*math.cos(mapPosition.longitude), xproj*math.sin(mapPosition.longitude), math.sin(mapPosition.latitude)) end -- -- getAltitude - calculate the altitude of a point given in world coordinates. -- worldCoordinates [in]: the world coordinates of the point. -- return: the altitude in meters -- function BodyParameters:getAltitude(worldCoordinates) return (vec3(worldCoordinates) - self.center):len() - self.radius end -- -- getDistance - calculate the distance to a point given in world coordinates. -- worldCoordinates [in]: the world coordinates of the point. -- return: the distance in meters -- function BodyParameters:getDistance(worldCoordinates) return (vec3(worldCoordinates) - self.center):len() end -- -- getGravity - calculate the gravity vector induced by the body. -- worldCoordinates [in]: the world coordinates of the point. -- return: the gravity vector in meter/seconds^2 -- function BodyParameters:getGravity(worldCoordinates) local radial = self.center - vec3(worldCoordinates) -- directed towards body local len2 = radial:len2() return (self.GM/len2) * radial/math.sqrt(len2) end -- end of module return setmetatable(PlanetaryReference, { __call = function(_,...) return mkPlanetaryReference(...) end }) end function Keplers() --[[ Provides methods for computing orbital information for an object Usage: Kepler = require('autoconf.custom.kepler') alioth = Kepler({ GM=157470826617, bodyId=2, center={x=-8.000,y=-8.000,z=-126303.000}, name='Alioth', planetarySystemId=0, radius=126068 }) altitude = 6000 position = '::pos{0,2,0,0,6000}' e, o = alioth:escapeAndOrbitalSpeed(altitude) orbit = alioth:orbitalParameters(position, {0, o+1, 0}) print("Eccentricity " .. orbit.eccentricity) print("Perihelion " .. orbit.periapsis.altitude) print("Max. speed " .. orbit.periapsis.speed) print("Circular orbit speed " .. orbit.periapsis.circularOrbitSpeed) print("Aphelion " .. orbit.apoapsis.altitude) print("Min. speed " .. orbit.apoapsis.speed) print("Orbital period " .. orbit.period) --- output: Eccentricity 0.0018324307017878 Perihelion 6000.0 Max. speed 1092.9462297033 Circular orbit speed 1091.9462297033 Aphelion 6484.8994605062 Min. speed 1088.9480596194 Orbital period 762.02818214049 Methods: Kepler:escapeAndOrbitalSpeed - for a given celestial body and altitude. Kepler:orbitalParameters - for a given massless object and a celestial body. Description The motion of an object in the vicinity of substantially larger mass is in the domain of the "2-body problem". By assuming the object whose motion is of interest is of negligable mass simplifies the calculations of: the speed to escape the body, the speed of a circular orbit, and the parameters defining the orbit of the object (or the lack of orbit as the case may be). Orbital Parameters: periapsis - the closest approach to the planet apoapsis - the furthest point from the planet if in orbit (otherwise nil) eccentricity - 0 for circular orbits <1 for elliptical orbits 1 for parabiolic trajectory >1 for hyperbolic trajectory period - time (in seconds) to complete an orbit Also See: planetref.lua ]]-- local vec3 = require('cpml.vec3') local PlanetRef = PlanetRef() local function isString(s) return type(s) == 'string' end local function isTable(t) return type(t) == 'table' end local function float_eq(a,b) if a == 0 then return math.abs(b) < 1e-09 end if b == 0 then return math.abs(a) < 1e-09 end return math.abs(a - b) < math.max(math.abs(a),math.abs(b))*epsilon end Kepler = {} Kepler.__index = Kepler -- -- escapeAndOrbitalSpeed - speed required to escape and for a circular orbit -- altitude [in]: the height of the orbit in meters above "sea-level" -- return: the speed in m/s needed to escape the celestial body and to orbit it. -- function Kepler:escapeAndOrbitalSpeed(altitude) assert(self.body) -- P = -GMm/r and KE = mv^2/2 (no lorentz factor used) -- mv^2/2 = GMm/r -- v^2 = 2GM/r -- v = sqrt(2GM/r1) local distance = altitude + self.body.radius if not float_eq(distance, 0) then local orbit = math.sqrt(self.body.GM/distance) return math.sqrt(2)*orbit, orbit end return nil, nil end -- -- orbitalParameters: determine the orbital elements for a two-body system. -- overload [in]: the world coordinates or map coordinates of a massless object. -- velocity [in]: The velocity of the massless point object in m/s. -- return: the 6 orbital elements for the massless object. -- function Kepler:orbitalParameters(overload, velocity) assert(self.body) assert(isTable(overload) or isString(overload)) assert(isTable(velocity)) local pos = (isString(overload) or PlanetRef.isMapPosition(overload)) and self.body:convertToWorldCoordinates(overload) or vec3(overload) local v = vec3(velocity) local r = pos - self.body.center local v2 = v:len2() local d = r:len() local mu = self.body.GM local e = ((v2 - mu/d)*r - r:dot(v)*v)/mu local a = mu/(2*mu/d - v2) local ecc = e:len() local dir = e:normalize() local pd = a*(1-ecc) local ad = a*(1+ecc) local per = pd*dir + self.body.center local apo = ecc <= 1 and -ad*dir + self.body.center or nil local trm = math.sqrt(a*mu*(1-ecc*ecc)) local Period = apo and 2*math.pi*math.sqrt(a^3/mu) -- These are great and all, but, I need more. local trueAnomaly = math.acos((e:dot(r))/(ecc*d)) if r:dot(v) < 0 then trueAnomaly = -(trueAnomaly - 2*math.pi) end -- Apparently... cos(EccentricAnomaly) = (cos(trueAnomaly) + eccentricity)/(1 + eccentricity * cos(trueAnomaly)) local EccentricAnomaly = math.acos((math.cos(trueAnomaly) + ecc)/(1 + ecc * math.cos(trueAnomaly))) -- Then.... apparently if this is below 0, we should add 2pi to it -- I think also if it's below 0, we're past the apoapsis? local timeTau = EccentricAnomaly if timeTau < 0 then timeTau = timeTau + 2*math.pi end -- So... time since periapsis... -- Is apparently easy if you get mean anomly. t = M/n where n is mean motion, = 2*pi/Period local MeanAnomaly = timeTau - ecc * math.sin(timeTau) local TimeSincePeriapsis = MeanAnomaly/(2*math.pi/Period) --system.print(MeanAnomaly .. " - " .. TimeSincePeriapsis .. " - " .. Period .. " - " .. EccentricAnomaly .. " - " .. timeTau .. " - " .. trueAnomaly) -- Mean anom is 0 at periapsis, positive before it... and positive after it. -- I guess this is why I needed to use timeTau and not EccentricAnomaly here local TimeToPeriapsis = Period - TimeSincePeriapsis local TimeToApoapsis = TimeToPeriapsis + Period/2 if trueAnomaly - math.pi > 0 then -- TBH I think something's wrong in my formulas because I needed this. TimeToPeriapsis = TimeSincePeriapsis TimeToApoapsis = TimeToPeriapsis + Period/2 end if TimeToApoapsis > Period then TimeToApoapsis = TimeToApoapsis - Period end return { periapsis = { position = per, speed = trm/pd, circularOrbitSpeed = math.sqrt(mu/pd), altitude = pd - self.body.radius}, apoapsis = apo and { position = apo, speed = trm/ad, circularOrbitSpeed = math.sqrt(mu/ad), altitude = ad - self.body.radius}, currentVelocity = v, currentPosition = pos, eccentricity = ecc, period = Period, eccentricAnomaly = EccentricAnomaly, meanAnomaly = MeanAnomaly, timeToPeriapsis = TimeToPeriapsis, timeToApoapsis = TimeToApoapsis } end local function new(bodyParameters) local params = PlanetRef.BodyParameters(bodyParameters.planetarySystemId, bodyParameters.bodyId, bodyParameters.radius, bodyParameters.center, bodyParameters.GM) return setmetatable({body = params}, Kepler) end return setmetatable(Kepler, { __call = function(_,...) return new(...) end }) end function Kinematics() --[[ DualUniverse kinematic equations Author: JayleBreak Usage (unit.start): Kinematics = require('autoconf.custom.kinematics') Methods: computeAccelerationTime - "relativistic" version of t = (vf - vi)/a computeDistanceAndTime - Return distance & time needed to reach final speed. computeTravelTime - "relativistic" version of t=(sqrt(2ad+v^2)-v)/a Description DualUniverse increases the effective mass of constructs as their absolute speed increases by using the "lorentz" factor (from relativity) as the scale factor. This results in an upper bound on the absolute speed of constructs (excluding "warp" drive) that is set to 30 000 KPH (8 333 MPS). This module provides utilities for computing some physical quantities taking this scaling into account. ]]-- local Kinematic = {} -- just a namespace local C = 30000000/3600 local C2 = C*C local ITERATIONS = 100 -- iterations over engine "warm-up" period local function lorentz(v) return 1/math.sqrt(1 - v*v/C2) end -- -- computeAccelerationTime - "relativistic" version of t = (vf - vi)/a -- initial [in]: initial (positive) speed in meters per second. -- acceleration [in]: constant acceleration until 'finalSpeed' is reached. -- final [in]: the speed at the end of the time interval. -- return: the time in seconds spent in traversing the distance -- function Kinematic.computeAccelerationTime(initial, acceleration, final) -- The low speed limit of following is: t=(vf-vi)/a (from: vf=vi+at) local k1 = C*math.asin(initial/C) return (C * math.asin(final/C) - k1)/acceleration end -- -- computeDistanceAndTime - Return distance & time needed to reach final speed. -- initial[in]: Initial speed in meters per second. -- final[in]: Final speed in meters per second. -- restMass[in]: Mass of the construct at rest in Kg. -- thrust[in]: Engine's maximum thrust in Newtons. -- t50[in]: (default: 0) Time interval to reach 50% thrust in seconds. -- brakeThrust[in]: (default: 0) Constant thrust term when braking. -- return: Distance (in meters), time (in seconds) required for change. -- function Kinematic.computeDistanceAndTime(initial, final, restMass, thrust, t50, brakeThrust) -- This function assumes that the applied thrust is colinear with the -- velocity. Furthermore, it does not take into account the influence -- of gravity, not just in terms of its impact on velocity, but also -- its impact on the orientation of thrust relative to velocity. -- These factors will introduce (usually) small errors which grow as -- the length of the trip increases. t50 = t50 or 0 brakeThrust = brakeThrust or 0 -- usually zero when accelerating local tau0 = lorentz(initial) local speedUp = initial <= final local a0 = thrust * (speedUp and 1 or -1)/restMass local b0 = -brakeThrust/restMass local totA = a0+b0 if speedUp and totA <= 0 or not speedUp and totA >= 0 then return -1, -1 -- no solution end local distanceToMax, timeToMax = 0, 0 -- If, the T50 time is set, then assume engine is at zero thrust and will -- reach full thrust in 2*T50 seconds. Thrust curve is given by: -- Thrust: F(z)=(a0*(1+sin(z))+2*b0)/2 where z=pi*(t/t50 - 1)/2 -- Acceleration is given by F(z)/m(z) where m(z) = m/sqrt(1-v^2/c^2) -- or v(z)' = (a0*(1+sin(z))+2*b0)*sqrt(1-v(z)^2/c^2)/2 if a0 ~= 0 and t50 > 0 then -- Closed form solution for velocity exists: -- v(t) = -c*tan(w)/sqrt(tan(w)^2+1) => w = -asin(v/c) -- w=(pi*t*(a0/2+b0)-a0*t50*sin(pi*t/2/t50)+*pi*c*k1)/pi/c -- @ t=0, v(0) = vi -- pi*c*k1/pi/c = -asin(vi/c) -- k1 = asin(vi/c) local k1 = math.asin(initial/C) local c1 = math.pi*(a0/2+b0) local c2 = a0*t50 local c3 = C*math.pi local v = function(t) local w = (c1*t - c2*math.sin(math.pi*t/2/t50) + c3*k1)/c3 local tan = math.tan(w) return C*tan/math.sqrt(tan*tan+1) end local speedchk = speedUp and function(s) return s >= final end or function(s) return s <= final end timeToMax = 2*t50 if speedchk(v(timeToMax)) then local lasttime = 0 while math.abs(timeToMax - lasttime) > 0.5 do local t = (timeToMax + lasttime)/2 if speedchk(v(t)) then timeToMax = t else lasttime = t end end end -- There is no closed form solution for distance in this case. -- Numerically integrate for time t=0 to t=2*T50 (or less) local lastv = initial local tinc = timeToMax/ITERATIONS for step = 1, ITERATIONS do local speed = v(step*tinc) distanceToMax = distanceToMax + (speed+lastv)*tinc/2 lastv = speed end if timeToMax < 2*t50 then return distanceToMax, timeToMax end initial = lastv end -- At full thrust, acceleration only depends on the Lorentz factor: -- v(t)' = (F/m(v)) = a*sqrt(1-v(t)^2/c^2) where a = a0+b0 -- -> v = c*sin((at+k1)/c) -- @ t=0, v=vi: k1 = c*asin(vi/c) -- -> t = (c*asin(v/c) - k1)/a -- x(t)' = c*sin((at+k1)/c) -- x = k2 - c^2 cos((at+k1)/c)/a -- @ t=0, x=0: k2 = c^2 * cos(k1/c)/a local k1 = C*math.asin(initial/C) local time = (C * math.asin(final/C) - k1)/totA local k2 = C2 *math.cos(k1/C)/totA local distance = k2 - C2 * math.cos((totA*time + k1)/C)/totA return distance+distanceToMax, time+timeToMax end -- -- computeTravelTime - "relativistic" version of t=(sqrt(2ad+v^2)-v)/a -- initialSpeed [in]: initial (positive) speed in meters per second -- acceleration [in]: constant acceleration until 'distance' is traversed -- distance [in]: the distance traveled in meters -- return: the time in seconds spent in traversing the distance -- function Kinematic.computeTravelTime(initial, acceleration, distance) -- The low speed limit of following is: t=(sqrt(2ad+v^2)-v)/a -- (from: d=vt+at^2/2) if distance == 0 then return 0 end if acceleration > 0 then local k1 = C*math.asin(initial/C) local k2 = C2*math.cos(k1/C)/acceleration return (C*math.acos(acceleration*(k2 - distance)/C2) - k1)/acceleration end assert(initial > 0, 'Acceleration and initial speed are both zero.') return distance/initial end function Kinematic.lorentz(v) return lorentz(v) end return Kinematic end PlanetaryReference = PlanetRef() galaxyReference = PlanetaryReference(Atlas()) Kinematic = Kinematics() Kep = Keplers() function getDistanceDisplayString(distance) local su = distance > 100000 local result = "" if su then -- Convert to SU result = round(distance/1000/200,1) .. " SU" else -- Convert to KM result = round(distance/1000,1) .. " KM" end return result end PlanetaryReference = PlanetRef() galaxyReference = PlanetaryReference(Atlas()) MapScreenButtons = {} MapScreenMouseX = 0 MapScreenMouseY = 0 MapScreenMouseDown = false MapScreenButtonSelected = 0 local worldPos = vec3(core.getConstructWorldPos()) local locX = (worldPos.x/400000) local locY = (worldPos.y/400000)*(-1) local destX = 0 local destY = 0 local sudistance = 0 local loc = vec3(core.getConstructWorldPos()) local ion = galaxyReference[0][120] ---uses Atlas functions local thades = vec3(29165536.000, 10865536.000, 65536.000) local sinnen = vec3(58665536.000, 29665536.000, 58165536.000) local alioth = galaxyReference[0][2] ---uses Atlas functions local madis = vec3(17465536.000, 22665536.000, -34464.000) local jago = vec3(-94134464.000, 12765536.000, -3634464.000) local symeon = vec3(14165536.000, -85634464.000, -934464.000) local lacobus = vec3(98865536.000, -13534464.000, -934464.000) local teoma = vec3(80865536.000, 54665536.000, -934464.000) local feli = vec3(-43534464.000, 22565536.000, -48934464.000) local talemai = vec3(-13234464.000, 55765536.000, 465536.000) local sicari = vec3(52765536.000, 27165536.000, 52065536.000) local distion = math.floor(ion:getDistance(loc)/200000) ---uses getDistance functions---- local distthades = string.format("%.2f", math.sqrt((loc.x-thades.x)^2+(loc.y-thades.y)^2+(loc.z-thades.z)^2)/200000) local distalioth = math.floor(alioth:getDistance(loc)/200000) ---uses getDistance functions---- local distmadis = string.format("%.2f", math.sqrt((loc.x-madis.x)^2+(loc.y-madis.y)^2+(loc.z-madis.z)^2)/200000) local distjago = string.format("%.2f", math.sqrt((loc.x-jago.x)^2+(loc.y-jago.y)^2+(loc.z-jago.z)^2)/200000) local distlacobus = string.format("%.2f", math.sqrt((loc.x-lacobus.x)^2+(loc.y-lacobus.y)^2+(loc.z-lacobus.z)^2)/200000) local distteoma = string.format("%.2f", math.sqrt((loc.x-teoma.x)^2+(loc.y-teoma.y)^2+(loc.z-teoma.z)^2)/200000) local distsymeon = string.format("%.2f", math.sqrt((loc.x-symeon.x)^2+(loc.y-symeon.y)^2+(loc.z-symeon.z)^2)/200000) local distfeli = string.format("%.2f", math.sqrt((loc.x-feli.x)^2+(loc.y-feli.y)^2+(loc.z-feli.z)^2)/200000) local distsinnen = string.format("%.2f", math.sqrt((loc.x-sinnen.x)^2+(loc.y-sinnen.y)^2+(loc.z-sinnen.z)^2)/200000) local disttalemai = string.format("%.2f", math.sqrt((loc.x-talemai.x)^2+(loc.y-talemai.y)^2+(loc.z-talemai.z)^2)/200000) local distsicari = string.format("%.2f", math.sqrt((loc.x-sicari.x)^2+(loc.y-sicari.y)^2+(loc.z-sicari.z)^2)/200000) for i = 1,1 do local button = {id = ("b"..1), enabled=true, td="<td>", top=2/100, bottom=13/100, left=1/100, right=28/100} table.insert(MapScreenButtons, button) end for i = 2,2 do local button = {id = ("b"..2), enabled=true, td="<td>", top=15/100, bottom=26/100, left=1/100, right=30/100} table.insert(MapScreenButtons, button) end for i = 3,3 do local button = {id = ("b"..3), enabled=true, td="<td>", top=27/100, bottom=38/100, left=1/100, right=28/100} table.insert(MapScreenButtons, button) end for i = 4,4 do local button = {id = ("b"..4), enabled=true, td="<td>", top=39/100, bottom=50/100, left=1/100, right=28/100} table.insert(MapScreenButtons, button) end for i = 5,5 do local button = {id = ("b"..5), enabled=true, td="<td>", top=51/100, bottom=62/100, left=1/100, right=28/100} table.insert(MapScreenButtons, button) end for i = 6,6 do local button = {id = ("b"..6), enabled=true, td="<td>", top=64/100, bottom=75/100, left=1/100, right=28/100} table.insert(MapScreenButtons, button) end for i = 7,7 do local button = {id = ("b"..7), enabled=true, td="<td>", top=2/100, bottom=13/100, left=75/100, right=100/100} table.insert(MapScreenButtons, button) end for i = 8,8 do local button = {id = ("b"..8), enabled=true, td="<td>", top=15/100, bottom=26/100, left=75/100, right=100/100} table.insert(MapScreenButtons, button) end for i = 9,9 do local button = {id = ("b"..9), enabled=true, td="<td>", top=27/100, bottom=38/100, left=75/100, right=100/100} table.insert(MapScreenButtons, button) end for i = 10,10 do local button = {id = ("b"..10), enabled=true, td="<td>", top=39/100, bottom=50/100, left=75/100, right=100/100} table.insert(MapScreenButtons, button) end for i = 11,11 do local button = {id = ("b"..11), enabled=true, td="<td>", top=51/100, bottom=62/100, left=75/100, right=100/100} table.insert(MapScreenButtons, button) end for i = 12,12 do local button = {id = ("b"..12), enabled=true, td="<td>", top=64/100, bottom=75/100, left=75/100, right=100/100} table.insert(MapScreenButtons, button) end for i = 13,13 do local button = {id = ("b"..13), enabled=true, td="<td>", top=90/100, bottom=100/100, left=1/100, right=18/100} table.insert(MapScreenButtons, button) end function evaluateButtons() local selected = 0 if #MapScreenButtons >= 1 then -- Set button styles for i, button in ipairs(MapScreenButtons) do if button.left < MapScreenMouseX and MapScreenMouseX < button.right and button.top < MapScreenMouseY and MapScreenMouseY < button.bottom then if MapScreenMouseDown and MapScreenButtonSelected == i then end selected = i end if not button.enabled then end end end return selected end function onButtonDown(buttonNo) local button = MapScreenButtons[buttonNo] if not button or not button.enabled then return end end function onButtonUp(buttonNo) local button = MapScreenButtons[buttonNo] if not button or not button.enabled then return end function onClick(buttonNo) local button = MapScreenButtons[buttonNo] if not button or not button.enabled then return end end local selection = 0 if buttonNo == 1 then destX = 0 destY = 0 selection = 1 sudistance = distalioth elseif buttonNo == 2 then destX = 43 destY = -56 sudistance = distmadis selection = 2 elseif buttonNo == 3 then destX = 73 destY = -27 selection = 3 sudistance = distthades elseif buttonNo == 4 then destX = -33 destY = -139 selection = 4 sudistance = disttalemai elseif buttonNo == 5 then destX = -109 destY = -56 selection = 5 sudistance = distfeli elseif buttonNo == 6 then destX = 131 destY = -68 selection = 6 sudistance = distsicari elseif buttonNo == 7 then destX = 35 destY = 214 selection = 7 sudistance = distsymeon elseif buttonNo == 8 then destX = 146 destY = -74 selection = 8 sudistance = distsinnen elseif buttonNo == 9 then destX = -235 destY = -32 selection = 9 sudistance = distjago elseif buttonNo == 10 then destX = 202 destY = -137 selection = 10 sudistance = distteoma elseif buttonNo == 11 then destX = 7 destY = 247 selection = 11 sudistance = distion elseif buttonNo == 12 then destX = 247 destY = 34 selection = 12 sudistance = distlacobus elseif buttonNo == 13 then unit.exit() end end function updateScreen() loc = vec3(core.getConstructWorldPos()) local shipVelocity = vec3(core.getVelocity()):len() * 3.6 local shipAcceleration = vec3(core.getVelocity()):len() * 3.6 local time_to_distance = 0 if selection == 1 then alioth = galaxyReference[0][2] ---uses Atlas functions distalioth = math.floor(alioth:getDistance(loc)/200000) ---uses getDistance functions---- time_to_distance = distalioth * 200 / shipVelocity elseif selection == 2 then madis = vec3(17465536.000, 22665536.000, -34464.000) distmadis = string.format("%.2f", math.sqrt((loc.x-madis.x)^2+(loc.y-madis.y)^2+(loc.z-madis.z)^2)/200000) time_to_distance = distmadis * 200 / shipVelocity elseif selection == 3 then thades = vec3(29165536.000, 10865536.000, 65536.000) distthades = string.format("%.2f", math.sqrt((loc.x-thades.x)^2+(loc.y-thades.y)^2+(loc.z-thades.z)^2)/200000) time_to_distance = distthades * 200 / shipVelocity elseif selection == 4 then talemai = vec3(-13234464.000, 55765536.000, 465536.000) disttalemai = string.format("%.2f", math.sqrt((loc.x-talemai.x)^2+(loc.y-talemai.y)^2+(loc.z-talemai.z)^2)/200000) time_to_distance = disttalemai * 200 / shipVelocity elseif selection == 5 then feli = vec3(-43534464.000, 22565536.000, -48934464.000) distfeli = string.format("%.2f", math.sqrt((loc.x-feli.x)^2+(loc.y-feli.y)^2+(loc.z-feli.z)^2)/200000) time_to_distance = distfeli * 200 / shipVelocity elseif selection == 6 then sicari = vec3(52765536.000, 27165536.000, 52065536.000) distsicari = string.format("%.2f", math.sqrt((loc.x-sicari.x)^2+(loc.y-sicari.y)^2+(loc.z-sicari.z)^2)/200000) time_to_distance = distsicari * 200 / shipVelocity elseif selection == 7 then symeon = vec3(14165536.000, -85634464.000, -934464.000) distsymeon = string.format("%.2f", math.sqrt((loc.x-symeon.x)^2+(loc.y-symeon.y)^2+(loc.z-symeon.z)^2)/200000) time_to_distance = distsymeon * 200 / shipVelocity elseif selection == 8 then sinnen = vec3(58665536.000, 29665536.000, 58165536.000) distsinnen = string.format("%.2f", math.sqrt((loc.x-sinnen.x)^2+(loc.y-sinnen.y)^2+(loc.z-sinnen.z)^2)/200000) time_to_distance = distsinnen * 200 / shipVelocity elseif selection == 9 then jago = vec3(-94134464.000, 12765536.000, -3634464.000) distjago = string.format("%.2f", math.sqrt((loc.x-jago.x)^2+(loc.y-jago.y)^2+(loc.z-jago.z)^2)/200000) time_to_distance = distjago * 200 / shipVelocity elseif selection == 10 then teoma = vec3(80865536.000, 54665536.000, -934464.000) distteoma = string.format("%.2f", math.sqrt((loc.x-teoma.x)^2+(loc.y-teoma.y)^2+(loc.z-teoma.z)^2)/200000) time_to_distance = distteoma * 200 / shipVelocity elseif selection == 11 then ion = galaxyReference[0][120] ---uses Atlas functions distion = math.floor(ion:getDistance(loc)/200000) ---uses getDistance functions---- time_to_distance = distion * 200 / shipVelocity elseif selection == 12 then lacobus = vec3(98865536.000, -13534464.000, -934464.000) distlacobus = string.format("%.2f", math.sqrt((loc.x-lacobus.x)^2+(loc.y-lacobus.y)^2+(loc.z-lacobus.z)^2)/200000) time_to_distance = distlacobus * 200 / shipVelocity else time_to_distance = sudistance * 200 / shipVelocity end warpmath = math.floor(math.floor(core.getConstructMass()/ 1000) * sudistance * 0.00025) html= ([[ <svg width="1024" height="1024" viewBox="0 0 1024 1640"><circle cx="500" cy="500" r="400" stroke="darkgreen" stroke-width="3" transform=""></circle><circle cx="500" cy="500" r="350" stroke="#FFF" stroke-width="3" transform="" stroke-opacity="0.2"></circle><circle cx="500" cy="500" r="300" stroke="#FFF" stroke-width="3" transform=""></circle><circle cx="500" cy="500" r="250" stroke="#FFF" stroke-width="3" transform="" stroke-opacity="0.2"></circle><circle cx="500" cy="500" r="200" stroke="#FFF" stroke-width="3" transform=""></circle><circle cx="500" cy="500" r="150" stroke="#FFF" stroke-width="3" transform="" stroke-opacity="0.2"></circle><circle cx="500" cy="500" r="100" stroke="lightblue" stroke-width="3" transform=""></circle><circle cx="500" cy="500" r="50" stroke="lightblue" stroke-width="3" transform="" stroke-opacity="0.2"></circle><circle cx="500" cy="500" r="20" stroke="Orange" stroke-width="2" transform=""></circle><text x="510" y="510" fill="Yellow">Helios</text><circle cx="-0.00" cy="0" r="10" stroke="black" stroke-width="1" fill="blue" transform="translate(500,500)"></circle><text x="-0.00" y="0" transform="translate(500,480)" fill="white" font-size="20">Alioth</text><circle cx="7.16" cy="247.59" r="10" stroke="black" stroke-width="1" fill="blue" transform="translate(500,500)"></circle><text x="7.16" y="247.59" transform="translate(480,480)" fill="white" font-size="20">Ion</text><circle cx="35.41" cy="214.09" r="10" stroke="black" stroke-width="1" fill="blue" transform="translate(500,500)"></circle><text x="35.41" y="214.09" transform="translate(500,480)" fill="white" font-size="20">Symeon</text><circle cx="-33.09" cy="-139.41" r="10" stroke="black" stroke-width="1" fill="blue" transform="translate(500,500)"></circle><text x="-33.09" y="-139.41" transform="translate(500,480)" fill="white" font-size="20">Talemai</text><circle cx="202.16" cy="-136.66" r="10" stroke="black" stroke-width="1" fill="blue" transform="translate(500,500)"></circle><text x="202.16" y="-136.66" transform="translate(500,480)" fill="white" font-size="20">Teoma</text><circle cx="247.16" cy="33.84" r="10" stroke="black" stroke-width="1" fill="blue" transform="translate(500,500)"></circle><text x="247.16" y="33.84" transform="translate(500,480)" fill="white" font-size="20">Lacobus</text><circle cx="-108.84" cy="-56.41" r="10" stroke="black" stroke-width="1" fill="blue" transform="translate(500,500)"></circle><text x="-108.84" y="-56.41" transform="translate(500,480)" fill="white" font-size="20">Feli</text><circle cx="72.91" cy="-27.16" r="10" stroke="black" stroke-width="1" fill="blue" transform="translate(500,500)"></circle><text x="72.91" y="-27.16" transform="translate(500,485)" fill="white" font-size="20">Thades</text><circle cx="43.66" cy="-56.66" r="10" stroke="black" stroke-width="1" fill="blue" transform="translate(500,500)"></circle><text x="43.66" y="-56.66" transform="translate(500,480)" fill="white" font-size="20">Madis</text><circle cx="-235.34" cy="-31.91" r="10" stroke="black" stroke-width="1" fill="blue" transform="translate(500,500)"></circle><text x="-235.34" y="-31.91" transform="translate(500,480)" fill="white" font-size="20">Jago</text><circle cx="131.91" cy="-67.91" r="10" stroke="black" stroke-width="1" fill="blue" transform="translate(500,500)"></circle><text x="131.91" y="-67.91" transform="translate(475,480)" fill="white" font-size="20">Sicari</text><circle cx="146.66" cy="-74.16" r="10" stroke="black" stroke-width="1" fill="blue" transform="translate(500,500)"></circle><text x="146.66" y="-74.16" transform="translate(515,480)" fill="white" font-size="20">Sinnen</text> <line stroke-linecap="undefined" stroke-linejoin="undefined" id="svg_1" y2="]]..destY..[[" x2="]]..destX..[[" y1="]]..locY..[[" x1="]]..locX..[[" transform="translate(500,500)" stroke-width="5" stroke="#ff0000" fill="none"/> <circle cx="]]..locX..[[" cy="]]..locY..[[" r="3" stroke="black" stroke-width="1" fill="limegreen" transform="translate(500,500)"></circle> <text x="]]..locX..[[" y="]]..locY..[[" transform="translate(500,500)" fill="limegreen" font-size= "4.5vh" font-weight= "bold">//SHIP POSITION</text> </svg> <svg width="1024" height="612" xmlns="http://www.w3.org/2000/svg">> <g> <title>Layer 1</title> <g id="svg_24"> <text stroke="null" transform="matrix(0.7907331239400577,0,0,0.7600725676692406,3.135703637258853,5.731969683147472) " xml:space="preserve" text-anchor="start" font-family="Helvetica, Arial, sans-serif" font-size="20" id="svg_8" y="70" x="55" stroke-width="0" fill="Yellow">Alioth :]]..distalioth..[[ SU</text> <text stroke="null" transform="matrix(0.7907331239400577,0,0,0.7600725676692406,3.135703637258853,5.731969683147472) " xml:space="preserve" text-anchor="start" font-family="Helvetica, Arial, sans-serif" font-size="20" id="svg_14" y="170" x="55" stroke-width="0" fill="Yellow">Madis :]]..distmadis..[[ SU</text> <text stroke="null" transform="matrix(0.7907331239400577,0,0,0.7600725676692406,3.135703637258853,5.731969683147472) " xml:space="preserve" text-anchor="start" font-family="Helvetica, Arial, sans-serif" font-size="20" id="svg_17" y="270" x="55" stroke-width="0" fill="Yellow">Thades :]]..distthades..[[ SU</text> <text stroke="null" transform="matrix(0.7907331239400577,0,0,0.7600725676692406,3.135703637258853,5.731969683147472) " xml:space="preserve" text-anchor="start" font-family="Helvetica, Arial, sans-serif" font-size="20" id="svg_20" y="370" x="55" stroke-width="0" fill="Yellow">Talemai :]]..disttalemai..[[ SU</text> <text stroke="null" transform="matrix(0.7907331239400577,0,0,0.7600725676692406,3.135703637258853,5.731969683147472) " xml:space="preserve" text-anchor="start" font-family="Helvetica, Arial, sans-serif" font-size="20" id="svg_23" y="470" x="55" stroke-width="0" fill="Yellow">Feli :]]..distfeli..[[ SU</text> <text stroke="null" transform="matrix(0.7907331239400577,0,0,0.7600725676692406,3.135703637258853,5.731969683147472) " xml:space="preserve" text-anchor="start" font-family="Helvetica, Arial, sans-serif" font-size="20" id="svg_26" y="570" x="55" stroke-width="0" fill="Yellow">Sicari :]]..distsicari..[[ SU</text> <g id="svg_12"> <rect rx="10" id="svg_1" height="50" width="250" y="30" x="15" stroke-width="10" stroke="#FFF" fill="none"/> <rect rx="10" id="svg_3" height="50" width="250" y="105" x="15" stroke-width="10" stroke="#FFF" fill="none"/> <rect rx="10" id="svg_7" height="50" width="250" y="180" x="15" stroke-width="10" stroke="#FFF" fill="none"/> <rect rx="10" id="svg_9" height="50" width="250" y="255" x="15" stroke-width="10" stroke="#FFF" fill="none"/> <rect rx="10" id="svg_10" height="50" width="250" y="330" x="15" stroke-width="10" stroke="#FFF" fill="none"/> <rect rx="10" id="svg_11" height="50" width="250" y="405" x="15" stroke-width="10" stroke="#FFF" fill="none"/> </g> </g> <g id="svg_40"> <text stroke="null" transform="matrix(0.7907331239400577,0,0,0.7600725676692406,3.135703637258853,5.731969683147472) " xml:space="preserve" text-anchor="start" font-family="Helvetica, Arial, sans-serif" font-size="20" id="svg_25" y="70" x="997.163642" stroke-width="0" fill="Yellow">Symeon :]]..distsymeon..[[ SU</text> <text stroke="null" transform="matrix(0.7907331239400577,0,0,0.7600725676692406,3.135703637258853,5.731969683147472) " xml:space="preserve" text-anchor="start" font-family="Helvetica, Arial, sans-serif" font-size="20" id="svg_27" y="170" x="997.163642" stroke-width="0" fill="Yellow">Sinnen :]]..distsinnen..[[ SU</text> <text stroke="null" transform="matrix(0.7907331239400577,0,0,0.7600725676692406,3.135703637258853,5.731969683147472) " xml:space="preserve" text-anchor="start" font-family="Helvetica, Arial, sans-serif" font-size="20" id="svg_28" y="270" x="997.163642" stroke-width="0" fill="Yellow">Jago :]]..distjago..[[ SU</text> <text stroke="null" transform="matrix(0.7907331239400577,0,0,0.7600725676692406,3.135703637258853,5.731969683147472) " xml:space="preserve" text-anchor="start" font-family="Helvetica, Arial, sans-serif" font-size="20" id="svg_30" y="370" x="997.163642" stroke-width="0" fill="Yellow">Teoma :]]..distteoma..[[ SU</text> <text stroke="null" transform="matrix(0.7907331239400577,0,0,0.7600725676692406,3.135703637258853,5.731969683147472) " xml:space="preserve" text-anchor="start" font-family="Helvetica, Arial, sans-serif" font-size="20" id="svg_31" y="470" x="997.163642" stroke-width="0" fill="Yellow">Ion :]]..distion..[[ SU</text> <text stroke="null" transform="matrix(0.7907331239400577,0,0,0.7600725676692406,3.135703637258853,5.731969683147472) " xml:space="preserve" text-anchor="start" font-family="Helvetica, Arial, sans-serif" font-size="20" id="svg_32" y="570" x="997.163642" stroke-width="0" fill="Yellow">Lacobus :]]..distlacobus..[[ SU</text> <g id="svg_39"> <rect rx="10" id="svg_33" height="50" width="250" y="30" x="760" stroke-width="10" stroke="#FFF" fill="none"/> <rect rx="10" id="svg_34" height="50" width="250" y="105" x="760" stroke-width="10" stroke="#FFF" fill="none"/> <rect rx="10" id="svg_35" height="50" width="250" y="180" x="760" stroke-width="10" stroke="#FFF" fill="none"/> <rect rx="10" id="svg_36" height="50" width="250" y="255" x="760" stroke-width="10" stroke="#FFF" fill="none"/> <rect rx="10" id="svg_37" height="50" width="250" y="330" x="760" stroke-width="10" stroke="#FFF" fill="none"/> <rect rx="10" id="svg_38" height="50" width="250" y="405" x="760" stroke-width="10" stroke="#FFF" fill="none"/> </g> </g> </g> <text stroke="null" transform="matrix(0.7907331239400577,0,0,0.7600725676692406,3.135703637258853,5.731969683147472) " xml:space="preserve" text-anchor="start" font-family="Helvetica, Arial, sans-serif" font-size="30" id="svg_32" y="700" x="20" stroke-width="0" fill="LightBlue">Est. Warp Cost: ]]..warpmath..[[</text> <text stroke="null" transform="matrix(0.7907331239400577,0,0,0.7600725676692406,3.135703637258853,5.731969683147472) " xml:space="preserve" text-anchor="start" font-family="Helvetica, Arial, sans-serif" font-size="30" id="svg_32" y="750" x="20" stroke-width="0" fill="LightBlue">Construct Weight: ]]..math.floor(core.getConstructMass()/ 1000)..[[ tons</text> <text stroke="null" transform="matrix(0.7907331239400577,0,0,0.7600725676692406,3.135703637258853,5.731969683147472) " xml:space="preserve" text-anchor="start" font-family="Helvetica, Arial, sans-serif" font-size="30" id="svg_32" y="700" x="500" stroke-width="0" fill="LightBlue">TTD: ]]..time_to_distance..[[ hrs</text> <text stroke="null" transform="matrix(0.7907331239400577,0,0,0.7600725676692406,3.135703637258853,5.731969683147472) " xml:space="preserve" text-anchor="start" font-family="Helvetica, Arial, sans-serif" font-size="30" id="svg_32" y="750" x="500" stroke-width="0" fill="LightBlue">Vel: ]]..shipVelocity..[[ km/h</text> </svg> ]]) screen.setHTML(html) screen2.setHTML(html) end unit.setTimer("spacemap",.08)  
  6. Like
    Villspor got a reaction from xantrino in [GER] Deutschsprachige Organisation "Ardisson" lädt Dich ein!   
    Bist du auf der Suche nach einer deutschsprachigen Organisation? Dann nimm dir doch die Zeit und lies diesen Post über Ardisson. Wir würden uns freuen wenn wir dich bald bei uns willkommen heißen dürfen.   In Unserer Organisation gibt es für jeden etwas zu tun. Bist du z.B. daran Interessiert deine Mitspieler vor Angriffen anderer Spieler zu verteidigen, dann schließe dich unserem Militär an. Wer lieber Häuser, Gebäude oder sogar Raumschiffe bauen möchte, für den gibt es den Beruf des Architekten und des Ingenieurs. Außerdem gibt es noch die wichtige Aufgabe der Ressourcenbeschaffung, welche, wie der Name schon sagt, dafür sorgt dass die von allen benötigten Rohstoffe immer Verfügbar sind. Oder soll es doch ein Posten im Senat sein? Wie zum Beispiel der des Finanzministers, eines Militärsenators oder einem von vielen weiteren.   Unser ganzes System fundiert auf Roleplay, aber auch Spieler die keine Lust auf Roleplay haben oder einfach kein großen Wert darauf legen sind bei uns willkommen. Es gibt neben den üblichen Verhaltensregeln in einer Gemeinschaft keine Verpflichtungen, nur ein sicheres Zuhause.     Unser Militär ist in zwei Teile aufgeteilt. Den Soldaten, welche für den Personen gegen Personen-Kampf (PVP) spezialisiert sind und der Marine, deren Marineeinheiten primär beim Kampf in Jägern oder an Bord von anderen Militärischen Schiffen vorzufinden sind. Nachdem Ardisson eine freundliche Organisation ist gibt es viele Tätigkeiten für Militäreinheiten, wenn sie gerade nicht in einen Kampf verwickelt sind. Dazu zählen auch Sicherheitsaufgaben, wie das beschützen des Ressourcenbeschaffungs-Teams auf seinen Touren, für Recht und Ordnung unter Spielern zu sorgen oder unbekannte Gebiete zu Erforschen.     Wie bereits oben angedeutet ist der Ingenieur für das Planen und Bauen eines Raumschiffes und dessen Instandhaltung zuständig. Zusätzlich befassen sich unsere Ingenieure auch mit allen Technischen Themen, die für unser gemeinsames Leben anfallen, so zum Beispiel auch die Entwicklung der Verteidigungsanlagen unserer Stadt und auch der Geschütze des Militärs. Ingenieure genießen daher ein sehr großes Ansehen.     Der Architektenberuf ähnelt dem des Ingenieuren in seinem Aufgabenbereich, auch hier ist Kreativität und technisches Verständnis gefragt. Ein wesentlicher Unterschied ist, das der Architekt Gebäude und Niederlassungen entwirft und baut. Bei diesen Arbeiten kooperiert ein Architekt auch mit den Ingenieuren. Zum Beispiel für die SmartHome-Integration.     Die Aufgaben der Ressourcenbeschaffung ist ein sehr wichtiger Bestandteil unserer Organisation, denn ohne sie könnten keine der großartigen Ideen unserer Ingenieure und Architekten umgesetzt werden. Um die höchste Produktivität zu gewährleisten sind die Squads in einzelne Tätigkeitsbereiche aufgeteilt, jedes Mitglied spezialisiert sich auf einen bestimmten Bereich.   Wir hoffen, dass wir Dir einen kleinen Einblick in unser kontinuierlich weiterentwickeltes Konzept geben konnten und Dich von Ardisson überzeugt haben. Über Deine Bewerbung würden wir uns sehr freuen!   Ardisson bei DU | Ardisson Website | Procon bei DU   Bei Fragen melde dich einfach via Privatnachricht, gerne schicken wir Dir dann die IP von unserem  TeamSpeak-Server.   philgamer (inaktiv) | Villspor  

  7. Like
    Villspor reacted to vertex in Ersteindruck   
    Kein Widerspruch, aber der Hinweis, dass in Star Citizen so viel Kohle gepumpt wurde, dass die für jede Supportanfrage locker 3 Customer Service Agenten beschäftigen können, sowie einen 4ten, der die beste der 3 Antworten der Kollegen rausfischt.
     
    DU dagegen hat es erst im letzten Moment durch's Kickstarter-Projekt geschafft. Insofern finde ich, dass SC-Vergleiche grundsätzlich hinken. Die Kohle der Beta-Subscriptions wird bereits in die Aufstockung der Servicekräfte gesteckt und der Zustand sollte sich bald signifikant verbessern.
     
    Klar, alles keine Ausreden Tickets so lange liegen zu lassen, ohne wenigstens automatische Updates mit der Platzierung in der Warteschlange zu schicken, oder so (aber auch dafür müsste das Portal vermutlich erst weiterentwickelt werden). Wenn es nunmal nicht handlebar und das Kind bereits in den Brunnen gefallen ist, dann braucht es einfach einige Zeit um wieder in die Spur zu kommen. Saugt zwar, aber is halt so ¯\_(ツ)_/¯
  8. Like
    Villspor reacted to TheTulucan in Ca. 80 Stunden Beta   
    Hallöchen Zusammen,
     
    Dual Universe ?
     
    SPIELERGESTEUERTE WIRTSCHAFT
    Baue Ressourcen ab und veredle sie, errichte Fabriken und optimiere sie. Verkaufe deine Erzeugnisse oder tausche sie gegen die Erzeugnisse anderer Spieler ein. Ein gemeinsames Universum bedeutet ein einzelnes globales Wirtschaftssystem, das von den Spielern gesteuert wird.
     
    Richtig das kann ich zu 95 % meiner Spielzeit beständigen Budeln Budeln Budeln, immer Größere Fließbänder die Außer mehr Material keine wesentliche Optischen Unterschied besitzen. Richtig es geht ja darum Fabriken zu Bauen. Es tut mir Leid aber diesbezüglich bleibe ich dann bei einem anderen spiel das dies Wesentlich besser Umsetzt und Optisch um einiges besser erscheint, der Grund vielleicht hängt es damit zusammen das Fließbänder in Satisfactory auch das machen was der Name sagt. Im Grunde geht es diesbezüglich nur darum mit etwas Optik und realistischem Aufwand ein EVE 2.0  zu erschaffen.
     
    Glückwunsch diesbezüglich ist es EVE 2.0 wer es mag Zugreifen.
      
     
    BAUE SO GUT WIE ALLES!
    Erlebe ein voxelbasiertes, voll editierbares Universum. Erschaffe ganze Städte, gewaltige Raumstationen, riesige Kriegsschiffe, unterirdische Bunker oder ... fliegende Autos!
     
    Okay ich schau mich mal ein wenig auf dem Planet der Zuflucht um was den hier alles für schöne Gebäude errichtet worden sind in den ersten Tagen, Okay 50 % Bauen wie ich erst mal eine Große Plattform damit man die Zahlreichen Maschinen Unterbekommt. Oh weitere 45 % haben auch schon ein paar Wände und ein Dach, das Ganze erinnert mich doch sehr an die vielen Lieferungen  von Zalando wo Latschen Tretter mit Transportiert werden.  Und Oh wunder es gibt sie eine Hand voll bessere nicht schön aber auch nicht das Aussehen von Schuh Kartons.
    Und Leider sind auch 50 % der Schiffe die gekauften aus dem Markt, 45 %  Schuh Kartons und  5 % von  den Leuten die das Spiel schon aus der Alpha haben.  
    Warum schreibe ich überhaupt so viel über den Punkt Bauen, der Grund 80 % der Gebäude und Schiffe die es in Dual Universe geben wird werden Schuh Kartons sein. Sollte die eingebaute Funktion nicht durch Tastendruck deaktiviert werden können die Automatisch die Voxel anpasst. Es ist gelinde gesagt eine Katastrophe was von einem Spieler erwartet wird um Ordentliche Dinge zu bauen, wo  sind die Beschreibungen die Videos u.s.w die einem 0815 Spieler erklärt wie er vorzugehen hat. Sogar in Minecraft bleibt das gebaute wie man es setzt und wird nicht einfach geändert wenn ein nächster  Block daran gebaut wird.
    Der Punkt warum ich Interesse an Dual Universe hatte war das erschaffen von Schiffen und Gebäuden, leider ist bauen nur Frust Stress. Eine Zukunft für mich hat dieses Spiel nicht wenn sich diesbezüglich nichts ändert. Logische Überlegung sollte sein was Bauen 50000 Spieler.
     
    Eine Große Frage ergibt sich mir es gibt eine Datei  voxels-0 diese ist jetzt schon 25 GB Groß und versteckt sich im User Ordner welche ausmasse erreicht diese den noch ??
     
    Gruß Oliver
     
    PS: Hier ein kleines Beispiel das ich Bauen kann !

  9. Like
    Villspor reacted to NQ-Naerais in Website Update   
    Just a quick update on the website.
     
    Though we encountered multiple technical difficulties, the dev team is deploying the website step by step: the account creation, the authentication system, the download of the game and the payment portal are currently working. Now the team focus on deploying the beta invitation system as soon as possible. Next step after this one will be the image upload feature.
     
    Thanks for your patience while we continue to work. 
     
    The Novaquark Team
  10. Like
    Villspor reacted to NQ-Nomad in Beta 1 Release Notes. Last updated on September 8th   
    Hi Noveans, 
     
    This is it! After almost three years of regular live testing in Pre-Alpha, and three different Alpha versions, Dual Universe now enters its first Beta phase!
    This also means that the NDA is finally lifted. 
     
    The team worked extremely hard for you to discover this new milestone for our crazy dream project! We hope you'll see its potential and will continue helping us fixing, refining, and improving everything. Thanks for your awesome support since the beginning, it means so much to us... But enough of this, please find below the lastest release note: 
     
    New Feature
     
    Screen Unit image upload verification In order to see your content displayed on a Screen Unit, you now have to upload your images on our new website. Note that all images uploaded will be 100% public. To do so: 
    Go to dualuniverse.game and after logging in via the upper right corner panel, you will be able to go to the “upload image” page You’ll then be asked to open your Windows explorer and select your file, provided it’s in .jpeg or .png format (that’s right, no gif allowed) and that it’s under 5MB. Please note that drag & drop is not functioning at the moment, contrary to what’s written on the page There’s no feedback yet, but your image should appear after a few seconds in the “Pending Review” section on the page. Refresh it if needed. This review process can take about one week for now but we’re doing our best to proceed as quickly as possible. For now, you have to go back to the page to know its current status (this will be improved after the Beta launch) If rejected, you won’t be able to use your image, obviously If accepted, the image will appear on the dedicated section of the page. A mouse-hover will allow you to click on the link button to copy the link. No feedback will be displayed yet, but it works You now have a link starting with assets.prod.novaquark.com/XXXXX. With this copied link, you’ll then be able to insert it in a Screen Unit Right-click on your Screen Unit and use the “Quick Image” function. Paste the link in the pop-up field, validate, and ta-daaaaa. (You can also use it in any HTML content if you like) You can have 5 images validated at the same time For now, you can’t delete an image. This possibility will be added soon Remember that your content must comply with our EULA and ToS. If, for any reason, you find a way to circumvent the moderation process and display offensive content, you’ll be eligible for a sanction. Be responsible and have fun!  
    Note: On a more general note, that verification applies to all external URL used in HTML content in the game. Any external URL used must be validated or it will not be ever loaded in-game. This includes custom HUD on piloting seats, manifesto and organization logos, info button, and or course, Screen Units. 
     
    Improvements
     
    Added a clear warning about death and inventory loss [GUI] Added a confirmation message when using Force Respawn in a Tutorial session [LOC] Updated text for English, German and French languages [GUI] Added a red warning on inventory loss in confirmation popup for respawn, and removed the settings that allowed to skip confirmation [GUI] Improved display of quantas in dispensers (separate thousands with spaces, not commas, to be locale-independent) [Codex] Standardization of the codex font sizes between HUD mode and dashboard and fix of stretched images [Market] Buy/Sell orders are now sorted from lowest price to highest The downloadable package has been shrunk to 5.9 GB and the unzipped assets to 15 GB  
    Gameplay Balancing/Changes
     
    [Control] Removed reminder about ‘Shift + i’ shortcut to toggle container in the consumable bar [Voxels] It's now forbidden to put planet voxels 100m above the original ground height. There is still no restriction on constructs Temporarily removed wrecks Removed red watermark from the game Updated Beta disclaimers (long and short one) [PvP] Radar identification uses the construct center position [Organization] Removed the possibility for non-legate to deploy in the name of the organization  
    Crash Fixes
     
    Fixed a crash when sharing Construct [Warp] Fixed a crash when coming out of a warp  
    Bug Fixes
     
    [Rendering] Fixed ice moon position that was rendered on top of Sanctuary Moon [Rendering] Reverted voxel material shader to fix colored steels [Rendering] Fixed rendering order of clouds [Physics] Fixed an exploit where indefinite lift is possible when hover pads interact with a child construct Fixed ‘Share Element Publicly’ for all that did not work [Container] Fixed a bug where items from linked container was not added to the consumable bar when double-clicked [Inventory] Fixed sub-menu ‘Tool compatible’ that did not update itself when switching tool [Tuto] Fixed an exploit when dying in Tutorial sessions [PvP] Fixed a weapon exploit [Art] Fixed asset textures for Radar Atmo S and Radar Space Medium [Build] Fixed offset when placing Commander Seat [SFX] Fixed fireworks that did not explode in the sky Fixed some bugs with Sell orders from active container to distant market [Market] Fixed confusing message when player doesn’t have enough inventory space to retrieve an item from the market [Market] Fixed current scroll being lost on market update [LOC] Fixed typo in an error notification (inventory full on dispenser) [Sound] Fixed multiple audio cues that were triggered when selecting Exit on the Main menu [FTUE] Fixed the green marker that was larger than the window in the Codex sequence Fixed an issue that allowed to use items from the active container to create a sell order on a distance market [Market] Displayed average price and best offers were confused in Buy/Sell order windows (not instant one), Sell order windows displayed the prices of Buy orders, and vice-versa  
    Known Issues
     
    Windows certificate is not up to date. This issue will be fixed soon. This may prompt a warning message for new players in the first install. It can safely be ignored Beta keys system to distribute codes to your friends doesn't work for existing account yet. This will be fixed in the coming days Language selection from the game is not saved on exit Numerous French and German localization issues have already been spotted and we’ll fix them as time goes by In the previous Beta Release Candidate version of the game, ore veins were absent in the Sanctuary Moon. This has been fixed. However, any previous territory scan is now obsolete In some situations, you may not be able to place a Static Core Unit on your claimed Sanctuary Territory. An error message saying that it's too close to another construct is even displayed. It may be due to being too close to a District. Trying again from a bigger distance should solve the issue for now A random rendering crash can occur in many places because of some exhaustion of GPU/driver resource Voxel crash about disk/memory exhaustion [PvP] Slight difference between radar and 3D marker distance displays because radar uses the construct center as origin while 3D markers use the player position [SFX] Only blue fireworks may work for the moment If the game is set in German, Aphelia sometimes mixes German and English languages while speaking. A fix is coming for this very soon [Image upload] Regarding the new image upload feature on the new website, when clicking the copy link icon on the validated image section, there is no feedback to say that the link has been copied (it’s copied nonetheless) [Image upload] Drag & drop is not functioning at the moment, contrary to what’s written on the dedicated web page [Image upload] For now, you can’t delete an image. This possibility will be added soon [Image upload] Delay to display uploaded images in the pending review section can be long. Refresh the page after 10 seconds if needed [Image upload] There’s no feedback saying if an image is properly uploaded, nor rejected or accepted after review. You have to check directly by yourself on the dedicated page Uninstalling the game directly from Windows will leave the game’s files on the disk anyway. Please use the game's dedicated unins000.exe uninstaller in the game's directory for that. This will be fixed soon!  
    Cheers, 
    Nomad
  11. Like
    Villspor reacted to NQ-Nyzaltar in Kickstarter Pledge   
    @Pestilence
    @xTremePower
     
    No, your pledges are not wasted and were totally appreciated during the Kickstarter campaign.
    As Iron Founders, you will have two months of play time at the official release (the game itself being free, you won't have to buy it). You will have also some exclusive Kickstarter rewards.
     
    While Silver Founders and above getting automatically some perks from the most recent supporter packs as mentioned on this page, we are also planning to give something to our early backers with an Iron or Bronze status. Just be a bit patient, we are not forgetting you, and we still (and will always) greatly value your early support  
     
    Best Regards,
    Nyzaltar.
  12. Like
    Villspor reacted to Greenfox in Kickstarter Pledge   
    This should just be posted here.
    People don't like reading too much xD.
     
    If you have any of these packs, you get the corresponding acess of the new packs.
    If you want another supporter pack, you will need to buy that. No upgradeing possible.
  13. Like
    Villspor reacted to CyberCrunch in Gamescom insights   
    The DU gameplay at Gamescom was really amazing. I learned so many new things from talking to JC and actually playing the game that I would like to share them with you.
    I’m very surprised no one else started a topic about the Gamescom jet, as there were people who spend much more time at the NQ booth then me…
     
    Disclamer: None of this information is official! It’s just my interpretation of the conversation I had with JC. Also none of the features are final! I got the impression that a lot of details are not fully thought out and will be changed during development.

    I hope we can freely discuss features “as seen in the Gamescom” without violating any pre-alpha NDA… I just think this will be interesting for those who were not there.
     
    Orbital mechanics:
    In space there are actual physics calculations like in Kerbal Space Program! I managed to catapult my ship into orbit with atmospheric engines, but it was pulled back in a parabolic curve by the gravity.
    JC said that atmospheric engines are actually a bit overpowered, as you could reach escape velocity with them and fly straight into space… without any control… because the engines only work in atmosphere… xD
    I have to say that I really liked the atmospheric flight mechanics; they felt very realistic just like a real airplane.
     
    Damaging system:
    Functional parts get damaged on impact and are supposed to lose their function until they get repaired by hand. (currently tweaked as it’s a little bugy)
     
    Lua Scripting:
    We already know about the minigames you can create in DU, but what about the multiplayer capabilities? Interestingly enough it’s already possible to connect multiple programming units together by just using global variables, which are shared inside one core unit.
    Thereby multiple sup-components on a big ship can be interconnected and exchange information between each other.
    In theory it could also be possible to communicate to another construct using the same mechanic, but with a growing distance the update rate of the data would be decrease…
    They are thinking about creating a component that can be accessed “globally” by any programming unit in range… but the whole topic about distributed systems will be another milestone that has not been considered jet.
    Another thing I asked was if we could use an external IDE for programming, as the ingame one was kind of limited… JC said in theory you could import an external library in the ingame interface, which should access the Lua scripts directly from your PCs hard drive.(not sure about the Lua limitations inside DU though)
    Or you just copy the code over to the game for testing.
    The Lua development is also tied to the ingame IDE as each connected component actually provides predefined event-function-blocks that are triggered by certain events (e.g. a switch has an on, and an off block) and you have to place Lua code in the corresponding function blocks.
    I’m sure in the long run NQ will develop a fully fledged IDE for the game, so this will become no issue at all….
    The breakout minigame was also simply some code executed in the “start” function that was able to receive keyboard inputs and generated svgs that were displayed on the screen-unit.
     
    Rendering/Performance:
    Ok, the game is not the prettiest rendering wise.
    All vegetation and functional components get only rendered up to a certain distance (few 100 meters) than they get de-spawned. Also all lighting and shadows are only active up to this distance.
    Further away voxels also get simplified a lot… I honestly don’t care about the visuals that much, but I’ll admit the space station looked kind of squashed from far away.  But JC said they are working hard on improving the rendering.
    On the flip side flying around was very smooth! In god-mode I flew to the moon of Alioth in 2 seconds without any noticeable frame drops!
     
     
    So, that’s all that was new/interesting about the game for me. Maybe most of this was already known, but it wouldn’t hurt to share it here…
    I actually did not have enough time to cover all my questions. But others are probably able to share a lot more insights from Gamescom, so feel free to post them to the rest of the community!
  14. Like
    Villspor reacted to Anaximander in The Church Of Jay Cee!   
    Problem with this logic, is that Adolph is a normal name. Hitler is just a last name as well.

    See, if NQ allows for "Raptor Jesus", they will have to allow for "Jewhunter99", or "Hitler-Fuhrer-44" or whatever else 14yo angsty teen's going to come up with to say "F U" to the world.

    According to your logic, "Jews can be hunters! Jewhunter99 is not an insidious name! I don't see the problem!" So, let's drop the pretense on this sizzle. IT's silly.

    So, no, NQ should not have to tolerate such names. There's freedom of speech and then there's headaches to be avoided on a PR and litigatory level.
     
    Cheerios.
  15. Like
    Villspor reacted to Eclipse913 in I had a sewing class.... xD   
    Hey guys!

    So I had a sewing class at school (mandatory and ew), but I guess attitude is everything cause I totally zoned out and made this lel!
  16. Like
    Villspor reacted to GalloInfligo in New fantasy MMO   
    if you like fantasy MMO's and want a different take on them you might want to look at Chronicles of Elyria.  https://chroniclesofelyria.com/
  17. Like
    Villspor reacted to Limoriden in Life In space   
    So this is just a random question and idea, but what about life....in space itself.
     
     
     
     
    I took this idea from the Star Wars series to start off with.When people are in space in these movies there are creatures in space itself off of the planets, (http://starwars.wikia.com/wiki/Category:Space-borne_creatures) I really liked this idea because it seems very realistic, because there could actually be creatures in space. This is just a thought though, I would really like to hear your thoughts. Thanks for reading! -Limoriden. 
     
    http://starwars.wikia.com/wiki/Neebray/Legends
    http://starwars.wikia.com/wiki/Oswaft

  18. Like
    Villspor reacted to yamamushi in Private Ark Survival Server for DU Fans (aka Sandbox Gamers)   
    Hi Everyone,
     
    I thought I would extend an invite to a private Ark Server I created for anyone from the DU community. It has a handful of mods running to make gameplay a little more interesting, and some adjustments to the skill gain and dino taming modifiers.
     
    For this first week I'm going to leave the xp and dino taming at a ridiculously high speed so that we can see how things go, and to give an opportunity to try out some of the mods that require higher levels. 
     
    Depending on what people want, I can either wipe the server afterward or just readjust the skill gain modifiers as necessary.
     
    Anyways, here is a link to all of the server info, including the mods you may need to subscribe to on steam in order to connect:
     
    https://gist.github.com/yamamushi/f3d26eaf9c985c209cf1888c7807a7de
     
     
    If you have any questions, or suggestions for mods, you can leave them here or hit me up on discord anytime.
     
    I don't have high expectations that a terrible amount of people will be interested in playing on this, but we'll see how it goes. 
  19. Like
    Villspor reacted to StoneLegionYT in I'm fat so my mother got me a Camera for my Birthday! - So lets Talk Cameras!   
    So long story short my mother wanted to get me something that I would use a bit more to explore the outdoors rather then the indoors. I sadly don't live in the country or somewhere I can access ATV trails and fun recreational places and have no Car mainly due to how insane Insurance is and I just can't justify the costs till I can find myself a job.
     
    So in comes the Camera for my Birthday!
     
    What I got in Total:
    Camera: Nikon COOLPIX P900 - 83x Optical Zoom with 166x Digital.
    .:Links:.
    Tripod: COOCHEER Compact Camera Tripod Stand with 3-Way PanHead,1/4" QR Plate,Carrying Bag,57"(147cm),Load up to 8.8lb,Starter Beginner Entry Level
    .:Links:.
    Filters: Neewer® 67MM Complete Lens Filter Accessory Kit for Lenses with 67MM Filter Size: UV CPL FLD Filter Set + Macro Close Up Set (+1 +2 +4 +10) + ND Filter Set (ND2 ND4 ND8) + Other
    .:Links:.
    Battery / Charger: Pack of 3 Replacement EN-EL23 Batteries and Battery Charger
    .:Links:.
    Memory Storage: SanDisk Extreme Pro 64GB SDXC UHS-I Card 95MB/S
    .:Links:.
    Carrying Case: AmazonBasics Large DSLR Gadget Bag (Orange interior)
    .:Links:.
     
     
    Why did you pick the P900?:
    I never was big into photography that being said I was always big into long range photography. I always found it unique and Interesting to try to spot where is Waldo sort of speak and explore the world from afar.
    I enjoy the sky and I feel with a Camera like this I could take some interesting pictures of it during the night and day.
    What are the cons?:
    It's not a DSLR Camera. Even though I'm new to all this stuff 100% this is a big deal for most people and highly not recommended as a first Camera.
    It does not have detachable lens. Meaning the best you can do is use filters their pretty much this tinny lens you screw at the end of the big lens called Filters.
    The Senors is quite small from my Understanding for a Camera like this it really should be a minimal of 1 inch sensors and I think this about 4 times less making it only slightly better the the better Phone Cameras on the Market for quality of pictures.
    Camera only works well in bright light.
    Only saves as JPG and not in Raw.
    What are the pluses?:
    Simple to use all in 1 Camera.
    Has the highest Zoom level then any other camera without spending insane amount on lens $1000's+
    Don't have to keep swapping lens out for different ranges.
    Saves money in the long run as you can't buy new lenses haha.
    It's like owning a hand held telscope and lets you zoom into the Moon and other planets in our sky.
    Can be used for perverts in the bush. Enjoy that jail time.
    Would you recommend the P900 to others?
    When I researched this camera the answer would be overall No unless you are unique like me and are not going for the most professional level and don't mind images that don't turn out perfect but as well as someone who mostly is wanting for zooming content and when I mean zooming I mean ZOOMING.
     
    If you are someone looking for a camera overall then I would highly suggest a Canon or Nikon with a detachable Lens for sure. You will get much better pictures and overall you will learn more about Cameras overall.
     
    This Camera is only good for people looking for really the distance of zoom and ease of use and budget on that zoom level.
     
    Will you ever get a DSLR?:
    I will consider it if I enjoy the P900 a lot. That being said I'm personally quite poor. With this all in one I'm happy I don't need a lens and I'm not trying to go for professional anything more just get off my butt and take pictures and have a reason to hike far out. But as time goes on if I find myself really enjoying the Hobby sure I will consider it more maybe even the next model of this Camera in the future.
     
    Is there other Models of this type of Camera?
    Nikon is planning to come out with something like the P1000 or maybe p910 in the future. There is no ETA on this it could be in 3 months or 3 years. The current info we have is it will be 125x optical zoom with a 1" sensor. This alone for the Sensor is really great news. The zoom might be too much because already at 83x it's hard to see things clearly because of things like heat shimmers and other environmental effects.
     
    Canon also has a Camera with a 65x Optical zoom called the Canon Powershot sx60.
     
    Your poor why the hell?
    I'm quite poor and I love my life. I always hated working corporate job and the whole 9-5 Idea. I think us humans are enslaved and the whole point of robotics and automation was to create a better society and not make less then 100 people have as much money and power as everyone else on the entire planet.
     
    besides my Political views on why I'm poor and stay that way and why I have not found a Internet job I enjoy yet has no meaning on the power of my mother.
     
    My mother wanted to get me the darn Camera to become more healthy and because I have already lost almost 50 pounds this year. I plan on keeping this going and she just knows I spend way too much time in front of the computer. I face depression a lot and I reject most people including friends, and suggestions, and even gifts from my family. But I had been given advice that I should start small and accept this gift to help better myself and maybe to try to help me become a little less Anti Social in the future and hang out with my peers outside of the WWW.
     
    I plan on starting a Youtube channel and I guess a Flickr? Not sure if there is other sites you guys and girls would recommend for me to check out to publish my content overtime to share.
     
    I will edit this thread as time goes on 
     
    tltr; I'm fat my mommy wants me to be less fat and go outside and play with a Camera that can zoom out far and look at girls. I hope this post encourage Camera talk so I can learn the ways of being a Camera Man or Women 
  20. Like
    Villspor reacted to Hades in Fortnite   
    Nothing like Dual Universe, but is anyone else out there excited for fortnite?  Never thought we'd actually see this game, haha!  Thankfully I didn't follow it as closely as others, just came out of the blue for me... even though I remember looking into it all those years ago.
     
    Lots of gameplay:
     

     
    NOTE:
    The game will be F2P in 2018, the package just gives early access at the moment.  And of course goodies and whatnot.  There WILL be microtransactions, but Epic Games usually does pretty well with their in-game purchases... if Paragon is anything to go by.
  21. Like
    Villspor got a reaction from SpeakerfortheDead in Hey Everyone!   
    Welcome to the community GimmeMyGold!
  22. Like
    Villspor reacted to yamamushi in Don't miss the eclipse in 2017!   
    I've got a good location picked out in KY that is at the exact center of the path if anyone wants to see it and is nearby. 
     
    I just want to see Shadow Snakes!
     
    It's literally a once in a lifetime opportunity, so if you have the opportunity you should travel to a location where you can see it  
  23. Like
    Villspor reacted to NQ-Nyzaltar in Official Dual Universe Lore Bible   
    Before starting to read the Lore Bible, here are three things to keep in mind:
     
    - Some names and acronyms (put between brackets) in the texts below are still temporary names/placeholders. The final names will be decided in the following days. The update will be announced on the forum and on the social media. We don't want to keep these names, for different reasons varying for each case. Once in its final version, it will be published on the Community Wiki hosted by Gamepedia in a more structured way.
     
    - It was a difficult decision but we have to consider that some parts of the short story written by Alain Damasio will be modified or removed. We all agree in the team that Alain Damasio has made a short story of the highest quality, but this short story was written more than a year ago (July 2015) and at that time, too many points regarding the game universe were unclear or undecided. With all the recent additions to the Lore Bible (those released today publicly and those which remain hidden as "secrets" for the time being), it generated some inconsistencies difficult to solve. We tried to find solutions or workarounds, without success. Some points were also not possible to represent in-game, gameplay wise. While the short story will be updated in the near future to fit with the current Lore Bible, in the meantime here are the specific points from the short story you should not take into account when writing a Fan Fiction for Dual Universe (if you want it to be eligible for being integrated to the official backstory of the game, of course. If not, you are not bind to such limitation).
    Unfortunately, Sohan Decker is not a member of the Alpha Team, as he woke up just a few weeks before the Arkship landing on Alioth and do not participate in the neural simulation that will take place more than a year and a half before the landing. Aphelia memory must have had a glitch when talking to Sohan for the first time. When approaching some Kyrium, the matter doesn't reflect human faces aging or growing younger. Sohan Decker has probably some hallucinations, a possible side-effect of the long cryogenic sleep. While probably convinced of it, Sohan Decker didn't communicate with an invisible entity by using elements and he didn't get some schematics of a high-performance reactor in Kyrium as a reward. The proof? When asked to show it, he's not able to find it anywhere! Poor Sohan. Probably another hallucination. Cryogenic sleep seems to have a lasting side effect on him.  
    - The Novaquark might slightly change the Lore Bible over time, but we will try to keep those changes to a minimum, to ensure that it doesn't contradict fanfictions that have been already integrated to the official lore. These changes will occur mainly when an inconstancy is discovered in the official lore. And in this regard, we count on your feedback to track down every little detail that might seem inconsistent (some details may be awkward on purpose though ). As always, we remain open to your feedback on the Official Lore. Let us know what you think about it!
     
    That being said... Happy reading!
     
     
      Dual Universe Lore     Dual Universe takes place about 10.000 years after the Grand Exodus when humanity left the Earth to establish itself in new star systems. The information below is meant to help answer the most common questions about the game environment and try to set the general framework where fan fiction can be written.     Main historical dates     2027: Discovery of the doomsday Neutron Star that is heading towards the Earth. Collision will happen in 498 years. There are margins of error, so we don’t yet know if it means annihilation or simply major disruption in the solar system’s planets, but the end result is the same: the Earth will not be able to host humanity anymore. The event is nicknamed the [“Star Kiss of Death”], or [SKiD]. It’s basically the Armageddon.   2049: Creation of the United Earth Federation (UEF), a transnational institution in charge of coordinating humanity’s efforts and response to the SKiD. After concluding there was no hope to save Earth, the “Rebirth Program” is launched to analyze possible responses and escape strategies. New measures are voted to encourage natality in the population, to fight against a nihilist movement that advocates a “no future” philosophy and maintain a sufficient level of humans in the long run to fuel the Rebirth Project’s considerable needs.   2084: Better measurements have narrowed the margin of error. We are now certain that the neutron star will hit our solar system, and will actually collide with the Sun, turning into a black hole that will ultimately swallow or eject into deep space all the planets, Earth included. There is no hope anymore. Major funding is directed towards the Rebirth Program. All nation states must contribute at least 20% of their resources   2100: Mankind is entering a new era where robotics and AI have profoundly transformed society. Work as we know it has long disappeared, and social influence has replaced money as the currency of value. People do not “work” anymore, they have “activities” that can get them socially recognized. Money is still used, via a Universal Revenue, mainly as a way to control the scarcity in production, and balance the availability of goods against their rarity.   2130: AI have reached a threshold of global sentience. It is active in political, economic and social debates, and, while its benefits are recognized because it allowed the transition to the post-work era, more and more concern is raised about the sentient aspect and the potentially uncontrollable dimension of the AI agenda. Irrational fear rises. The AIs try to reassure the population that they have no rational reason to threaten humanity, but it only increases the level of suspicion within society.   2145: Massive rebellions all around the world signals the end of sentient AI, introducing a permanent universal ban on this technology, enforced by the very powerful UEF. Against all expectations, sentient AIs accept this and willingly shut down without any form of violent action.   2150: Society is reorganizing itself, as many “jobs” that needed sentient-level AI (surprisingly many, including low skill manual work), are once again left to humans to perform. Robots, in general, are banned also, as most of them required sentient-level AI to function properly. Early attempts at designing automated non-sentient robots all failed in the late 21st century, as it was discovered that sentience was a necessary byproduct of any sufficiently sophisticated AI for it to be able to interact with a complex world.   2200: A major summit of the UEF signals the alarming lack of progress on project Rebirth at the dawn of the 23rd century. Debates continue for years afterward about priorities, what technology to use to build Arkships that could help evacuate Earth, who would be eligible if we cannot host the 3 billion people still in the current population.   2200-2400: Major political events keep slowing down humanity and the UEF in its attempts to advance the technologies needed to build functional Arkships. Many wars, economic crisis, and nihilist terrorism are plaguing the progress.     2400: A period of calm and peace opens up. Major progress is suddenly made in the technologies needed to build the Arkships. Some are scheduled to be built within the next decade.   2440: Several key technologies are unlocked: cryosleep modules, nanoforming technology, nanopack condensers, resurrection nodes (it is unfortunately too late to use this to save humanity, as we would need to install billions of them out of the solar system, on a hospitable planet. There is not enough time for this).   2450: The Arkship technology is now mastered. Mass production begins. The race is on to produce as many as possible.   2500: Terrifying high-resolution images of the neutron star are provided by our most powerful telescopes. Riots break out all around the world over the selection process that dictates who gets to board the Arkships. The process was created by a scientific committee from the UEF, aimed at gathering the maximal amount of genetic diversity, plus a lottery to offset the fact that not everybody could go. Massive euthanasia programs were organized for those who had to stay, in order to provide them with a painless death at the time of their choosing.   2510-2536: The first Arkships leave Earth. Each Arkship is heading towards a particular part of the galaxy. One of them, the Novark, is heading towards the Scutum-Centaurus arm.   2538: The neutron star annihilates the solar system. Arkships are on their way, heading towards different regions of the galaxy.   12477: The Novark arrives on Alioth with a mighty thud as it deploys itself into the planet surface. From afar the planet shows many similarities to that of Earth, a blue and green marble sitting in the goldilocks zone of its star. Large continents surrounded by equally large oceans define the planet's appearance. Mountain ranges suggest continental drift, and large forests have taken hold over most of the planet. Primitive lifeforms are abundant. There are no obvious signs of advanced lifeforms.   Year 0 after arrival (0 AA): It will be your turn to write History in-game.     The world in 2500     In the century that preceded the Grand Exodus, the Earth’s population had dropped considerably, down to something less than 1 billion people. The “no future” movement had gained a considerable momentum. people were simply trying to tend to their immediate needs; losing any vision for the future or any concern for the consequences of their actions. Natality had dropped to an all-time low, crime had been continuously rising, and nation-states, as we know them, had long disappeared.    The UEF was the last large-scale social structure still holding, among a myriad of medium to small sized city-states. UEF representatives and offices, research centers, production units, etc, were scattered all around the world within the largest city-states. The UEF’s role now extended far beyond its initial goals, including a feared and powerful armed force to maintain order and ensure that the proper funding was collected from all city-states, in order to fuel the Rebirth Program.   A global language shared by all people on the planet started to emerge at the end of the 21st century. By the end of the 22nd century, almost everyone was speaking at least two languages: the global language (the “common”) and their local native language, each city-state having somehow evolved a variant from their original country’s language.     Economy     During the first half of the 21st century, the Internet quickly decentralized the economy, removing intermediaries and frictions. Anyone was able to open their own marketplace online, with powerful central aggregators to help integrate available offers. This was both true of goods and services. This highly distributed model of economy stood the test of time, both during the sentient AI era, and even after, up until the last century.   One of the main challenges of the last century, after the city-states model had become the norm, was logistics. Transporting goods over long distances carried the risk of being attacked by pirate hordes living outside of the city-states. The UEF and other independent security groups were in charge of ensuring protection, but still, the risk made inter-city trade dangerous, and local markets were the preferred method for basic commerce.   A global currency, the [U2] [(Universal Unit)], is installed by the UEF at the beginning of the 22nd century. It has acquired a growing support over the years and is still used as a reference currency on Alioth to help organize the exchanges of goods and services between colonists.     Culture & Society     At the moment of the Grand Exodus, humanity, and more precisely the UEF, was divided into four main political movements, essentially different from each other in the way they decided to answer one simple fundamental question: what is the main driving force in the development of humanity? Behind this question lies the promise of a political agenda on how to best rebuild civilization after the Grand Exodus and where to put priorities.   The [Luminous] are the first group. They consider the main driving force to be knowledge and wisdom. They value science, industry, and technology as the main sources of progress, and were heavily involved in the Rebirth Program, which led to the construction of the Arkships. They are, of course, very much respected for this even if some may criticize them for their all too rational take on things.   The Alphas are the second group. For them, the main driving force is, well, … force. They believe that people will respond mostly to strength and balance of power. They favor military action as a way to control and orient the evolution of the world in an attempt to avoid chaos and prevent instability. Their intentions are good, but they often fall to scandals involved with their expeditious way of handling subtle situations.   The [Ethereans] constitute the third group. They believe in the power of culture and arts. For them, humanity needs to be driven by dreams, beauty, and ideals before anything else. This is what gives us meaning. They are not against more practical endeavors but like to see these activities as a way to expand and support their vision. They have many supporters but are also often criticized for their lack of pragmatic action.   The [Emporium] is the final group. They believe in the power of money and commerce. They think that this has been the life and blood of human societies for millennia and, even if they will gladly regret it in private, they think this is nevertheless what gets the job done and can really set people in motion. Some point to them as a cause of an ever greater inequality, but they know how to silence critics and make people happy.   None of these movements are inherently good or bad, they all value human life and sincerely want to help drive humanity to success again.     Science & Technology     After the early 2400 years, science and technology suddenly advanced very rapidly. Incredible innovation occurred, becoming the foundation of the industrial, societal and economical program of Project Rebirth. Here are some of the most prominent breakthrough:   Nano fields: an expected advance in theoretical physics led to the discovery of a new force in nature, called the nano force due to its scale, that allows the fine control of the molecular dynamics of matter with incredible precision using high-frequency nano fields. Nano fields can be focused and modulated in a very precise way to destructure, collect or deploy and assemble matter in a short range radius. This is the core technology that gave birth to the nanoformer that every colonist is now equipped with.   Calabi-Yau Compactification: the science behind CYC has been inexplicably lost in the Arkship archives. It is the technology that powers nanopacks, which are extra small containers (that colonists wear on their suit), capable of amazing volume and weight reductions of almost anything contained in them. All we know is that it seems to work based on the possibility of storing matter within the extra dimensions of space-time allowed by String Theory, inside what is called the Calabi-Yau space. The exact science and understanding behind them have been lost and attempts at reverse engineering have all failed. Due to the limited number of Nanopacks available and their considerable value, further attempts to reverse engineer them are discouraged.   Nano fields displacement: this is a direct application of nano fields, used to collect, store and maintain matter within containers. The matter constituting objects is analyzed and de-structured first then stored using stable nano fields and can then be retrieved later via a reverse process that reconstructs the original object. Unlike with CYC, only limited volume gain can be obtained, and no weight reduction is possible.   Nano 3D printing: based again on the versatile nano fields, advanced 3D printers became possible. They are capable to assemble matter from reservoir sources to build small sized technological parts; from electronic to industrial units. Coupled to the automated assembly, this quickly became the basis of the industrial chain.   Quantum branching: Quantum Branching is at the heart of the Resurrection Node technology and is based on the “Many Worlds Interpretation” of quantum mechanics. At any moment, in particular, when you die violently, several versions of the universe coexist in parallel. Scientists working on EPR pair experiments unexpectedly found a way to instantly switch one universe with another, and in particular to switch the universe where you die with another one where everything would be exactly the same, except that your body position would be inside a Resurrection Node. The amount of matter to switch increases the energy cost of the operation, so RN teleport only the minimal set of mass to get the desired effect, which is... your naked body. A Resurrection Node is paired with your body and cannot be used by somebody else. It will make you virtually immortal, even if natural aging will probably get you out of the loop at some point.   Propulsion Engines: the conquest and exploration of the arrival star system, as well as nearby other stars, is a clear objective of the UEF for each arkship colony. Several engine technologies have been perfected as part of the Rebirth Program to allow for various flight modes, either within the atmosphere or in space. Warp drive technology was near completion and should become available a few years after the arrival, and even stargate instant transport has been sketched as a not too distant possibility but was unfortunately still not available at the time of the Grand Exodus. Warp drive speed is believed to be in the range of 100 times the speed of light, while super warp probes, that could be used to seed stargates, could reach up to 10.000 times the speed of light Making it possible to cross the entire galaxy in just 10 years.      Environment & Alioth     Alioth is a rocky planet orbiting a yellow dwarf star, very similar to the Sun. It has been selected due to its very similar Earth-like environment, including oceans, forests, mountains, and lakes. It has a moderate fauna and flora. The temperature during the day is similar to what can be found on Earth, but nights can be extremely cold.   The planet underground contains all the usual materials needed for basic industry, but more rare resources may have to be later harvested from one of Alioth’s three moons, or even from more distant planets in the system.   The planet day/night cycle is only 5 hours, and its weather pattern is relatively stable. Overall, Alioth is a very life-friendly planet, carefully chosen to facilitate the starting years of colonists.     The Arkship     The Arkships are a marvel of technology. They can host millions of people in cryosleep for extended periods of time. Made out of Kyrium, they can sustain incredible amounts of deceleration or acceleration, and absorb the corresponding crushing forces for whatever stand inside them. The origin of Kyrium is not well documented, and it seems that the material cannot be produced from a known industrial process, but has probably been found during some mining operations within the solar system.   Designed to travel close to the speed of light for extended periods, the Arkship engines are also not part of the colonist UEF documentation and no assembly schema could be found within the archives. There is much debate over why the UEF would intentionally withdraw such potentially useful information.    Each Arkship is controlled by a proto-sentient AI that was allowed to be built against the very strong UEF AI ban because it was argued that it would have been to hazardous to let the fate of humanity rest with dumb automatic machinery that would possibly not be able to react to unexpected situations. While being an exception to the AI ban rule, the onboard AI is still however not allowed to take control of any machinery or robot beside the Arkship itself. The Novark AI is called “Aphelia”.   Once on approach to the destination planet, the Arkship is designed to literally “plant” itself into the planet, to allow the deployment of deep geothermal energy collectors that should sustain the ship functions for potentially unlimited amounts of time. One of the key functions of the ship once arrived, is to deploy a 20km radius safe zone area where colonist would be free from any form of aggression from the outside, or… from themselves. It was indeed decided that the potentially violent nature of mankind under stressful situations should be mitigated with appropriate supervision. Within the safe zone, Aphelia is in charge of maintaining order and providing support and information to colonists.   Regrettably, one known consequence of prolonged cryosleep periods is that the subject will suffer from a loss of episodic memory, as well as most high-level cognitive memory like expertise, skills or know-how. To mitigate this side-effect, the Arkship archive contains large data banks that are transferable to colonists via a wireless data transfer process involving brain implants capable of stimulating neural activity. The process is slow and can take days for the most advanced skills, but is an effective way to re-enable lost knowledge for long time space travelers.   The Arkship extreme energy efficiency, designed to allow the ship to travel for millennia, forced trade-offs on what could be embarked in order to minimize the total mass, and of course, human bodies were preferred over any other “mass”. For this reason, and because nano 3D printing would make it possible to easily rebuild them, no ship or industrial machine was included inside the Arkships’ cargo. Humanity would have to rebuild civilization from scratch. A large set of Resurrection Nodes tuned to each registered colonist where however installed inside the Arkship to avoid any loss of precious life once arrived on the destination planet. For these reasons, the inside of the Arkship, besides the propulsion machinery, is mostly occupied by cryosleep pods, as well as Resurrection Nodes.     Alpha Team     While most of the Arkship passengers will wake up after the Arkship landing, a few thousand among them become half awakened between a few years and a few weeks before the arrival: the Alpha Team. While their bodies are still asleep, their brains are awakened and connected to an advanced neural/computer network that immerses them collectively within a virtual reality that is meant to simulate their first steps on the destination planet, for education and testing purposes.   During this simulation, of course, nobody can die (this represents the Alpha phase in-game). They are given easier access to certain resources in order to help them experience various stages of the tasks they will have to face in real life when arrived. The Alpha Team will then be in charge of guiding newcomers and helping to bootstrap the first months of civilization rebuilding on the destination planet.     Mysteries     The cryosleep memory loss side effect and the apparently incomplete archive has given birth to several mysteries for which colonists have developed many “theories”:   Kyrium is an absolute mystery. Nothing is available in the Arkship archives about its nature, how it was found, how to create it or even manipulate it. No colonist have the slightest memory about the Kyrium. If Aphelia is asked for information on Kyrium, the Novark’s AI will just give an elusive answer, explaining its lack of information as memory loss. Obviously, this is not a satisfying answer.
      Aphelia is in charge of the Novark and the well-being of all the passengers. She seems as caring as invasive in the private life of the colonists. While she doesn’t seem brutal, hostile or coercive by default, her behavior is perceived as if she monitors every action of each human that has been aboard the Novark. She also seems to avoid disclosing information on some specific topics - at least that’s the feeling of some passengers - despite the fact she always says if she doesn’t give a satisfying answer, it’s because the answer is beyond its capabilities. For these two reasons, many colonists think the AI is not trustworthy. Aphelia seems to have incredible defenses against hacking, far higher than anything the most experienced colonists in hacking have ever seen, reinforcing the feeling that the AI might hide a lot of things. The Arkship light speed engine is completely undocumented. No schema is available to rebuild one using 3D nano-printing, or by any other means.
      There seems to be no trace of the records pointing to the destination of the other Arkships within the galaxy.  
     
     
    Best Regards,
    The Novaquark Team
  24. Like
    Villspor reacted to DarkTemplar in Steam   
    Hey man, be sure to have a search through the forums before posting a new thread. https://board.dualthegame.com/index.php?/topic/10647-steam/page-2?hl=steam#entry45479 this topic has been thrown around before with arguements already made for and against.
  25. Like
    Villspor got a reaction from Lord_Void in New fantasy MMO   
    Yea Lets see what will emerge ^^ 
     
    Edit: The Kickstarter was a big Success: $3,271,809 pledged by 19,576 backers 
     
    Edit2: All who are interested and not registered yet, can register for weekly drawings on the website: https://aoc-game.com
×
×
  • Create New...