いま一番お得なページ!

MMO 開発ノート

2006-03-05 メンヘラーがMMORPGを作るぞとかいうページ。

GetCharABCWidths

2006-02-28


参考リンク:
  • MSDN
  • http://www.topposystem.co.jp/prog/dl/Win32API/Font/memo.htm
  • DrawText

    2006-02-25

    矩形内で文字列を折り返して描画出来る。
    描画をせずに、折り返した文字列の高さを求める方法がある。

    フォント

    2006-02-24

    概要:
    主にチャット文字の描画に使用

    アルゴリズム:
    1. DrawTextを使う方法
    2. GetGlyphOutlineを使う方法--より細かい要求に応えることが出来る

    DirectX8.1でフォントキャッシュ。

    ID3DXFont

    GetGlyphOutline
    フォントキャッシュ機構が必要。


    参考リンク:
  • 文字にアンチエイリアスをかける
  • 文字にアンチェリ
  • GetGlyphOutline(...)を使用したアンチエイリアスつきフォントの描画方法
  • CDIB

    2006-02-10

    CDIB -- src\2006\dibtest

    mud_dx9進捗

    2006-02-23
    1. WinMain 060223
    2. メッセージループ MessageLoop 060222
    3. ウィンドウ表示 Win 060222
    4. メッセージフック WinHook 060223
    5. スレッド Main 060223

    開発手順

    2006-02-21

    グラフィックを付加する前に、文字ベースでプロトタイピングを十分にやっておく。
    システム的に無理が無いか、十分検証する。

    DirectX9.0cを使用した、mud_dx9 を作る。
    可能なら、プロジェクトのソースコードをマージする。

    移動

    2006-02-21

    移動単位はセル(升目)単位とする。(ドット単位の移動は不可。クライアント側で補完して表示します)
    複数のセルが集まって、1セクターを構成する。
    サーバーでの同期処理は3x3セクターを一塊とする。

    内部的には、セルが1つのチャットルームに対応します。セクターはセルの集合体であり、 サーバーは、3x3セクター全部のチャットルーム(セル)にメッセージを配送して同期をとります。

    このようにMMORPGはMUDから進化したものであり、MOやFPSとは根本的に内部構造が異なります。

    開発手順

    2006-02-20
    1. テスト用のエコーサーバーを作る。開発済み
    2. テスト用クライアントを作る。
      1. エコーサーバーを使って、パケットの送受信テストをする。←今ココ
      2. フォント描画ルーチンの開発。
      3. チャットログ表示ルーチンの開発。
      4. 16進ダンプルーチンの開発。
      5. IME入力ルーチンの開発。
    3. チャットルームを作る。
      1. テスト用チャットサーバーを作る。
      2. ログイン機構を作る。
      3. データベース
    4. フォント描画の高速化

    エコーサーバー

    2006-02-20

    200408\server
    200408\common

    CClient

    2006-02-20

    テスト用のエコーサーバーを使って、パケットの送受信テストをした。

    #include <windows.h> class CClient : public IWinHook { public: bool Open( LPCSTR host, int port, HWND hWnd ); bool Close(); protected: int m_soc; HWND m_hWnd; HRESULT WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); }; #include "Client.h" #define FM_TCPSOCKET WM_USER+1 bool CClient::Open( LPCSTR pszHost, int nPort, HWND hWnd ) { m_hWnd = hWnd; int nErrorStatus; // WSAStartup WSADATA wsaData; WORD wVerReq = MAKEWORD(2, 0); nErrorStatus = ::WSAStartup( wVerReq, &wsaData ); // socket m_soc = ::socket(PF_INET, SOCK_STREAM, 0); // WSAAsyncSelect nErrorStatus = ::WSAAsyncSelect( m_soc, m_hWnd, FM_TCPSOCKET, FD_CONNECT | FD_CLOSE | FD_READ | FD_WRITE ); // LPHOSTENT lphostinfo; lphostinfo = ::gethostbyname( pszHost ); // connect SOCKADDR_IN clsa; clsa.sin_family = AF_INET; clsa.sin_port = ::htons( nPort ); clsa.sin_addr = *((LPIN_ADDR) *lphostinfo->h_addr_list); nErrorStatus = ::connect( m_soc, (LPSOCKADDR)&clsa, sizeof(SOCKADDR_IN) ); } bool CClient::Close() { ::WSAAsyncSelect( m_soc, m_hWnd, 0, 0 ); ::shutdown( m_soc, 2 ); ::closesocket( m_soc ); ::WSACleanup(); } HRESULT CClient::WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { switch( uMsg ) { case FM_TCPSOCKET: switch( lParam ){ case FD_CONNECT: ::MessageBox( hWnd,"サーバに接続しました。","info",MB_OK | MB_ICONINFORMATION ); break; case FD_READ: char szRecvMsg[1024]; int nrc = ::recv( (SOCKET)wParam, (LPTSTR)szRecvMsg, sizeof( szRecvMsg ), 0 ); break; case FD_CLOSE: ::MessageBox( hWnd,"サーバから切断しました。","info",MB_OK | MB_ICONINFORMATION ); ::closesocket( m_soc ); break; } } return 0; // 書き忘れないように }

    通信モジュール::クライアント

    051115

    CClient
    スレッドのデバッグ。期待通りの動作に。
    先日作ったハッシュ関数でIDとPASSをハッシュ化。これでインターネット上には生のIDとPASSは流れない筈だが…
    パケットバッファーはrecv関数でサイズを指定している為、バッファーアンダーランは起こさない筈。

    051102

    CClient

    051101

    CClient

    Sys::Win

    2006-02-19

    シングルトンでウィンドウクラスにアクセス出来るようにした。こうするとメッセージフックを掛けやすくなると思う。

    Sys::Win->Hook( this ); Sys::Win->Unhook( this );

    TTY

    2006-02-19

    PuTTY

    Socket

    2006-02-19 2005-10-30
    参考リンク:
  • VisualC++6.0を使用してTCP/IP通信を実装する
  • Internet Programming
  • Winsock Programmer's FAQ
  • Winsock

    2006-02-19
    No.ServerClient
    1.WSAStartupWSAStartup
    2.socketsocket
    3.WSAAsyncSelectWSAAsyncSelect
    4.bind
    5.listenconnect
    6.FD_ACCEPTFD_CONNECT
    7.FD_READsend
    8.sendFD_READ
    recv

    mud_easy3d

    2006-02-19
    1. メッセージループ MessageLoop
    2. WinHook
    3. ウィンドウ表示 Window
    4. スレッド App
    5. D3Dデバイス D3DDev
    6. Easy3D初期化
    7. フォント テクスチャキャッシュ
    8. IME
    9. FPSTimer

    CWindow

    2006-02-19

    WinHookを組み込み。

    2006-01-19

    Window.h

    CriticalSection

    2006-02-19

    050807\Windows_2_1 からコピペ。

    2006-01-17

    UNIX

    2006-02-18

    UNIXの部屋

    Cygwin

    2006-02-18

    Cygwinを使って、UNIXのソケットプログラムをコンパイルすることが出来る。

    MUD

    2006-02-18

    MMOの前身であるMUDから開発していった方が、 スムースに開発できるような気がしてきた…

    構想
    移動システムはUOや、それ以前のMUDのような古い技術を使い、 表示はEasy3Dで3D化を考慮。
    ライブラリ(Easy3D)を使っていても、文字の表示・入力は自前で書く必要あり。

    DirectX D3Dデバイス D3DDev

    2006-02-18

    Easy3Dを使うために、DirectX8バージョンを作成。 終了時に少し待ってやらないと落ちる現象が発生(謎

    2006-01-15

    3Dレイヤーと2Dスプライトレイヤーの2層構造化。

    2006-01-

    D3Dオブジェクトに参照カウンタを設け、自動で解体されるようにした。
    それにより、D3Dデバイスは複数作ることが可能になった。

    参考リンク:
  • t-pot 『Direct X8.0 入門:Direct Xの初期化』
  • プロジェクトSO

    2006-02-17
    1. メッセージループ MessageLoop
    2. ウィンドウ表示 Window
    3. スレッド
    4. D3Dデバイス D3DDev
    5. Font
    6. IME
    7. ビルボード
    完成させる気が失せたので、以前書いたコードを整理して公開しようと思う。未完成なコードで参考にはならないだろうけどね…

    マップエディタ

    2006-02-17
    1. メッセージループ MessageLoop
    2. ウィンドウ表示 Window
    3. マップ表示
    4. スクロールバー

    Makefile

    2006-02-17

    LIBS= cw32mt import32 .cpp.obj: bcc32 -tW -WM -5 -c $< run.exe: $(OBJS) ilink32 -aa -Tpe -x -Gn C0W32.OBJ $**, $* , , $(LIBS) , ,

    CApp

    2006-02-17

    #include "MessageLoop.h" #include "Window.h" /// アプリケーションクラス class CApp { public: CApp(); ~CApp(); int Run(); CWindow* GetWin() { return &m_Win; } protected: CWindow m_Win; CMessageLoop m_Msg; }; int CApp::Run() { m_Win.Create(); int ret = m_Msg.Run(); return ret; }

    Win32API

    2006-02-16

    D3DDev
    Window
    MessageLoop

    DirectX8

    2006-02-15

    最新版のSDK(DirectX 9.0c)には、ヘッダが一部入っていない。MSは無いものにしたいようだ。

    DirectX 9.0c December 2005

    2006-01-13

    ID3DXSpriteのテスト。

    CMessageLoop

    2006-02-14

    CMessageLoop -- src\2006\MapEdit
    コピペすれば済む程度の処理だが、クラス化して部品化することにする。

    COLLADA

    2006-02-14

    COLLADA Document Object Model (DOM)
    COLLADA仕様ドキュメント日本語版公開
    COLLADA仕様書とCOLLADA DOMのドキュメントの日本語版

    オートアップデーター

    1. 始めにインターネットに繋がっているかチェック。繋がっていなければエラー出力。
    2. 次にlist.xmlをダウンロード。そして、ダウンロードしたlist.xmlをTinyXmlを使い、オープン。
    3. list.xmlに記載されているファイルのハッシュ値を計算。
    4. 記載されているハッシュ値と計算されたハッシュ値が違っていれば、パッチファイルをダウンロード。
    5. 終了条件:list.xmlに記述されているファイルを全て比較したら終了。 そうでなければ3-4を繰り返す。
    6. 必要があれば圧縮ファイルを解凍(zlib)しゲームのフォルダにコピー。


    2006-02-13

    ダウンロード処理をクラス化。CDownload
    基本メソッドはOpen、Close、Download。

    2006-01-22

    オートアップデーターの基礎実験。 wininetを使い、HTTPからバイナリファイルをダウンロードすることに成功。アスキーとバイナリの違いで少しハマったorz


    参考リンク:
  • WinInetによるインターネット上ファイルの読み込み
  • インターネット上にあるファイルを読込む
  • 自動アップデーター作ろうぜ
  • autoUpdater_Free
  • tora3aux
  • インストーラー

    2006-02-13

    優先度:低
    インストーラーは、解凍先を選べるように

    2006-01-26

    必要なし。フォルダを削除すればいいようにする。

    仕様

    2006-01-15現在
  • C++
  • Direct X 9.0c December 2005
  • Winsock 2.0
  • wininet
  • TinyXml
  • ライブラリ

    2006-01-19
  • TinyXml
  • Lua
  • Ayame
  • Mersenne Twister
  • デバッグ用関数 Utility::Debug

    2006-01-23

    バッファオーバーフロー防止に_snprintfを使用するように変更。

    2006-01-22

    コマンドプロンプトを独自に開き、ログ出力するように改良。 AllocConsoleするまではログファイルに出力する仕様。
    いつの間にか、デバッグ用の機能が充実してきてしまっているw

    /// コマンドプロンプト開く void OpenConsole(); /// コマンドプロンプト閉じる void CloseConsole(); 2006-01-15

    Debugoutと関数名を改称。

    void Debugout( std::string s ); void Debugout( const char* s ); void Debugoutf( const char* s, ... ); 2006-01-14

    デバッグ用文字列出力関数のフォーマットを微調整。(ゲームの本質とは関係無いorz)

    000000:84347692:(0) WinMain 2006-01-12

    エラーメッセージボックス

    //テストコード Error( "$ エラーが発生しました" ); 2006-01-11

    バッファオーバーフロー防止に_vsnprintfを使用するように変更。

    //テストコード Debugf( "$ Debugf %d", 999 ); 2005-11-14

    パケットバッファーの16進ダンプ関数作成。
    CClientクラスをオーバーライドし、ダンプするようにした。
    エコーサーバーにSendするとパケットバッファをダンプするテスト。

    タスクシステム

    2006-01-19

    GameObject.*
    CGameObject
    CGameObjectManager

    乱数

  • Mersenne Twister
  • Doxygen

    2006-01-16

    Doxygenを導入した。
    http://www.doxygen.org/

    Thread

    2006-01-16

    CThread

    Config

    2006-01-14

    config.xml

    チャット

    着せ替え

    テクスチャキャッシュ GSDK::CBinaryLoader

    2006-01-13〜2006-01-15

    以前作った試作コードをリファクタリング中〜
    キャッシュ評価アルゴリズムが重いのを軽くしたい…

    2005-03-28

    CBinaryLoader

    DirectX

    ここからランタイムをダウンロードして下さい。

  • BBX
  • スプライト

    2006-01-13

    DirectX 9.0c の ID3DXSprite のテスト。

    DXライブラリ置き場

    IME

    アバター

    040911

    hokou.bmp

    文字列コピー関数

    051123

    strcpy
    strlen
    sprintf
    バッファーアンダーランを引き起こす可能性がある。

    ストリーム

    051122

    使ってみると、凄く便利。止み付きになりそう…
    basic_streambufのデストラクタが呼ばれないのは何故?

    Menu

  • ホーム
  • サンプル
  • アーカイブ
  • アーカイブ2
  • アクセスグラフ
  • Links

    / News / CNET / IGDA / impress / ITmedia / 4Gamer.net / 電撃オンライン / アマゲニュース / ツクールニュースプレミアム / ツクール新聞 / Diary / SOUL GAINER / Revelation of ALTERMIA / SBO / Dのプログラム / まみむめも mmo・製作日記〜 / 元 Jewel-mmo 開発日記 / (・∀・)mmo! / ゲームらびっとne / Community / デジタルトキワ荘 / 創作支援 / ゲーマーズOnline / Others / mixi / SourceForge / TWINTAIL LOVERS. / おちゃっこLAB / Discoversoft / 猫でもわかるプログラミング / t-pot

    リンク

  • SOCIA online
  • 月の詩
  • Nostalgia Moon
  • CreateGame
    1. SOUL GAINER
    2. Revelation of ALTERMIA
    3. SBO
    4. Create Game
    5. (・∀・)mmo!
  • metaseq.net
  • NScripter
  • GamDevPukiWiki

  • Copyright (C) 2004-2006 MoeMoeOnline. All rights reserved.