Aktuelle Zeit: 20.10.2019 16:32

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 35 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4  Nächste
Autor Nachricht
 Betreff des Beitrags: Re: Project_17 (Arbeitstitel)
BeitragVerfasst: 19.07.2019 19:14 
Offline
Benutzeravatar

Registriert: 08.03.2010 22:12
Wohnort: AT
OK. Der erste Post muss angepasst werden. Leider kann ich hier veralteten Inhalt nicht ausblenden. Der Download ist über die angeführten links möglich. Da ich noch wie beschrieben in der inhaltlichen Findungsphase bin, kann sich Inhalt und Art des Spieles noch ändern. Ansonsten bitte ich untertänigst um Nachsicht.

Ach ja: Wir wollen ein bisschen locker bleiben.
In diesem forum wird egal was zum Thema purebasic gepostet. Schön. Schön, daß Programmiersprachen neben c, visualxxxx usw. BASIC Dialekte verwendet werden. Die Community ist sicher nicht so groß und aktiv um hier Hobby Programmierer gleich zu attackieren (HEXOR) und sich hier mit elitäre Forenverhaltensweisen zu profilieren.

Dank an André und die anderen purebasic Entwickler,
die mehr ideologisch und mit Herzblut an dem Projekt arbeiten haben wir die Möglichkeit mit geringen finanziellen Aufwand unserem Hobby nachkommen. Also : danke für den Hinweis, aber mit : hallo darius, danke für deinen Beitrag, aber leider ist dieser inhaltlich bzw. wie du ihn gepostet hast nicht optimal zu lesen. Bitte berücksichtige folgendes.....funktioniert bei mir.....


Ps: die bastelkelkeller Website ist nicht erreichbar.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Project_17 (Arbeitstitel)
BeitragVerfasst: 19.07.2019 22:57 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Du kannst mir oder RSBasic gerne sagen, wenn wir für dich etwas aufräumen sollen. Und keine Sorge, ich bin locker, war wohl nur zu sparsam mit den Smileys. :wink:
Ja, die Webseite ist bewusst offline, der YouTube-Kanal ist aber nach wie vor verfügbar.

_________________
Neustes Video: Neje DK - 1 Watt Laser Engraver
Ubuntu Gnome 19.04 LTS x64, PureBasic 5.71 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50, 5.60)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Project_17 (Arbeitstitel)
BeitragVerfasst: 07.08.2019 20:50 
Offline
Benutzeravatar

Registriert: 08.03.2010 22:12
Wohnort: AT
Project17
Version 201908072017:

folgende Änderungen gibt es:

Da die Ladezeiten der ersten großen Map doch recht lang waren, wurde die Engine um die Möglichkeit
die Map zu streamen ergänzt.
Erhebliche Ladezeitverkürzung
Es gibt neue Objekte in der Map, damit diese nicht so "tot" wirkt.
Im Debugmodus (Standardeinstellung) wurde die hintergrundfarbe von Rot nach Grün geändert. Wesentlich netter für die Augen. :)
Zum Testen kann zwischen streaming oder konventionelles laden umgeschalten werden.
Welche Tasten was bewirken wird im Debugmodus angezeigt.

Spielereingaben/Steuerung von Refreshrate des Bildschirmes entkoppelt.
Alle Spieler - Steurerung - Aktionen sollten nun gleich schnell oder auch langsam ablaufen, egal welche Leistung des ausführende System zu Verfügung stellt.


Inhaltlich bewegt sich das Spiel immer näher in Richtung Dungeon Crawler.
Ziel (bis jetzt): Alle Schatzkisten finden.

Die aktuelle Version überprüft noch nicht die Gesamtzahl der in der Map verbauten Schatzkisten.
Das System wurde universeller gestaltet, somit können in Zukunft andere Questaufgaben auf den Spieler warten.

Systemvoraussetzungen:
getestet auf verschiedenen Systemen Intel I3, Atom, Intel I5, Intel HD 610/620 , nVidia 1050TI (ab Windows 7 64Bit, bis Windows 10 64Bit) 32 Bit wird aktuell nicht unterstüzt.
mindest (verschiedene getestet) Bildschirmauflösung: 1024 x 768, maximal ?

Bekannte Probleme:
Performance abhängig von der Desktopauflösung und Refreshrate.

LG.
Walter

Downloadlink findet sich im ersten Post.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Project_17 (Arbeitstitel)
BeitragVerfasst: 09.08.2019 10:40 
Offline
Benutzeravatar

Registriert: 08.03.2010 22:12
Wohnort: AT
Kleines aber feines Update:

Project_17 Changelog:
Version Alpha: 201908091024

Performanceverbresserung:
indexer arbeitet nun korrekt.

Leichter Slowdown beim Streamen der Umgebung möglich.

Neue Funktionen:
Verzeichnis "PROJECT17" inclusive einer Testdatei wird , falls nicht vorhanden, beim Start im UserDirectory von Windows angelegt.
Vorbereitung für Accountbezogene Spielstände usw.

Downloadlink für die aktuellste Version, wie immer im ersten Post.


Zuletzt geändert von darius676 am 09.08.2019 11:03, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Project_17 (Arbeitstitel)
BeitragVerfasst: 09.08.2019 10:42 
Offline
Admin
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: Deutschland::Berlin()
Wenn ich auf deinen Downloadlink klicke, erhalte ich folgende Meldung:
dropbox hat geschrieben:
404
Diese Datei befindet sich nicht mehr an diesem Speicherort


\\Edit:
Jetzt haste den Link angepasst und Download geht wieder.

_________________
BildBildBildBild BildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Project_17 (Arbeitstitel)
BeitragVerfasst: 09.08.2019 10:55 
Offline
Benutzeravatar

Registriert: 08.03.2010 22:12
Wohnort: AT
RSBasic hat geschrieben:
Wenn ich auf deinen Downloadlink klicke, erhalte ich folgende Meldung:
dropbox hat geschrieben:
404
Diese Datei befindet sich nicht mehr an diesem Speicherort


\\Edit:
Jetzt haste den Link angepasst und Download geht wieder.


:bounce:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Project_17 (Arbeitstitel)
BeitragVerfasst: 09.08.2019 15:39 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
Da du auch an einer Engine arbeitest würde mich interessieren:
1. Was genau passiert wenn die Map gestreamt wird?
2. Welche Vor- und Nachteile hat das Verfahren?

_________________

Links:
PureBasic Discord
[ENGINE] 2D Engine Nautilus (Win)
[INCLUDE] GLFW 3.3 Library
[MODULE] Bass Library 2.4 (Win)
[LIBRARY] Hexi Binary2Hex (Win)



Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Project_17 (Arbeitstitel)
BeitragVerfasst: 09.08.2019 17:59 
Offline
Benutzeravatar

Registriert: 08.03.2010 22:12
Wohnort: AT
Hi,



Da ich mehr dieser "Open World" , Spieler bin, ist es für mich eine Herausforderung, selbst Open World Spiele(Konzepte) zu entwickeln.

Problem dabei ist: Die gigantische Menge an Daten die dabei zusammenkommen, inklusive der vielen Fehler und Abhängigkeitsprobleme unter den Dateien.

Aber zu deiner Frage:
Die gigantische Datenmenge macht folgendes Problem:
Stell dir vor du willst eine große Stadt, Insel, was auch immer digital bauen.
Ich verwende Bitmapgrafiken und simple 2D Technik dazu.
nun hat die erste "große" Map um die 6000 Objekte, welche alle Eigenschaften haben wie: Sound, verknüpfte Grafikdatei, Interaktionsmöglichkeiten usw...
du kannst die Map komplett in den Speicher laden, dauert halt so 20 bis 30 Sekunden.

oder du lädts nur den Bereich der sichtbar ist, und bei bedarf weitere objekte nach: Ladegeschwindigkeit ca. 2 Sekunden

Vorteil: schneller Level/Map Ladevorgang.

Nachteil: Etwas aufwändiger zu Programmieren, bzw. treten Fehler auf die bei "Lade komplett alles" nicht passieren, bzw. gewisse Dinge müssen der Engine vorher mitgeteilt werden.
ein weiterer Nachteil: Beim Nachladen kommt es mal mehr mal weniger zu Frameeinbrüchen.


Code Auszug aus meiner Engine:
Code:
 Procedure  E_STREAM_TERRA_START()
    Define _dummy.b=#False
    Define _thread.l=0

    ;********************  this routine supports  mapstreaming, so loading times are very short and fast ***************** we can build so much bigger maps now *****************
    ;this is the main and key routine for the final GFX output
    ;this routine manipulates all posteffects and GFX and SFX , calls routines for SFX  & GFX
    ;the final display "catch" routine can take this screen and use it for display output
   
    e_object_in_screen.l=0 ;counter used for debugging a
   
   ResetList(world_object())
   E_PERFORMANCE_ADAPTER(#RESET_INDEXER)  ; for interactive objects in viewable area, first start each frame we reset the index (list) and remove all entries
   
    ForEach world_object()  ;here we will load/hold the sprites for the gfx presentation of the game
     
      E_OBJECT_BLINK()
       
     If world_object()\object_full_screen<>0
        ;fullscreen objects are shown
       E_STREAM_LOAD_SPRITE(#False)
        DisplayTransparentSprite(world_object()\object_gfx_id_default_frame,0,0,world_object()\object_transparency)
       EndIf
       
       
        If world_object()\object_full_screen=0
       
        world_object()\object_is_in_area=#False ;default we are not in area, used for visble area only interactions we must not calculate all of the mess
        world_object()\object_is_in_area_shadow=#False;no shadows in area, we use  the performanceguard routine to handle the field of view, this is used for variuos perfomrance tweaks (shadows, spritequality...)
       
        If  world_object()\object_is_active=#True And world_object()\object_blink_object_show=#True 
         
          If (world_object()\object_x+e_world_offset_x.f+world_object()\object_w) >-1 And  (world_object()\object_x+e_world_offset_x.f)<(v_screen_w.f+1)
           
            If (world_object()\object_y+e_world_offset_y.f +world_object()\object_h)> -1 And ( world_object()\object_y+e_world_offset_y.f)<(v_screen_h.f+1)
             
              world_object()\object_is_in_area=#True
              world_object()\object_is_in_area_shadow=#True 
                       
            EndIf
           
          EndIf
         
                   
         
          If   world_object()\object_is_in_area=#True
           
           
            E_STREAM_LOAD_SPRITE(#False)  ;here we jump to the big loading routine
            E_PERFORMANCE_ADAPTER(#ADD_TO_INDEXER)  ;here we add objects to indexer if the have an indexer flag
            E_LIFE_TIMER()
            E_RANDOM_OBJECT_CHANGE()
            E_STREAM_DEBUG_GFX()  ;for debugging
                           
                  If world_object()\object_do_not_show=1    ;show me.... if 0, do not show me
                world_object()\object_transparency=0    ;we do not show it....
              EndIf
         
          e_object_in_screen.l+1  ;count the objects in screen (for debugging/developement)
         
          If world_object()\object_use_shadow<>0 And world_object()\object_is_anim=0 And world_object()\object_is_in_area_shadow=#True
            DisplayTransparentSprite(world_object()\object_gfx_id_default_frame,world_object()\object_x+e_world_offset_x.f+world_object()\object_shadow_offset_x,world_object()\object_y+e_world_offset_y.f+world_object()\object_shadow_offset_y,world_object()\object_shadow_intense,RGB(0,0,0))
          EndIf
                   
          If world_object()\object_is_anim=0
            DisplayTransparentSprite(world_object()\object_gfx_id_default_frame,world_object()\object_x+e_world_offset_x.f,world_object()\object_y+e_world_offset_y.f,world_object()\object_transparency)
          Else
            E_ANIM_SPRITE_ID()
          EndIf
         
          If world_object()\object_light_on=1
            ;show light? is  light?
            DisplayTransparentSprite(world_object()\object_gfx_id_default_frame,world_object()\object_x+e_world_offset_x.f+world_object()\object_shadow_offset_x,world_object()\object_y+e_world_offset_y.f+e_shadow_y_offset.f,world_object()\object_shadow_intense)
          EndIf

        EndIf
       
     
    EndIf
   
EndIf

E_CHECK_MAP_FOR_QUEST_STATUS()
      E_CLEAN_UP_SGFX()
    Next
  EndProcedure
 




Hier ist die Routine zum Laden der Grafik, bzw. der Objekte mit all ihren Eigenschaften:
diese wird in E_STREAM_TERRA_START() für jedes sichtbare (im Bild befindliche) Objekt aufgerufen, wenn das Objekt noch nicht geladen wurde geschiet dies, ansonsten wird die Routine sofort wieder verlassen.
Damit die Engine weiss welche Objekte geladen werden müssen, wurde im Vorfeld durch den "worldcreator" die Breite und Höhe des Sprites mit in die Mapdatei gespeichert. Sobald mathematisch eine Überschneidung mit dem Blickfeld stattfinded wird die E_STREAM_LOAD_SPRITE() aufgerufen.

Code:
 Procedure E_STREAM_LOAD_SPRITE(_mode.l)
  ;***************************************************
  ;here we read all object relevant infos
  ;
  ;****************************************************

   
   If world_object()\object_stream_gfx_loaded=#True  ;already loaded.....
           ProcedureReturn
    EndIf
       
  Define _dummy.s=""
  Define _sprt.l=0
  Define _ok.l=0
  Define _key.s=""
  Define _help_path.s=""
  Define _dummy_x.f=0
  Define _dummy_y.f=0
  Define _dummy_layer.l=0
  Define _dumy_last_list_element.l=0
 
   SpriteQuality(#PB_Sprite_BilinearFiltering) ; maximum spritequality
   
   Select _mode.l
       
     Case #E_ADD_ELEMENT_TO_MAP   ;add single object to map
       
       ;default initialising:
       _dummy.s=GetPathPart(world_object()\object_ai_path)+world_object()\object_alternative_gfx_ai
       _dummy_x.f=world_object()\object_x
       _dummy_y.f=world_object()\object_y
       _dummy_layer.l=world_object()\object_layer
       
       
       LastElement(world_object())  ;go for the last element in the list, so we can add the element to the end of the list!!!
       
       If AddElement(world_object())
         ;here we call a check routine for layer position....so we can place some special objects on right layer
         E_DNA_CHECK(_dummy_layer.l)
         world_object()\object_x+_dummy_x.f
         world_object()\object_y+_dummy_y.f
         world_object()\object_layer=_dummy_layer.l
         world_object()\object_ai_path=_dummy.s
            e_global_dummy_debug_output_string.s= world_object()\object_ai_path
        LastElement(world_object())
       SelectElement(world_object(),ListSize(world_object())-2)  ;attention! here we have a hardcoded offset, to get the right alternative gfx , if the mapsystem is changed be aware to check for this
         Else
         ProcedureReturn ;we can not add an element  anymore
       EndIf
       
     Default
   ;    ResetList(world_object())  ;standard  map load methode of the system  ;not needed for stream system
   EndSelect

 
    ;some basic setting for startup for each element which is added
    world_object()\object_gfx_is_valid=#False  ; first setting is all gfx is nit loaded
    world_object()\object_emitter_is_in_use=#False
    world_object()\object_move_direction=#NO_DIRECTION
    world_object()\object_last_move_direction=#NO_DIRECTION
    world_object()\object_can_change=#True ;for some gfx changiong and effects
     ;for the alternative element (on collsion we can change a chest to fire... or what esle...)
    ;dummy... = 0 if default map creation, dummy <> 0 if add object to mapmode
        ;-------------------------------------------------------------------------------------------------------------------------------------------
   
    _ok.l=ReadFile(#PB_Any,world_object()\object_ai_path)
   
    If IsFile(_ok.l)
     
      While Not Eof(_ok.l)
       
            _key.s=Trim(ReadString(_ok.l)," ")  ;remove " " from the string, our keywords do not use  any " " on the begining or on the end or anywhere in the string
       
        Select _key.s
           
          Case "object_file#"
            world_object()\object_gfx_path=ReadString(_ok.l)
           
          Case "object_type#"
            _dummy.s=ReadString(_ok.l)
            world_object()\object_gfx_path=world_object()\object_gfx_path+"."+_dummy.s
            world_object()\ object_gfx_type=_dummy.s
       
            ;-----------------for shadow map path------------------------------------
            _help_path.s=world_object()\object_gfx_path
            ;------------------------------------------------------------------------
           
            world_object()\object_gfx_path=v_engine_gfx_path+world_object()\object_gfx_path
           
            ;here we go for  sprite  and collisions data:
           
              world_object()\object_gfx_id_default_frame=LoadSprite(#PB_Any,world_object()\object_gfx_path,#PB_Sprite_PixelCollision|#PB_Sprite_AlphaBlending )
       
            If IsSprite(world_object()\object_gfx_id_default_frame)
                ;---------------------------- automatic shadow position for all objects --------------------------- this is used if no shadow offset information is in the ai42 file, but shadow is #true
              world_object()\object_shadow_offset_x=SpriteWidth(world_object()\object_gfx_id_default_frame)/8
              world_object()\object_shadow_offset_y=SpriteHeight(world_object()\object_gfx_id_default_frame)/8
              ;------------------------------------------------------------
               world_object()\object_w=SpriteWidth(world_object()\object_gfx_id_default_frame)
               world_object()\object_h=SpriteHeight(world_object()\object_gfx_id_default_frame)
               world_object()\object_gfx_is_valid=#True
               world_object()\object_stream_gfx_loaded=#True
               e_object_streamed.i+1
               Else
             
              e_log_gfx_source.s=world_object()\object_gfx_path   ;log the gfx errors
              E_DEFAULT_ERROR_HANDLING(#E_ERROR_CAN_NOT_READ_MAP_OBJECT,"CAN NOT ADD MAP ELEMENT TO WORLD") 
            EndIf
           
          Case "object_full_screen.b"
             If Val(ReadString(_ok.l))=1
              world_object()\object_full_screen=#True  ;make it fullscreen
              world_object()\object_w=v_screen_w.f
              world_object()\object_h=v_screen_h.f
              ZoomSprite(world_object()\object_gfx_id_default_frame, world_object()\object_w, world_object()\object_h)
            EndIf
           
          Case "object_transparency.l"
           
            world_object()\object_transparency=255-Val(ReadString(_ok.l))
            world_object()\object_transparency_back_up=world_object()\object_transparency
           
           
          Case "object_touch_collision.b"
            world_object()\object_touch_collision=Val(ReadString(_ok.l))
           
           
          Case "object_use_shadow.b"
            world_object()\object_use_shadow=Val(ReadString(_ok.l))
         
          Case "object_shadow_intense.l"
           
            world_object()\object_shadow_intense=Val(ReadString(_ok.l))
           
          Case "object_shadow_offset_x.f"
            world_object()\object_shadow_offset_x=ValF(ReadString(_ok.l))
           
          Case "object_shadow_offset_y.f"
             world_object()\object_shadow_offset_y=ValF(ReadString(_ok.l))
         
          Case "object_do_not_show.b"
           
            _dummy.s=ReadString(_ok.l)
           
            If Len(_dummy.s)=0
              world_object()\object_do_not_show=0
            Else
              world_object()\object_do_not_show.b=Val(_dummy.s)
            EndIf
           
       
           
          Case "object_is_active.b"
           
            _dummy.s=ReadString(_ok.l)
           
            If Len(_dummy.s)<1
                            ;fall back if status is not defined (NULL STRING), we use 1 as value = active, compatibility  for older versions
              world_object()\object_is_active=#True
             
                          Else
             
              Select Val(_dummy.s)
                 
                  Case 1
                    world_object()\object_is_active=#True
                   
                  Case 0
                   
              world_object()\object_is_active=#False
                 
              EndSelect
                           
            EndIf
                   
           
          Case "object_is_player.b"
           

            world_object()\object_is_player=Val(ReadString(_ok.l))
           
            If world_object()\object_is_player<>0
           
              e_player_list_object_id.l=ListIndex(world_object())
              e_internal_sprite_id.i= LoadSprite(#PB_Any,world_object()\object_gfx_path,#PB_Sprite_PixelCollision|#PB_Sprite_AlphaBlending )
              e_internal_sprite_valid.b=#True
         
          EndIf

           
          Case "object_move_x.f"
            world_object()\object_move_x=ValF(ReadString(_ok.l))
 
           
          Case "object_move_y.f"
            world_object()\object_move_y=ValF(ReadString(_ok.l))
 
          Case "object_collision.b"
            world_object()\object_collision=Val(ReadString(_ok.l))
           
          Case "object_internal_name.s"
            world_object()\object_internal_name=Trim(ReadString(_ok.l)," ")
            E_ACTION_ON_INTERNAL_NAME()
           
            If world_object()\object_is_anim=1
             
              E_LOAD_ANIM_SPRITE()
             
            EndIf
           
          Case "object_alpha_blend.l"
            E_DEFINE_BLENDING_MODE(ReadString(_ok.l))
           
          Case "object_is_enemy.b"
            world_object()\object_is_enemy=Val(ReadString(_ok.l))
           
          Case "object_use_ai.s"
            E_SETUP_AI(ReadString(_ok.l))
         
           
          Case "object_is_anim.b"
            world_object()\object_is_anim=Val(ReadString(_ok.l))
           
          Case "object_is_light.b"
            world_object()\object_is_light=Val(ReadString(_ok.l))
           
          Case "object_light_on.b"
            world_object()\object_light_on=Val(ReadString(_ok.l))
           
          Case "object_spritequality.b"
             world_object()\object_spritequality=Val(ReadString(_ok.l))
             
           Case "object_collision_pixel.b"
             world_object()\object_collision_pixel=Val(ReadString(_ok.l))
             
          Case "object_use_random_angle.f"
            world_object()\object_use_random_angle=ValF(ReadString(_ok.l))
           
            If IsSprite(world_object()\object_gfx_id_default_frame)
              RotateSprite(world_object()\object_gfx_id_default_frame,Random(world_object()\object_use_random_angle), #PB_Absolute)
            EndIf
           
          Case "object_random_transparency.l"
            world_object()\object_random_transparency.l=Val(ReadString(_ok.l))
           
          Case "object_random_rotate.f"
            world_object()\object_random_rotate=ValF(ReadString(_ok.l))
           
          Case "object_manual_rotate.f"
            world_object()\object_manual_rotate=ValF(ReadString(_ok.l))
           
          Case "object_auto_rotate.f"
            world_object()\object_auto_rotate=ValF(ReadString(_ok.l))
           
          Case "object_is_emitter.b"
            world_object()\ object_is_emitter=Val(ReadString(_ok.l))
           
          Case "object_is_emitter_type.s"

            Select  Trim(ReadString(_ok.l)," ")
               
                Case "#ENGINE_EMITTER_TYPE_ON_KILL"
                  world_object()\object_is_emitter_type=#ENGINE_EMITTER_TYPE_ON_KILL
           
                Case "#ENGINE_EMITTER_TYPE_RANDOM"
                  world_object()\object_is_emitter_type=#ENGINE_EMITTER_TYPE_RANDOM
               
            EndSelect
           
          Case "object_blink_timer.l"
            world_object()\object_blink_timer=Val(ReadString(_ok.l))
           
          Case "object_max_emitter.l"
            world_object()\object_max_emitter=Val(ReadString(_ok.l))
           
          Case "object_emitter_random_start.l"
            world_object()\object_emitter_random_start=Val(ReadString(_ok.l))
           
          Case "object_emitter_lifetime.l"
            world_object()\object_emitter_lifetime=Val(ReadString(_ok.l))
           
          Case "object_autotransport_x.f"
            world_object()\object_autotransport_x=ValF(ReadString(_ok.l))
           
          Case "object_autotransport_y.f"
            world_object()\object_autotransport_y=ValF(ReadString(_ok.l))
           
          Case "object_is_auto_scroll_x.f"
            world_object()\object_is_auto_scroll_x=ValF(ReadString(_ok.l))
            If  world_object()\object_is_auto_scroll_x<>0
              e_world_auto_scroll_x.f=world_object()\object_is_auto_scroll_x
            EndIf
           
           
           
          Case "object_is_auto_scroll_y.f"
         
            world_object()\object_is_auto_scroll_y=ValF(ReadString(_ok.l))
              If   world_object()\object_is_auto_scroll_y<>0
                e_world_auto_scroll_y.f=world_object()\object_is_auto_scroll_y
                EndIf
           
          Case "object_create_new.s"
            world_object()\object_create_new=ReadString(_ok.l)
           
            Case "object_emitter_random_x.f"
           ;--------------sound system load sprite   (default sound, no special trigger) its in here for compatibility reason of engine with older code/object
           
            Case "object_sound_path.s"
             
            _dummy.s=ReadString(_ok.l)
             
           If Len(_dummy.s)>0
           
            world_object()\object_sound_id=LoadSound( #PB_Any, v_engine_sound_path.s+_dummy.s)
           
            If IsSound(world_object()\object_sound_id)
              world_object()\object_is_sound=1  ;marker we can use for dynamic and automatic soundhandling
            Else
              world_object()\object_is_sound=0  ;no sound file found(no sound file?) so object is no sound object, we prevent engine to exit with error and do not need to check it in the mapruntime
            EndIf
           
          EndIf
         
          Case "object_play_sound_on_rotate.b"
            world_object()\object_play_sound_on_rotate=Val(ReadString(_ok.l))
           
          Case "object_sound_on_random_path.s"
           
            _dummy.s=ReadString(_ok.l)
           
            If Len(Trim(_dummy.s," "))>0
              world_object()\object_sound_on_random_id=LoadSound( #PB_Any, v_engine_sound_path.s+_dummy.s)
            EndIf
           
          Case "object_sound_on_create_path.s"
           
            _dummy.s=ReadString(_ok.l)
            If Len(Trim(_dummy.s," "))>0
              world_object()\object_sound_on_create_id=LoadSound(#PB_Any, v_engine_sound_path.s+_dummy.s)
              E_HANDLE_SOUND(#ENGINE_SOUND_ON_CREATE)
            EndIf
           
                             
           
          Case "object_sound_play_random.l"
            world_object()\object_sound_play_random.l=Val(ReadString(_ok.l))
           
          Case "object_sound_time.l"
            world_object()\object_sound_time=Val(ReadString(_ok.l)) ;get milliseconds out of seconds
           world_object()\object_sound_timer_start=ElapsedMilliseconds()
            ;world_object()\object_sound_timer_end=world_object()\object_sound_timer_start+world_object()\object_sound_time
         
            ;this must be on last position of the select/case because it corrects wrong settings to a valid state -> switch of the not valid switch
          Case "object_sound_volume.l"
            world_object()\object_sound_volume=Val(ReadString(_ok.l))
           
            If world_object()\object_sound_volume>100
              world_object()\object_is_sound=100
            EndIf
           
            If  world_object()\object_sound_volume<0
                world_object()\object_is_sound=0
            EndIf
           
          Case "object_collision_transparency.l"
            world_object()\object_collision_transparency=Val(ReadString(_ok.l))
           
           
          Case "object_play_sound_on_move_path.s"
           
           
              _dummy.s=ReadString(_ok.l)
           
                        If Len(Trim(_dummy.s," "))>0
                          world_object()\object_sound_on_move_id=LoadSound( #PB_Any, v_engine_sound_path.s+_dummy.s)
                       EndIf
           
       
           
          Case "object_collision_tractor_object.b"
            world_object()\object_collision_tractor_object=Val(ReadString(_ok.l))
       
          Case "object_sound_on_remove_path.s"
         
            _dummy.s=ReadString(_ok.l)
           
                        If Len(Trim(_dummy.s," "))>0
                          world_object()\object_sound_on_remove_id=LoadSound( #PB_Any, v_engine_sound_path.s+_dummy.s)
                        EndIf
                       
                       
                     Case "object_use_random_alternative_gfx.b"
                       world_object()\object_use_random_alternative_gfx=Random(Val(ReadString(_ok.l)))   ;we fix this here, not changed in realtime... :)  , maximum: 0....3 !!!!
                       
                     Case "object_alternative_gfx_ai.s"
                       world_object()\object_alternative_gfx_ai=ReadString(_ok.l)
                       
                        Case "object_alternative_random_gfx_ai0.s"
                          world_object()\object_alternative_random_gfx_ai0=ReadString(_ok.l)
                         
                          Case "object_alternative_random_gfx_ai1.s"
                            world_object()\object_alternative_random_gfx_ai1=ReadString(_ok.l)
                           
                            Case "object_alternative_random_gfx_ai2.s"
                              world_object()\object_alternative_random_gfx_ai2=ReadString(_ok.l)
                             
                              Case "object_alternative_random_gfx_ai3.s"
                              world_object()\object_alternative_random_gfx_ai3=ReadString(_ok.l)
                       
                     Case "object_change_on_collision.b"
                       world_object()\object_change_on_collision=Val(ReadString(_ok.l))
                       
                     Case "object_auto_layer.b"
                       world_object()\object_auto_layer=Val(ReadString(_ok.l))
                       
                     Case "object_change_on_random.l"
                       world_object()\object_change_on_random=Val(ReadString(_ok.l))
                       ;value>0 will use this, trigger is 1,
         
         
          Case "object_sound_on_collision_path.s"
         
            _dummy.s=ReadString(_ok.l)
                        If Len(Trim(_dummy.s," "))>0
                                            world_object()\object_sound_on_collision_id=LoadSound( #PB_Any, v_engine_sound_path.s+_dummy.s)
                                                    ;value <>0 = sound, value =0 no sound!
                        EndIf
                       
                       
                         Case "object_sound_on_rotate_path.s"
         
            _dummy.s=ReadString(_ok.l)
                        If Len(Trim(_dummy.s," "))>0
                           world_object()\object_sound_on_rotate_id=LoadSound( #PB_Any, v_engine_sound_path.s+_dummy.s)
                          ;value <>0 = sound, value =0 no sound!
                         EndIf
                         
                         
                             
                         Case "object_sound_on_move_path.s"
         
            _dummy.s=ReadString(_ok.l)
                        If Len(Trim(_dummy.s," "))>0
                           world_object()\object_sound_on_move_id=LoadSound( #PB_Any, v_engine_sound_path.s+_dummy.s)
                          ;value <>0 = sound, value =0 no sound!
                        EndIf
                       
                           
                      Case "object_auto_move_x.f"
                     world_object()\object_auto_move_x=ValF(ReadString(_ok.l))
           
          Case "object_auto_move_y.f"
            world_object()\object_auto_move_y=ValF(ReadString(_ok.l))
           
          Case "object_add_to_quest.b"
           world_object()\object_add_to_quest=Val(ReadString(_ok.l))
                 
                  Case "object_life_time.l"  ;used for objects with limited lifetime, used for just in time created objects(because of the timer)
                    world_object()\object_life_time=Val(ReadString(_ok.l))
                    world_object()\object_end_of_life_time=ElapsedMilliseconds()+   world_object()\object_life_time
                   
                   
                    ;here we put some code for correction:
                    If _mode.l=#E_ADD_ELEMENT_TO_MAP
                    world_object()\object_layer=world_object()\object_auto_layer   
                    EndIf
                   
       
                    EndSelect

                    ;some defaults:
                  ;  world_object()\object_move_direction=#NO_DIRECTION  ;default start value
                    world_object()\object_blink_object_show=#True       ;default we show all objects....

             Wend
             

         
             CloseFile(_ok.l)
             
             E_SETUP_ALTERNATIVE_GFX()   
             E_PERFORMANCE_ADAPTER_BASE()

     
    Else
     
      e_log_ai_source.s=world_object()\object_ai_path
     
      E_DEFAULT_ERROR_HANDLING(#E_ERROR_CAN_NOT_READ_MAP_OBJECT,"CAN NOT ADD MAP ELEMENT TO WORLD") 
     
    EndIf
   
     
EndProcedure



LG
Walter


Zuletzt geändert von darius676 am 09.08.2019 18:20, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Project_17 (Arbeitstitel)
BeitragVerfasst: 09.08.2019 18:19 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
Danke für die Info.
Ich pers. lade immer alles zuerst und render dann nur was die Kamera sieht.

_________________

Links:
PureBasic Discord
[ENGINE] 2D Engine Nautilus (Win)
[INCLUDE] GLFW 3.3 Library
[MODULE] Bass Library 2.4 (Win)
[LIBRARY] Hexi Binary2Hex (Win)



Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Project_17 (Arbeitstitel)
BeitragVerfasst: 12.08.2019 14:43 
Offline
Benutzeravatar

Registriert: 08.03.2010 22:12
Wohnort: AT
Update für die geplante Openworld: Dungeons, Shops, andere Gebiete usw:

die neue Version unterstützt map respawn. Suche in map 0 einen aktiven (alle ausser der erste sichtbare) teleporter/dungeon durchgang.
Der Spieler wird in in die endofworld.worldmap teleportiert.
verlässt man die map wieder durch den Teleporter/dungeondurchgang, befindet man sich genau an der Stelle an der man worldmap 0 verlassen hat, wieder in world map 0. Besonderheit: die Map befindet sich in dem zustand in dem diese verlassen wurde: Kisten geöffnet, Spiders, Blut usw. nur die Spideregg Schalen sind nicht mehr da, dies ist ein "Fehler".

die respawnfunktion , funktioniert aktuell nur im laufenden Spiel, nicht nach einem Neustart

Optimierungen im Bereich der Emitter.

Aktueller build wie immer im ersten Post.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 35 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye