aboutsummaryrefslogtreecommitdiff
path: root/src/client
Commit message (Expand)AuthorAge
...
* Remove sound menu and show proper msgs if sound is off (#9069)Wuzzy2020-04-13
* Play 'player_jump' when player jumps (#9373)Wuzzy2020-04-12
* Improve waypoints and add image variant (#9480)Lars Müller2020-04-11
* Formspecs: Add state-selection to style elements (#9378)Hugues Ross2020-04-11
* Implement DPI scaling for Windows (#9586)sfan52020-04-11
* Use TILE_MATERIAL_ALPHA for use_texture_alpha entity flag (#9639)Alex2020-04-11
* A few initialization cleanupssfan52020-04-11
* Move clientsimpleobject.h to client folder (#9630)Loïc Blot2020-04-10
* Drop genericobject.{cpp,h} (#9629)Loïc Blot2020-04-10
* Collision various fixes (#9343)TheTermos2020-04-08
* Overall improvements to log messages (#9598)sfan52020-04-08
* Allow relative directories for `screenshot_path`, tweak default path (#9122)Hugo Locurcio2020-04-06
* Fix texture distortion for flowing liquids (#9561)Elias Åström2020-04-02
* Ignore near_plane setting on non-Android platforms (#8749)ANAND2020-03-28
* Fix crash on wielditem/item entitiessfan52020-03-28
* Fix incorrect light updates for wielditem and item visuals (#9540)Danila Shutov2020-03-23
* Add comments for translators (#9510)Wuzzy2020-03-20
* Fix entity lighting (#9514)Danila Shutov2020-03-16
* Improve arm physics (#9485)Jean-Patrick Guerrero2020-03-08
* Fix star visilibity and documentation (since 946c03c6)Jordan Snelling2020-03-08
* set_sky improvements, set_sun, set_moon and set_starsJordach2020-03-05
* Allow texture modifiers in hotbar textures. (#9271)Warr10242020-02-26
* Basic model shading (#9374)Danila Shutov2020-02-16
* StaticText: Reset background on EnrichedString change (#9340)SmallJoker2020-02-01
* Improve core.sound_play with ephemeral sounds and player exclusionsfan52020-02-01
* StaticText/EnrichedString: Styling support (#9187)SmallJoker2020-01-22
* Resized torchlike sprite now attaches to surface (#9303)Wuzzy2020-01-20
* Increase star count to 1000 and decrease radius slightly (#9307)lhofhansl2020-01-16
* Map download: Escape ':' to '_' (#9235)Montandalar2020-01-11
* Renaming the function wasn't enoughSmallJoker2019-12-07
* Attachments: Fix interpolation from (0,0,0) after detachSmallJoker2019-12-07
* Add z-index management to HUDPierre-Yves Rollo2019-12-06
* Fix LocalPlayer-bound sound playback broken by 81c2370SmallJoker2019-12-05
* Improve client-side packet receivingsfan52019-11-25
* Waves generated with Perlin-type noise #8994Lars Hofhansl2019-11-19
* Fix clang-tidy and lint travis checkssfan52019-11-11
* [CSM] Implement minetest.get_csm_restrictions()sfan52019-11-11
* Run on_item_use CSM callback even if item is not marked usablesfan52019-11-11
* [CSM] Expose more env functionssfan52019-11-11
* Refactor CSM restriction code a bitsfan52019-11-11
* Be lenient with extra slashes for CSM pathssfan52019-11-09
* Corrections to client_lua_api.txtsfan52019-11-09
* Load client mods into memory before execution.sfan52019-11-09
* Formspec: draw order and clipping for all elements (#8740)DS2019-11-07
* Clean up font caching, fix bitmap fontsSmallJoker2019-11-03
* Formspec: add hypertext elementPierre-Yves Rollo2019-11-03
* Correction for alpha blending issues in texture mod compositing (#9029)Warr10242019-10-18
* Fix isDead()/autoforward crash (#9031)Paramat2019-10-09
* ContentCAO: Fix segfault on quit (attached)SmallJoker2019-10-09
* Revert Client::sendPlayerPos optimization (part of 81c7f0a) (#9025)ANAND2019-10-08
">*function) { DEBUGPRINT("\nIn thread %lx:\n" "%s:%d: %s: Assertion '%s' failed.\n", (unsigned long)get_current_thread_id(), file, line, function, assertion); debug_stacks_print(); if(g_debugstreams[1]) fclose(g_debugstreams[1]); abort(); } /* DebugStack */ DebugStack::DebugStack(threadid_t id) { threadid = id; stack_i = 0; stack_max_i = 0; memset(stack, 0, DEBUG_STACK_SIZE*DEBUG_STACK_TEXT_SIZE); } void DebugStack::print(FILE *file, bool everything) { fprintf(file, "DEBUG STACK FOR THREAD %lx:\n", (unsigned long)threadid); for(int i=0; i<stack_max_i; i++) { if(i == stack_i && everything == false) break; if(i < stack_i) fprintf(file, "#%d %s\n", i, stack[i]); else fprintf(file, "(Leftover data: #%d %s)\n", i, stack[i]); } if(stack_i == DEBUG_STACK_SIZE) fprintf(file, "Probably overflown.\n"); } void DebugStack::print(std::ostream &os, bool everything) { os<<"DEBUG STACK FOR THREAD "<<(unsigned long)threadid<<": "<<std::endl; for(int i=0; i<stack_max_i; i++) { if(i == stack_i && everything == false) break; if(i < stack_i) os<<"#"<<i<<" "<<stack[i]<<std::endl; else os<<"(Leftover data: #"<<i<<" "<<stack[i]<<")"<<std::endl; } if(stack_i == DEBUG_STACK_SIZE) os<<"Probably overflown."<<std::endl; } core::map<threadid_t, DebugStack*> g_debug_stacks; JMutex g_debug_stacks_mutex; void debug_stacks_init() { g_debug_stacks_mutex.Init(); } void debug_stacks_print_to(std::ostream &os) { JMutexAutoLock lock(g_debug_stacks_mutex); os<<"Debug stacks:"<<std::endl; for(core::map<threadid_t, DebugStack*>::Iterator i = g_debug_stacks.getIterator(); i.atEnd() == false; i++) { DebugStack *stack = i.getNode()->getValue(); stack->print(os, false); } } void debug_stacks_print() { JMutexAutoLock lock(g_debug_stacks_mutex); DEBUGPRINT("Debug stacks:\n"); for(core::map<threadid_t, DebugStack*>::Iterator i = g_debug_stacks.getIterator(); i.atEnd() == false; i++) { DebugStack *stack = i.getNode()->getValue(); for(int i=0; i<DEBUGSTREAM_COUNT; i++) { if(g_debugstreams[i] != NULL) stack->print(g_debugstreams[i], true); } } } DebugStacker::DebugStacker(const char *text) { threadid_t threadid = get_current_thread_id(); JMutexAutoLock lock(g_debug_stacks_mutex); core::map<threadid_t, DebugStack*>::Node *n; n = g_debug_stacks.find(threadid); if(n != NULL) { m_stack = n->getValue(); } else { /*DEBUGPRINT("Creating new debug stack for thread %x\n", (unsigned int)threadid);*/ m_stack = new DebugStack(threadid); g_debug_stacks.insert(threadid, m_stack); } if(m_stack->stack_i >= DEBUG_STACK_SIZE) { m_overflowed = true; } else { m_overflowed = false; snprintf(m_stack->stack[m_stack->stack_i], DEBUG_STACK_TEXT_SIZE, "%s", text); m_stack->stack_i++; if(m_stack->stack_i > m_stack->stack_max_i) m_stack->stack_max_i = m_stack->stack_i; } } DebugStacker::~DebugStacker() { JMutexAutoLock lock(g_debug_stacks_mutex); if(m_overflowed == true) return; m_stack->stack_i--; if(m_stack->stack_i == 0) { threadid_t threadid = m_stack->threadid; /*DEBUGPRINT("Deleting debug stack for thread %x\n", (unsigned int)threadid);*/ delete m_stack; g_debug_stacks.remove(threadid); } } #ifdef _MSC_VER #if CATCH_UNHANDLED_EXCEPTIONS == 1 void se_trans_func(unsigned int u, EXCEPTION_POINTERS* pExp) { dstream<<"In trans_func.\n"; if(u == EXCEPTION_ACCESS_VIOLATION) { PEXCEPTION_RECORD r = pExp->ExceptionRecord; dstream<<"Access violation at "<<r->ExceptionAddress <<" write?="<<r->ExceptionInformation[0] <<" address="<<r->ExceptionInformation[1] <<std::endl; throw FatalSystemException ("Access violation"); } if(u == EXCEPTION_STACK_OVERFLOW) { throw FatalSystemException ("Stack overflow"); } if(u == EXCEPTION_ILLEGAL_INSTRUCTION) { throw FatalSystemException ("Illegal instruction"); } } #endif #endif