Что-то про RadASM2 никогда, никто не вспоминает. Тоже, по-моему, достаточно любопытная штука. Ассемблеры, по-моему, любые можно прикрутить и СИ-компилятор тоже. А вот насколько там это всё удобно реализовано - не знаю, не тестил. Как-то себе на заметку брал, но до практики дело так и не дошло.
Если я правильно понел, чтобы 'появилась' своя IDE на c, нужно сделать каркас приложения с вкладками и написать [функцию] подсветки синтаксиса(для подсветки текста создается специальная структура). При этом нельзя брать код например из notepad++/scylla ибо там все построенно на ООП и классах. Надо процедурное программирование как в AkelPad, но чтобы подсветка была реализована не в плагине, а коде самой IDE, желательно в виде отдельного заголовочного файла(чтобы не загромождать основной код). + чтобы была нумерация строк кода слева. Все. Выбирается и подключается компиль(их может быть несколько). Выбирается c или masm. Можно даже в качестве примеров проектов сделать нейронки: перцептрон, RNN с памятью --- Сообщение объединено, 24 май 2026 в 10:11 --- --- -- Типо такого: --- Сообщение объединено, 24 май 2026 в 10:50 --- --- -- Чтобы не ломать голову каким цветом и что подсвечивать можно цвета взять из vs studio или vs code.
А вот об этом, чуть подробнее можно ? Интуиция мне подсказывает, что это что-то любопытное. Не успеваю за всем следить. --- Сообщение объединено, 24 май 2026 в 11:15 --- Любопытная статья. Может для темы топика и, вообще, на что-нибудь, кому-нибудь сгодится.
Если такая IDE вдруг появится, могу для обучающих примеров сделать многослойный перцептрон который будет распознавать например датасет mnist(у меня есть на delphi 7). И на простом примере показать каким образом разобраться с рекурентностью. От простого к сложному. Там много направлений появляется(например энкодеры). Единственная константа это компилятор от vs с цифр. подписями от microsoft. Остальное - исходники(open source) - примеры/и сама ide. Без всяких улучшений вроде встроенных ллм. ide отдельно, ллм отдельно. Имхо если такое бы было, кому-нибудь сгоди-лось бы.
Обучение и примеры, по-моему, нужно с чего-то такого начинать, так как времени на всё - точно не хватит.
Open source IDE нужна не для тренировки рук, чтобы full контроль был. На первое время можно sublime-text прикрутить, чтобы хедеры протестить.
Research, по-моему, кто-то из нас двоих что-то явно недопонимает. Скорее всего я. Т.е. вы хотите сказать что подключив к Sublime-text хидеры с гитхаба и компилятор CL от Visual Studio - source написанные на C/C++ будут без мата компилятора CL компилироваться? Что-то у меня по этому поводу большие сомнения. Ну дай бог чтобы я ошибался.
GRAFik, подключить компилятор от студии к Sublime-text, рядом в дирректорию положить заголовочные файлы. И попытаться собрать оконное/консольное приложение на чистом c, которое будет без мата комплилироваться. Типо такого: Код (C): #include <stdio.h> int main() { printf("Hello, World!\n"); return 0; } Код (C): #include <windows.h> // Обработчик сообщений окна LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_CREATE: // Создаем кнопку внутри окна CreateWindow("BUTTON", "Close", WS_VISIBLE | WS_CHILD, 20, 20, 100, 30, hwnd, (HMENU)1, NULL, NULL); break; case WM_COMMAND: if (LOWORD(wParam) == 1) { MessageBox(hwnd, "Hello World!", "", MB_OK); } break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, msg, wParam, lParam); } return 0; } // Главная точка входа int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR args, int ncmdshow) { const char CLASS_NAME[] = "Sample Window Class"; WNDCLASS wc = {0}; wc.lpfnWndProc = WindowProcedure; wc.hInstance = hInst; wc.lpszClassName = CLASS_NAME; RegisterClass(&wc); // Создаем окно HWND hwnd = CreateWindowEx(0, CLASS_NAME, "Hello World", WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 300, 200, NULL, NULL, hInst, NULL); // Очередь сообщений MSG msg = {0}; while (GetMessage(&msg, NULL, 0, 0) > 0) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; } И чтобы при этом внутри stdio.h или windows.h не было конфликтов, типа не хватает какого-то файла.
Так вот и я об этом, что каких-нибудь библиотек или ещё чего-нибудь - компилятору от VS будет не хватать. Это ж VS и её компилятор - они найдут до чего докапаться. Ну может я и ошибаюсь. Как говорят в народе: "не так страшен чёрт, как его малюют" и "не боги горшки ожигают".
Оказывается у WinAsm'a есть исходники. --- Сообщение объединено, 24 май 2026 в 21:59 --- Имя 'Гоги' вам о чем нибудь говорит?
Research, о...еть (в смысле обалдеть) !!! WinAsm на MASM32, вроде, написан, если я ничего не напутал? Неужели будете вникать и разбираться?
Мне кажется он сначала на си был написан, а потом переведен на масм. Мне нужен исходник на си а не асме. Сразу на асме такое делать бессмысленно.
Research, если не затруднит, конечно. Вы можете попробовать скомпилировать WinAsm? И если соберется, то скинуть мне какой-нибудь самый наипростейший батник. Я такие вещи коллекционирую. С ними можно всякие эксперименты делать. Но если будут с этим какие-нибудь сложности и заморочки, то не надо тратить время. Может где-нибудь ещё что подвернётся.
Такая же история. Иногда не знаешь как функцию назвать можно глянуть как называется у других. Да и вообще такие вещи можно в разных ситуациях использовать. Спасибо за такую высокую оценку моих способностей в области масма. Если бы мог бы помог Я за весь период погромирования всего 2 функции на асме сделал: сравнение строк и сравнение массивов. Ито по большей части все написано было aa_dav'ом. --- Сообщение объединено, 25 май 2026 в 11:35 --- Компиляция асм проектов. Код (ASM): .DATA szPlus DB "+",0 szCRLF DB 0dh,0ah,0 szLinkResponseFileName DB "link.war",0 szCompileRCNew DB "/v",0 szReleaseAssembleNew DB "/c /coff /Cp /nologo",0 szReleaseLinkNew DB "/SUBSYSTEM:WINDOWS /RELEASE /VERSION:4.0",0 szReleaseLinkNewConsole DB "/SUBSYSTEM:CONSOLE /RELEASE /VERSION:4.0",0 szReleaseLinkNewLibrary DB "-LIB",0 szReleaseAssembleNewDOS DB "/c",0 szDebugAssembleNew DB "/c /coff /Cp /nologo /Fm /Zi /Zd",0 ;Zd=Line number debug info szDebugLinkNew DB "/SUBSYSTEM:WINDOWS /DEBUG /VERSION:4.0",0 szDebugLinkNewConsole DB "/SUBSYSTEM:CONSOLE /DEBUG /VERSION:4.0",0 szDebugLinkNewLibrary DB "-LIB /DEBUG",0 szDebugAssembleNewDOS DB "/c",0 .CODE ;Retutns -1 if I must compile ShallICompile Proc lpFullPathFileName:DWORD, lpExtension:DWORD Local Buffer[MAX_PATH]:BYTE Local LastWriteTimeTxt :FILETIME Local LastWriteTimeBin :FILETIME ;Take source file name-Not filetitle ;build a full path name as if it is in the project folder ;Remove its extension,add lpExtension to it Invoke lstrcpy,ADDR Buffer,ADDR ProjectPath Invoke lstrlen,ADDR Buffer ;In Buffer we now have project path LEA ECX,Buffer ADD ECX,EAX Invoke GetFileName,lpFullPathFileName,ECX ;In Buffer we now have Project path+asmfilename.asm Invoke RemoveFileExt,ADDR Buffer ;In Buffer we now have Project path+asmfilename Invoke lstrcat,ADDR Buffer,lpExtension ;In Buffer we now have Project path+asmfilename.extension ;Bin exists ???? Invoke CreateFile,ADDR Buffer,0,FILE_SHARE_READ,0,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0 .If EAX!=INVALID_HANDLE_VALUE ;(=-1) PUSH EAX LEA ECX,LastWriteTimeBin Invoke GetFileTime,EAX, NULL, NULL,ECX POP EAX Invoke CloseHandle,EAX ;Source File (plain text) exists??? Invoke CreateFile,lpFullPathFileName,0,FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0 .If EAX!=INVALID_HANDLE_VALUE ;(=-1) PUSH EAX LEA ECX,LastWriteTimeTxt Invoke GetFileTime,EAX, NULL, NULL,ECX POP EAX Invoke CloseHandle,EAX .Else RET .EndIf Invoke CompareFileTime,ADDR LastWriteTimeBin,ADDR LastWriteTimeTxt ;-1 First file time is less than second file time. ;0 First file time is equal to second file time. ;+1 First file time is greater than second file time. .EndIf RET ShallICompile EndP CreatePipeAndExecute Proc Uses EDI lpBuffer:LPSTR Local sat :SECURITY_ATTRIBUTES Local StartupInfo :STARTUPINFO Local ProcessInfo :PROCESS_INFORMATION Local hRead :DWORD Local hWrite :DWORD Local BytesRead :DWORD MOV EDI,lpBuffer ;------------------ Invoke SendMessage,hOut,EM_REPLACESEL,FALSE,Offset szCr Invoke SendMessage,hOut,EM_REPLACESEL,FALSE,EDI Invoke SendMessage,hOut,EM_REPLACESEL,FALSE,Offset szCr Invoke SendMessage,hOut,EM_REPLACESEL,FALSE,Offset szCr Invoke SendMessage,hOut,EM_SCROLLCARET,0,0 MOV sat.nLength,SizeOf SECURITY_ATTRIBUTES MOV sat.lpSecurityDescriptor,NULL MOV sat.bInheritHandle,TRUE Invoke CreatePipe,ADDR hRead,ADDR hWrite,ADDR sat,NULL .If EAX==NULL ;CreatePipe failed Invoke LoadCursor,0,IDC_ARROW Invoke SetCursor,EAX Invoke SendMessage,hOut,EM_REPLACESEL,FALSE,ADDR szCreatePipeError INC NrOfErrors .Else Invoke RtlZeroMemory,ADDR StartupInfo,SizeOf STARTUPINFO MOV StartupInfo.cb,SizeOf STARTUPINFO MOV EAX,hWrite MOV StartupInfo.hStdOutput,EAX MOV StartupInfo.hStdError,EAX MOV StartupInfo.dwFlags,STARTF_USESTDHANDLES+STARTF_USESHOWWINDOW MOV StartupInfo.wShowWindow,SW_HIDE ;Create process Invoke CreateProcess,NULL,EDI,NULL,NULL,TRUE,NULL,NULL,NULL,ADDR StartupInfo,ADDR ProcessInfo .If EAX==NULL ;CreateProcess failed Invoke CloseHandle,hRead Invoke CloseHandle,hWrite Invoke LoadCursor,0,IDC_ARROW Invoke SetCursor,EAX Invoke SendMessage,hOut,EM_REPLACESEL,FALSE,ADDR szCreateProcessError INC NrOfErrors .Else Invoke CloseHandle,hWrite Invoke CloseHandle,ProcessInfo.hProcess Invoke CloseHandle,ProcessInfo.hThread .While TRUE Invoke PeekNamedPipe,hRead,NULL,0,NULL,NULL,NULL .Break .If !EAX Invoke ReadFile,hRead,EDI,32000,ADDR BytesRead,NULL .If !EAX .Break .Else MOV ECX,EDI ADD ECX,BytesRead MOV BYTE PTR [ECX],0 Invoke SendMessage,hOut,EM_REPLACESEL,FALSE,EDI .EndIf .EndW Invoke UpdateWindow,hOut Invoke CloseHandle,hRead .EndIf Invoke SetFocus,hOut .EndIf RET CreatePipeAndExecute EndP RunBatch Proc lpBatchFile:DWORD Invoke WinExec,lpBatchFile,SW_SHOWNORMAL RET RunBatch EndP OutputMake Proc Uses EBX ESI nCommand:DWORD, fClear:DWORD Local fNextItem :DWORD Local dwGeneral :DWORD Local CounterBuffer[12] :BYTE Invoke LoadCursor,0,IDC_WAIT Invoke SetCursor,EAX Invoke SetFocus,hOut Invoke SetCurrentDirectory,Offset ProjectPath Invoke LocalAlloc,LPTR,65536 MOV ESI,EAX .If fClear==TRUE Invoke SendMessage,hOut,WM_SETTEXT,0,NULL Invoke SendMessage,hOut,EM_SCROLLCARET,0,0 .EndIf MOV EAX,nCommand .If EAX==IDM_MAKE_COMPILERESOURCE ;/fo Rename .RES file:User must NOT use it Invoke GetFirstNextChild, hResourceFilesItem,TVGN_CHILD .If EAX Invoke GetWindowLong,EAX,0 MOV EBX,EAX Invoke ShallICompile,ADDR [EBX].CHILDWINDOWDATA.szFileName,Offset szExtRes .If EAX==-1 Invoke SendMessage,hStatus,SB_SETTEXT,4,Offset szCompilingResources;"Compiling Resources ..." Invoke lstrcpy,ESI, Offset BinaryPath Invoke lstrcat,ESI, CTEXT("\rc ") Invoke lstrcat,ESI, Offset CompileRC ;Invoke lstrcat,ESI, Offset szSpc Invoke lstrcat,ESI, Offset szSpaceSlashI Invoke lstrcat,ESI,Offset szQuote Invoke lstrcat,ESI, pIncludePath Invoke lstrcat,ESI,Offset szQuote Invoke lstrcat,ESI, Offset szSpc Invoke lstrcat,ESI,Offset szQuote Invoke lstrcat,ESI, ADDR [EBX].CHILDWINDOWDATA.szFileName Invoke lstrcat,ESI,Offset szQuote ;CALL GoMake Invoke CreatePipeAndExecute,ESI ;.Else ; JMP Ex .EndIf .EndIf .ElseIf EAX==IDM_MAKE_RCTOOBJ Invoke GetFirstNextChild, hResourceFilesItem,TVGN_CHILD .If EAX Invoke GetWindowLong,EAX,0 MOV EBX,EAX Invoke ShallICompile,ADDR CHILDWINDOWDATA.szFileName[EBX],Offset szExtObj .If EAX==-1 Invoke SendMessage,hStatus,SB_SETTEXT,4,Offset szConvertingResToObj ;"Converting Res To Obj ..." Invoke lstrcpy,ESI, Offset BinaryPath Invoke lstrcat,ESI, CTEXT("\cvtres ") Invoke lstrcat,ESI, Offset RCToObj Invoke lstrcat,ESI, Offset szSpc Invoke lstrcat,ESI,Offset szQuote Invoke lstrcat,ESI, ADDR [EBX].CHILDWINDOWDATA.szFileName Invoke RemoveFileExt,ESI Invoke lstrcat,ESI, Offset szExtRes Invoke lstrcat,ESI,Offset szQuote Invoke CreatePipeAndExecute,ESI .EndIf .EndIf .ElseIf EAX==IDM_MAKE_ASSEMBLE ;/Fo"c:\winasm\www.obj" ;Notes: First ASM always assembled ; Modules are assembled only if bin is older than source MOV fNextItem,TVGN_CHILD Invoke GetFirstNextChild, hASMFilesItem,fNextItem .If EAX==0 JMP Modules .EndIf Invoke GetWindowLong,EAX,0 MOV EBX, EAX Invoke SendMessage,hStatus,SB_SETTEXT,4,Offset szAssemblingProject ;"Assembling Project ..." AssembleIt: Invoke lstrcpy,ESI, Offset BinaryPath Invoke lstrcat,ESI, CTEXT("\ML ") .If ActiveBuild==0 ;i.e. Release build Invoke lstrcat,ESI, Offset szReleaseAssemble .Else Invoke lstrcat,ESI, Offset szDebugAssemble .EndIf Invoke lstrcat,ESI, Offset szSpaceSlashI Invoke lstrcat,ESI,Offset szQuote Invoke lstrcat,ESI, pIncludePath Invoke lstrcat,ESI,Offset szQuote Invoke lstrcat,ESI, Offset szSpc Invoke lstrcat,ESI,Offset szQuote Invoke lstrcat,ESI, ADDR [EBX].CHILDWINDOWDATA.szFileName Invoke lstrcat,ESI,Offset szQuote Invoke CreatePipeAndExecute,ESI Modules: ;------- .If fNextItem==TVGN_CHILD MOV EDX,hModulesItem .Else NextChild: MOV EDX,[EBX].CHILDWINDOWDATA.hTreeItem .EndIf Invoke GetFirstNextChild,EDX,fNextItem .If EAX MOV fNextItem,TVGN_NEXT Invoke GetWindowLong,EAX,0 MOV EBX, EAX Invoke ShallICompile,ADDR [EBX].CHILDWINDOWDATA.szFileName,Offset szExtObj .If EAX==-1 JMP AssembleIt .Else JMP NextChild .EndIf .EndIf ;.Else ; Invoke SendMessage,hOut,EM_REPLACESEL,FALSE, ADDR szNoASMError ; INC NrOfErrors ;.EndIf .ElseIf EAX==IDM_MAKE_LINK ;Invoke GetFirstNextChild, hASMFilesItem,TVGN_CHILD ;.If EAX Invoke SendMessage,hStatus,SB_SETTEXT,4,Offset szLinking;"Linking ...") ;Create Response File Invoke lstrcpy,ESI,Offset ProjectPath Invoke lstrcat,ESI,Offset szLinkResponseFileName Invoke CreateFile,ESI,GENERIC_READ OR GENERIC_WRITE,FILE_SHARE_READ OR FILE_SHARE_WRITE,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0 .If EAX!=INVALID_HANDLE_VALUE PUSH EDI MOV EDI,EAX ;Let's use ESI for something else!!!! ADD ESI,MAX_PATH .If ActiveBuild==0 ;i.e. Release build MOV EBX,Offset szReleaseLink .Else MOV EBX,Offset szDebugLink .EndIf .If BYTE PTR [EBX]!=0 Invoke lstrcpy,ESI,EBX .EndIf .If ProjectType!=6 .If bPellesTools Invoke lstrcat,ESI, CTEXT(' "/LIBPATH:') .Else Invoke lstrcat,ESI, CTEXT(' /LIBPATH:"') .EndIf Invoke lstrcat,ESI, Offset LibraryPath Invoke lstrcat,ESI,Offset szQuote .EndIf .If ProjectType==1 ;Standard DLL Invoke lstrcat,ESI, CTEXT(" /DLL") Invoke GetFirstNextChild, hDefFilesItem,TVGN_CHILD .If EAX Invoke GetWindowLong,EAX,0 PUSH EAX .If bPellesTools Invoke lstrcat,ESI, CTEXT(' "/DEF:') .Else Invoke lstrcat,ESI, CTEXT(' /DEF:"') .EndIf POP EDX Invoke lstrcat,ESI, ADDR [EDX].CHILDWINDOWDATA.szFileName Invoke lstrcat,ESI,Offset szQuote .EndIf .EndIf MOV fNextItem,TVGN_CHILD Invoke GetFirstNextChild, hASMFilesItem,fNextItem .If EAX==0 JMP LinkModules .EndIf Invoke GetWindowLong,EAX,0 LEA EBX,[EAX].CHILDWINDOWDATA.szFileName .If BYTE PTR [ESI]!=0 .If ProjectType==6 Invoke lstrcat,ESI, Offset szPlus Invoke lstrcat,ESI, Offset szCRLF .Else Invoke lstrcat,ESI, Offset szSpc .EndIf .EndIf Invoke lstrcat,ESI,Offset szQuote Invoke lstrcat,ESI,EBX Invoke RemoveFileExt,ESI Invoke lstrcat,ESI,Offset szExtObj Invoke lstrcat,ESI,Offset szQuote LinkModules: ;---------- MOV EAX,hModulesItem NextObj: ;------ Invoke GetFirstNextChild,EAX,fNextItem .If EAX MOV fNextItem,TVGN_NEXT Invoke GetWindowLong,EAX,0 MOV EBX, EAX .If ProjectType==6 Invoke lstrcat,ESI, Offset szPlus Invoke lstrcat,ESI, Offset szCRLF .Else Invoke lstrcat,ESI, Offset szSpc .EndIf Invoke lstrcat,ESI,Offset szQuote Invoke lstrcat,ESI, ADDR [EBX].CHILDWINDOWDATA.szFileName Invoke RemoveFileExt,ESI Invoke lstrcat,ESI,Offset szExtObj Invoke lstrcat,ESI,Offset szQuote MOV EAX,[EBX].CHILDWINDOWDATA.hTreeItem JMP NextObj .EndIf LinkBinary: ;--------- MOV dwGeneral,0 @@: INC dwGeneral Invoke BinToDec,dwGeneral,ADDR CounterBuffer Invoke GetPrivateProfileString, Offset szBINFILES,ADDR CounterBuffer,Offset szNULL,Offset tmpBuffer,MAX_PATH+1,Offset FullProjectName .If EAX ;Invoke lstrcat,ESI, Offset szSpc .If ProjectType==6 Invoke lstrcat,ESI, Offset szPlus Invoke lstrcat,ESI, Offset szCRLF .Else Invoke lstrcat,ESI, Offset szSpc .EndIf Invoke lstrcat,ESI,Offset szQuote Invoke GetFilePath, Offset tmpBuffer,Offset tmpBuffer2 .If tmpBuffer2[0]==0 ;i.e. path not specified in the project file Invoke lstrcpy,Offset tmpBuffer2, Offset ProjectPath Invoke lstrcat,Offset tmpBuffer2, Offset tmpBuffer MOV ECX,Offset tmpBuffer2 .Else MOV ECX,Offset tmpBuffer .EndIf Invoke lstrcat, ESI,ECX Invoke lstrcat,ESI,Offset szQuote JMP @B .EndIf .If ProjectType==6 Invoke lstrcat,ESI,CTEXT(";") ;I found out that since now I am using a response file ";" causes last character to be inserted twice!!!! .Else Invoke GetFirstNextChild, hResourceFilesItem,TVGN_CHILD .If EAX PUSH EAX Invoke lstrcat,ESI, Offset szSpc Invoke lstrcat,ESI,Offset szQuote POP EAX Invoke GetWindowLong,EAX,0 Invoke lstrcat,ESI, ADDR [EAX].CHILDWINDOWDATA.szFileName Invoke RemoveFileExt,ESI .If RCToObj[0]==0 Invoke lstrcat,ESI, Offset szExtRes .Else Invoke lstrcat,ESI,Offset szExtObj .EndIf Invoke lstrcat,ESI,Offset szQuote .EndIf .If bPellesTools Invoke lstrcat,ESI, CTEXT(' "/OUT:') .Else Invoke lstrcat,ESI, CTEXT(' /OUT:"') ;Offset szOUT ;<--Already has quotes and starting space .EndIf .If ActiveBuild==0 ;i.e. Release build MOV EDX,Offset szReleaseOutCommand .Else ;If ActiveBuild==1 ;i.e. Debug build MOV EDX,Offset szDebugOutCommand .EndIf .If BYTE PTR [EDX]!=0 Invoke lstrcat,ESI, EDX .Else MOV EDX, Offset szNULL .If ProjectType==0 || ProjectType==2 || ProjectType==4; || ProjectType==6 MOV EDX,Offset szExtExe .ElseIf ProjectType==1 ;dll MOV EDX,Offset szExtDll .ElseIf ProjectType==3 ;Lib MOV EDX,Offset szExtLib .EndIf Invoke GetProjectBinName,Offset tmpBuffer,EDX Invoke lstrcat,ESI,Offset tmpBuffer .EndIf Invoke lstrcat,ESI,Offset szQuote .EndIf Invoke lstrlen,ESI MOV EDX,EAX Invoke WriteFile,EDI,ESI,EDX,ADDR dwGeneral,0 Invoke CloseHandle,EDI ;Let's use ESI for something else!!!! Invoke lstrcpy,ESI, Offset BinaryPath .If ProjectType==6 MOV EDX,CTEXT("\Link16") .ElseIf ProjectType==3 .If bPellesTools MOV EDX,CTEXT("\Polib") .Else MOV EDX,CTEXT("\Lib") .EndIf .Else .If bPellesTools MOV EDX,CTEXT("\Polink") .Else MOV EDX,CTEXT("\Link") .EndIf .EndIf Invoke lstrcat,ESI, EDX Invoke lstrcat,ESI,CTEXT(' @"') Invoke lstrcat,ESI,Offset ProjectPath Invoke lstrcat,ESI,Offset szLinkResponseFileName Invoke lstrcat,ESI,Offset szQuote Invoke CreatePipeAndExecute,ESI ;Delete Response File SUB ESI,MAX_PATH Invoke DeleteFile,ESI POP EDI .EndIf ;.Else ; Invoke SendMessage,hOut,EM_REPLACESEL,FALSE, ADDR szNoASMError ; INC NrOfErrors ;.EndIf .EndIf Invoke LocalFree,ESI Invoke LoadCursor,0,IDC_ARROW Invoke SetCursor,EAX RET OutputMake EndP
Наткнулся недавно на впечатляющий шутер от первого лица размером всего 96 килобайт. Есть сорцы: https://github.com/jaromil/kkrieger-werkkzeug3 --- Сообщение объединено, 29 май 2026 в 13:38 ---
Research, понравился комментарий на ютубе: --- Сообщение объединено, 29 май 2026 в 14:18 --- Для тех кто не в теме:
Можно было бы сделать игру чуть больше, но при этом упростить код игры. У них много кода для генерации структур, сложность архитектуры движка значительно бы уменьшилась.